domenica 18 dicembre 2011

Lettura registro a 8 bit


#include <stdio.h>
#include <NIDAQmx.h>
#include <stdlib.h>



int main(void)
{

uInt8 Porta1[3]={0,0,0};
uInt8 OneEl[1]={0};
uInt8 c=0;
int flag=0;

uInt8 LED[8]={1,0,0,0,0,0,0,0};
uInt8 LED2[8]={0,0,0,0,0,0,0,1};
uInt8 Spento[8]={0,0,0,0,0,0,0,0};
uInt8 Dati[8]={0,0,0,0,0,0,0,0};
uInt32 a=1;

int i = 0;

TaskHandle t;
TaskHandle DDisp ;
TaskHandle t2;
TaskHandle t3;
TaskHandle LEDd;

DAQmxCreateTask("LED",&LEDd);
DAQmxCreateTask("task1",&t);
DAQmxCreateTask("DDisp",&DDisp);
DAQmxCreateTask("task2",&t2);
DAQmxCreateTask("task3",&t3);

while(flag!=10)
{
printf("Set Registro\n");
system("pause");

//creo un canale di output digitale associato al dato task t
DAQmxCreateDOChan(t, "Dev1/port1/line0:2", "Output", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(t);

DAQmxCreateDIChan(DDisp, "Dev1/port2/line1", "input", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(DDisp);

DAQmxCreateDIChan(t3, "Dev1/port0/line0:7", "input3", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(t3);

//Inizializzazione segnale di reset(linea 1.0)

DAQmxWriteDigitalLines(t,1,0,10,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[0]=1;
DAQmxWriteDigitalLines(t,1,0,10,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[0]=0;
DAQmxWriteDigitalLines(t,1,0,10,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);

//Fine inizializzazione




//Inizio data Request (linea 1.2)

//printf("Inizio Data-request (linea 1.2):\n");
//Porta1[1] sta gi‡ a 0 quindi mando il comando
//DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[2]=1;
DAQmxWriteDigitalLines(t,1,0,10,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
//printf("Fine Data-request (linea 1.2):\n");

//Fine data Request (linea 1.2)





//Verifico Disponibilit‡ dati ( cioË se linea2.1 Ë nello stato alto

//printf("Verifico Disponibilit‡ dei dati (linea 2.1):\n");
//creo un canale di input digitale associato al dato task DDisp
/*DAQmxCreateDIChan(DDisp, "Dev1/port2/line1", "input", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(DDisp);*/

// se la linea 2.1 Ë nello stato alto i dati possono essere letti

i = 0;
while(c==0){

//printf("Step %d:\nlinea2.1 %d \n", i,c);

DAQmxReadDigitalLines(DDisp,1,10,DAQmx_Val_GroupByChannel,&c,a,NULL,NULL,NULL);
i++;

};
c=0;

// Fine lettura linea 2.1



// Fase di Lettura : richiedo abilitazione su linea 1.3

//printf("Fase di Lettura : richiedo abilitazione su linea 1.3\n");

DAQmxCreateDOChan(t2, "Dev1/port1/line3", "input", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(t2);


OneEl[0]=0;
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,OneEl,NULL,NULL);
OneEl[0]=1;
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,OneEl,NULL,NULL);

//printf(" linea 1.3 abilitata\n");

OneEl[0]=1;
// abilitazione compleatata


// Inizio lettura Porta0 a 8 bit

printf("Fase di Lettura : Inizio lettura porta0 a 8 bit\n");

//operazione di lettura
DAQmxReadDigitalLines(t3,1,1,DAQmx_Val_GroupByChannel,Dati,8,NULL,NULL,NULL);
// FIne Lettura

i=0;
while(i!=8){
printf(" %d ", Dati[i]);
i++;
}
// Riporto a basso le linee 1.3 1.2

//linea 1.3
OneEl[0]=0;
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,OneEl,NULL,NULL);
//linea 1.2
Porta1[0]=0;
Porta1[2]=0;

DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
// Inizio Accensione LEDd con i dati letti

// chiudo il task che usa in input la porta0
DAQmxStopTask(t3);


printf("Inizio Accensione LEDd con i dati letti 1 \n");
DAQmxCreateDOChan(LEDd, "Dev1/port0/line0:7", "Output2", DAQmx_Val_ChanForAllLines);
DAQmxStartTask(LEDd);

printf("inizzializzo:\n");
printf("spento\n");

//Segnale Spegnimento
DAQmxWriteDigitalLines(LEDd,1,0,1,DAQmx_Val_GroupByChannel,Dati,NULL,NULL);
//Segnale di scrittura per rendere effettivo lo spegnimento
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=1;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);


/*
printf("inizzializzo:\n");
printf("spento\n");

//Segnale Spegnimento
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,Spento,NULL,NULL);
//Segnale di scrittura
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=1;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);


system("pause");
printf("Vettore 1\n");

//Accendo 1 si 1 no
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,LED,NULL,NULL);
//abilito scrittura
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=1;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);



system("pause ");
printf("Vettore 8\n");
//Accendo 1 si 1 no

DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,LED2,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=1;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);


system("pause");
printf("spento\n");

//Segnale Spegnimento
DAQmxWriteDigitalLines(t2,1,0,1,DAQmx_Val_GroupByChannel,Spento,NULL,NULL);
//Segnale di scrittura
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=1;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);
Porta1[1]=0;
DAQmxWriteDigitalLines(t,1,0,1,DAQmx_Val_GroupByChannel,Porta1,NULL,NULL);

*/

DAQmxStopTask(t);
DAQmxStopTask(t2);
DAQmxStopTask(LEDd);

DAQmxStopTask(DDisp);
system("pause");
flag++;
}
}

Nessun commento:

Posta un commento