Odbieranie Transmisji Rc5


0
Ocena: None

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 8051

Do 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 AVR

Do 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




Portret użytkownika shoter09

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 ?

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.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 , Db7 = Pc.0 , Db6 = Pc.1 , Db5 = Pc.2 , Db4 = Pc.3 , E = Pc.4 , Rs = Pc.5       
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

Portret użytkownika mirley

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.

Portret użytkownika shoter09

teraz używam TSOP31236, który

teraz używam TSOP31236, który ma 36kHZ i dalej nie działa. Wiesz czemu ?

Portret użytkownika mirley

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.