Zawarte tutaj procedury dotyczą obsługi odbiornika podczerwieni pracującego na częstotliwości 36KHz (np. układ TSOP1736) a konkretnie odbioru transmisji Rc5 nadawanej z pilota uniwersalnego lub dowolnego innego pracującego w omawianym standardzie. Język Bascom 8051Do poprawnej pracy z mikrokontrlerem (np. AT89C4051) wymagane jest odpowiednia konfiguracja przerwania zewnętrznego, tak aby reagowało na zbocze narastające. Do tego właśnie wejścia zostanie podłączony odbiornik podczerwieni: Config Rc5 = P3.2 Reset Tcon.0 'reaguje na zbocze narastajace On Int0 Odbierz_rc5 Odczyt będzie dokonywany w obsłudze przerwania zewnętrznego. Po każdym odebraniu kodu Rc5 zmienna bitowa Odebrano przyjmuje wartość 1. Traktując tą zmienną jako flagę bitową w głównej pętli programu możemy napisać procedurę wykonującą odpowiednie czynności zależne od odebranego adresu(0-31) i komendy(0-63): Odbierz_rc5: Getrc5(adres , Komenda) Adres = Adres And &B00011111 'zerowanie bitu 5 Odebrano = 1 Return Do poprawnej pracy wymagane jest zadeklarowanie na początku programu zmiennych używanych w powyższej procedurze: Dim Odebrano As Bit Dim Komenda As Byte , Adres As Byte Poniżej znajduje się przykład programu odbierającego transmisję Rc5: $crystal = 12000000 '12MHz $regfile = "89C4051.DAT" Config Rc5 = P3.2 Reset Tcon.0 'reaguje na zbocze narastajace On Int0 Odbierz_rc5 Enable Int0 Enable Interrupts Dim Odebrano As Bit Dim Komenda As Byte , Adres As Byte Do If Odebrano = 1 Then Odebrano = 0 Disable Int0 '********************************** 'czynnosci wykonywane w zaleznosci od zmiennych adres i komenda '********************************** Enable Int0 End If Loop End Odbierz_rc5: Getrc5(adres , Komenda) Adres = Adres And &B00011111 'zerowanie bitu 5 Odebrano = 1 Return Język Bascom AVRDo poprawnej pracy mikrokontrolera AVR, konieczna jest jego konfiguracja (przykład dla ATTiny2313). ustawiony zostanie typ mikrokontrolera, rezonator kwarcowy i funkcje wyprowadzeń. Skonfigurowane zostanie przerwanie zewnętrzne i obsługa Rc5: $regfile = "attiny2313.dat" $crystal = 12000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B11111011 : Portd = &B11111111 On Int0 Przzew0 Nosave Config Int0 = Low Level Enable Int0 Config Rc5 = Pind.2 Enable Interrupts Odbieranie kodów z pilota odbywa się w przerwaniu zewnętrznym: Przzew0: Disable Int0 Enable Interrupts Getrc5(adres , Komenda) Komenda = Komenda And &B01111111 Odebrano = 1 Return a interpretacja wciśniętego klawisza i adresu pilota następuje w pętli głównej programu: Do If Odebrano = 1 Then If Adres = 0 Then 'pilot o adresie 0 'co się ma dziać w zależności od komendy End If Odebrano = 0 Enable Int0 End If 'inne instrukcje .... Loop End Poniżej znajduje się przykład programu odbierającego transmisję Rc5: '************* Konfiguracja uC ***************** '*********************************************** $regfile = "attiny2313.dat" $crystal = 12000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B11111011 : Portd = &B11111111 On Int0 Przzew0 Nosave Config Int0 = Low Level 'Falling Enable Int0 Config Rc5 = Pind.2 Dioda Alias Portd.6 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0 'mirley test board 2 Config Lcd = 16 * 2 Cls Cursor Off Noblink Enable Interrupts '********** Konfiguracja uC Koniec ************ '****************** Zmienne ******************* '*********************************************** Dim Komenda As Byte , Adres As Byte Dim Odebrano As Bit '************* Zmienne Koniec **************** '************** Petla glowna ****************** '*********************************************** Do If Odebrano = 1 Then If Adres = 0 Then 'pilot o adresie 0 Reset Dioda Cls Lcd Komenda Waitms 10 Set Dioda Waitms 10 End If Odebrano = 0 Enable Int0 End If Loop End '************ Petla glowna Koniec ************** Przzew0: Disable Int0 Enable Interrupts Getrc5(adres , Komenda) Komenda = Komenda And &B01111111 Odebrano = 1 Return
|
|||
Mi coś nie działa ten
Mi coś nie działa ten program, może mam źle ustawione fuse bity lub coś ale na wyświetlaczu nic się nie wyświetla
Używam TSOP1838 - on ma 38kHz
Mógłbyś poprawić kod, żeby działał na 38kHz ?
Re: Rc5
Nic się nie zmienia w kwestii programu, przynajmniej teoretycznie. Jednak polecenie którego używam GetRC5 ma wewnętrznie zaszytą obsługę timera0 i prawdopodobnie ustawione jest to wszystko na 36kHz. Tak ze nie poszalejesz z bascomem i TSOP1738. Prawdopodobnie trzeba będzie napisać swoją procedurę.
Fusebity musisz ustawić tak aby uzyskać zgodność procka z ustawieniami w programie. Jak masz fabrycznie ustawione fusebity to spróbuj wyłączyć bit CKDIV i zmień w programie crystal na 8000000. Może zadziała
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
teraz używam TSOP31236, który
teraz używam TSOP31236, który ma 36kHZ i dalej nie działa. Wiesz czemu ?
Re: Rc5
A do odpowiedniego pinu podłączyłeś odbiornik Rc5? Testujesz dokładnie na programie, który podałem wyżej..... Na pewno odbiornik Rc5 podłączony jest do linii przerwania zewnętrznego?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.