PIC 12C765

Witam, Poszukuję osoby znającej się troszkę na programowaniu układów z serii PIC. Mam do wykonania adapter który odczytywał by i nadawał za pomocą interface'u podczerwieni a sterowany byłby lokalnego sterownika(PLC) poprzez port RS232. Nadawanie i odbieranie musi odbywać się w standardzie Manchester. (czyli jak w domowych pilotach). Niestety urządzenie którym chcę sterować nie nadaje w standardzie kodowania RC5 - miałbym gotowe rozwiązanie (AVT 519 i AVT5104). Potrzebuje tak zmienić poniższy listing aby nadajnik nadawał dokładnie to co zostanie mu wysłane przez port RS232 (9600,8,,1,). To samo tyczy się odbiornika musi dekodować system Manchester i dokładnie to co odbierze wysyłać do portu RS232 (9600,8,,1,). Za pomocą prostego odbiornika podczerwieni i programu Girder odebrałem kody wysyłane przez oryginalny nadajnik urządzenia. To jest jedna z nich 3C31F3333F860619 (wszystkie instrukcje zaczynają się na 3C31).

List. 1. Procedury służące do wystania dowolnego kodu w systemie RC5 // wysyła logiczne zero f=36kHz kwarc 20MHz // stan_0() {int i; led_ir=0; //wylacz diode for(i=32;i>0;i-) //powtorz 32 razy {led_ir=1; delay_us(13); //stan wysoki 13us delay_cycles(4); //+800ns=13,8us led_ir=0; delay_us(13); //stan niski 13us delay_cycles(1); //+200ns=13,2us+3cykle=13,8us } //13,2+(3*200)=13,8us delay_us(875); //875+13=888us } // wysyla logiczna jedynke f=36kHz kwarc 20MHz // stan_1() {int i; led_ir=0; delay_us(888); for(i=32;i>0;i-) //powtorz 32 razy {led_ir=1; //zapal diode delay_us(13); //czekaj 13us delay_cycles(4); //+800ns=13,8us led_ir=0; //zgas diode delay_us(13); //stan niski 13us+3cykle przez licznik delay_cycles(1); //+200ns+600ns=13,8us } //razem 2 *13 , 8 = 27 , 6us = 36 , 2khz } // Wysyla podana sekwencje w rc5 // // toggle=1 // // address 0-31 // RC5_send(int address, int command) { int ii; address | =0b11100000; command<<=2; for (ii = 0;ii< = 7;ii + +) //wysyla address + 2bity startu = 1, { //+ togglebit=1 address<< = 1; //przesunw lewo o j eden if(bit_test(status,0)) stan_1(); //jesli c=1 to stan_1() else stan_0(); //jesli 0 to stan_0() } for (ii = 0;ii< = 5;ii + +) //wysyla 5bitow command { command<<=1 ; //przesunw lewo o jeden if(bit_test(status,0)) stan_1(); //jesli c=1 to stan_1() else stan_0(); //jesli 0 to stan_0() } }

Jeżeli może ktoś pomóc proszę o kontakt.

Reply to
mrb_2004
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.