Bonjour,
Je traite actuellement un projet en DUT GEII où je dois acquérir des données analogiques de capteurs qui seront convertis en valeur numérique par le CAN du microcontrôleur. Ces données doivent ensuite être envoyé par liaison série RS232 au raspberry pi qui doit les stocker.
J'avais penser à faire envoyé des demande d’acquisition au microcontrôleur par le raspberry en continue pour tracer une matrice. Et que le programme du microcontrôleur fonctionne en interruption. Je vous met le programme ci-dessous et vous donnez plus de détails si besoin.
Je travail avec le compilateur MP8 et avec un pic16F886.
Code:#include <xc.h> void interrupt Reception (void); void init_IO(void); void init_uart(void); void choix (); int tempe (void); int humi (void); void main(void) { init_IO(); init_uart(); RCIE = 1; // Enable interrupt on RC INTEDG = 0; // falling edge trigger the interrupt INTE = 1; // enable the external interrupt GIE = 1; // Global interrupt enable while(1) { } } void interrupt Reception (void) // interrupt function { if(RCIF==1 && RCIE==1) { // if timer flag is set & interrupt enabled short int c=0; while (RCIF==0); c=RCREG; if(c=='T'){ TXREG=(tempe()&0b11110000)>>8; while(TRMT==0); TXREG=(tempe()&0b00001111); while(TRMT==0); } if(c=='H'){ TXREG=humi(); while(TRMT==0); } } } int humi (){ ADCON0=0b01001011; ADCON1=0; GO=1; while(ADIF==0); short int humidite=0; humidite=ADRESH; return(humidite); } int tempe (){ ADCON0=0b01000111; ADCON1=0b10000000; GO=1; while(ADIF==0); short int temperature=0; temperature=ADRESH; temperature=temperature<<8; temperature=temperature+ADRESL; return(temperature); } void choix (){ short int c=0; while (RCIF==0); c=RCREG; if(c=='T'){ TXREG=tempe(); while(TRMT==0); } if(c=='H'){ TXREG=humi(); while(TRMT==0); } } void init_uart(void) { SPBRG = 25; TXSTA=0b00100101; RCSTA=0b10010000; BAUDCTL = 0x00; } void init_IO(void) { TRISB=0xFF; PORTB=0; TRISA=0xFF; PORTA=0; OPTION_REG=0x85; ANSELH=1;//les entrées sont analogiques }
-----