Bonjour à tous !
Voila je suis débutant en µC et programmation. J'ai un petit projet à faire pour le bahu : utiliser un microcontrolleur (PIC 16F688) pour mesurer plusieurs niveaux de tensions grâce CAN du PIC, une fois fait commander des relais ( via un transistor) et faire clignoter une led différemment suivant chaque cas.
J'ai fait un programme en c, compilé avec PCWHD (ccs). Ce programme fonctionne mais trop lentement à mon gout (2sec pour changer de cas) ! Je vous fournis le schéma + la prog en c, pour que vous disiez se que vous en pensez. Quel moyen d'optimiser cette prog ??
En effet le programme lance une CAN sur 8bit, je récupère le résultat qui est multiplié par une constante pour avoir une tension. Cette tension mesurée parcours des boucle if,else : "si" je suis dans le cas je fait "ça" sinon je met à zéro mes PIN concernées. voilà en gros mon petit programme.
Je prends tout les conseils qui viendrons
Pièce jointe suppriméeCode:#include <16F688.h> #device adc=8 #use delay(clock=8000000) float vin0,Rtemp; int n=0,i; void seq_1 () { output_high(PIN_C0); output_high(PIN_C1); output_high(PIN_C3); } void seq_2 () { output_high(PIN_C2); for(i=0;i<2;i++) { output_high(PIN_C3); delay_ms(500); output_low(PIN_C3); delay_ms(500); } } void seq_3 () { output_high(PIN_C2); for(i=0;i<2;i++) { output_high(PIN_C3); delay_ms(50); output_low(PIN_C3); delay_ms(100); } } void seq_4 () { for(i=0;i<2;i++) { output_high(PIN_C4); delay_ms(2500); output_low(PIN_C4); delay_ms(2500); } } main() { setup_oscillator(OSC_8MHZ); setup_adc_ports(sAN2); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(2); while(1) { //delay_ms(500); Rtemp=read_adc(); vin0=Rtemp/51; if((vin0>=0) && (vin0<1.5)) // tension à 1V { seq_1(); } else output_low(PIN_C2); if((vin0>=1.5) && (vin0<2.2)) // tension à 2V { seq_2(); } if((vin0>=2.2) && (vin0<2.9)) // tension à 2.5V { seq_3(); } else { output_low(PIN_C0); output_low(PIN_C1); output_low(PIN_C3); } if((vin0>=2.9) && (vin0<3.5)) // tension à 3V { seq_4(); } } }
-----