Salut tout le monde,
Je reviens avec des problèmes comme d'habitude j'ai une erreur dans ma programmation et j'espère avoir de l'aide par vos conseils si vous permettez
Avant je déclare que j'ai travaillé sur le programme posé ici :
http://www.roboticus.org/electroniqu...arouge-theorie
pour le protocole c'est simple :
la transmission débute par l'envoi d'un état haut pendant 1280 us
arret de transmission pendant 640 us
aprés si on désire anvoyer 1 on envoi une fréquence de 36 Khz pendant 640 us sinon (0) en envoi rien pendant 640 us
aprés l'envoi d'un état haut de 640 us
et on passe au bit suivant et ainsi de suite
voila les programmes que j'ai fais sur Mikroc pro :
pour l'émetteur :
pour le récepteur:Code:int boucle; int cle; int cle_test; void PWM_start(){ PWM1_Init(36000); PWM1_Set_Duty(127); PWM1_Start(); delay_us(1280); PWM1_stop(); } void PWM(){ delay_us(640); PWM1_Init(36000); PWM1_Set_Duty(127); PWM1_Start(); delay_us(640); PWM1_stop(); } void interrupt() { tx1: PORTB.F6=1; delay_ms(2000); PORTB.F6=0; delay_ms(2000); cle=0X11; goto tx; //tx2: //cle=0X12; tx: PWM_start(); delay_us(640); cle_test=cle &&0b10000000 ; if (cle_test==0X80){PWM();} else delay_us(1280); endtx: cle=cle<<1; PWM(); boucle=boucle-1; if(boucle==0){delay_ms(40);goto fin;} else goto tx; fin: delay_us(1); INTCON.RBIF=0; INTCON.INTF=0; } void main() {TRISA=0;TRISB=1; while(1){ boucle=8; INTCON=0X90; PORTB.F7=1; delay_ms(2000); PORTB.F7=0; delay_ms(2000); //asm SLEEP; // Plonger le pic dans un someil } }
pour la Led IR je l'ai connecté à la sortie du signal PWM et l'autre broche à une résistance de 200 ohm liée au 5VCode:unsigned char text0[4] ; int temp0 = 0; void Capteur_Temperature(){ PORTB.F2=1; delay_ms(2000); PORTB.F2=0; delay_ms(2000); } void main() {int boucle;int cle;TRISB=1; while(1){ main: if (PORTB.f0==1){goto main;} rrx: boucle=0X08; delay_us(1280); if (PORTB.f0==1){goto main;} bouclerx: if (PORTB.f0==0){goto bouclerx;} else delay_us(640); cle=cle<<1; if (PORTB.f0==0){goto rx1;} else cle=(cle &&0b11111110); rxend: delay_us(820); if (PORTB.f0==1){goto main;} else boucle=boucle-1; if (boucle!=0){goto bouclerx;} else goto analyse; rx1: cle=(cle ||0b00000001); goto rxend; analyse: if (cle==0X11){Capteur_Temperature();} } }
lorsque j'appui sur le bouton poussoir la led clignote ce qui montre que la programme d’interruption est exécuté mais je ne sais pas c'est déja en principe le programme est dans le bon sens ou non ?
je vous remercie par avance.
-----