[BASCOM] Odbiór kodu Rc5

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
robson
Użytkownik
Posty: 226
Rejestracja: 22 sty 2006, 19:51
Lokalizacja: S.M.
Kontakt:

[BASCOM] Odbiór kodu Rc5

Post autor: robson » 29 cze 2008, 15:16

Witam
Mam mały problem z moim układem. Wykonałem sobie odbiornik kodu Rc5 na procesorze ATMEGA8. Pod piny od PC.5 do PC.0 podpiąłem wyświetlacz LCD, do nóżki PD.2 (INT0), podpiąłem odbiornik podczerwieni i oczywiście do XT1 i XT2 rezonator kwarcowy 8MHz, a do niego równolegle kondensatory 27p. Słowem typowy przykład z noty katalogowej TFMS5360 i ATMEGA8 - nic poza tym. Identyczny schemat jak w książce Marcina Wiązani "Programowanie mikrokontrolerów AVR w języku BASCOM". Program jest też identyczny i wygląda tak:

Kod: Zaznacz cały

$regfile = "m8def.dat"
$crystal = 8000000

Config Lcd = 16*2
Config Lcdpin = pin , Db4 = Portc.3 , Db5 = Portc.2 ,
	Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 ,
	Rs = Portc.5
Config Rc5 = Pind.2

Dim Address As Byte , Command As Byte

Enable Interrupts

Do
Getrc5(Address , Command)
Command = Command And &B01111111
Cls
Lcd "Adres: " ; Address
Lowerline
Lcd "Komenda: " ; Command
Waitms 100
Loop
End
Problem w tym, że podczas działanie programu na wyświetlaczy cały czas widać:

Adres: 255
Komenda: 127

Gdy przycisnę jakiś klawisz z pilota działającego w standardzie Rc5, na wyświetlaczu widać jego adres i komendę tylko na czas przytrzymania klawisza na pilocie i to z opóźnieniem (niektórych klawiszy w ogóle nie da się wyświetlić, lub trzeba bardzo długo trzymać klawisz pilota).Potem na wyświetlaczu znów pojawia się:

Adres: 255
Komenda: 127

Czy ktoś ma jakiś pomysł co może być nie tak, bo mi się już skończyły:(
Dzięki za pomoc Pozdrawiam robson.

ZbeeGin

Post autor: ZbeeGin » 29 cze 2008, 15:25

A procesor pewnie nowy ze sklepu i pracuje z częstotliwością 1MHz, bo kolega fuse-bitów nie przestawił...

Awatar użytkownika
robson
Użytkownik
Posty: 226
Rejestracja: 22 sty 2006, 19:51
Lokalizacja: S.M.
Kontakt:

Post autor: robson » 29 cze 2008, 15:33

Przestawiłem na zewnętrzny oscylator. Próbowałem już z ciekawości na oscylatorze 4MHz i 16MHz i cały czas to samo. Właściwie nie wiem co bym mógł jeszcze zmienić w programie i układzie, ale jeszcze popróbuje.

Awatar użytkownika
kris74
Użytkownik
Posty: 270
Rejestracja: 16 sie 2006, 17:36
Lokalizacja: Gorzów Wielkopolski

Post autor: kris74 » 30 cze 2008, 8:17

Miałem ten sam problem, czy użyłem attiny2313 czy też mega8 , czy procedura była na przerwaniu czy też w pętli głównej zawsze odbierałem coś z odbiornika, podobnie jak u ciebie robson. Osobiście używam przerwania do odbierania RC5 i wygląda to tak że dopisałem jedną linijkę kodu więcej i rozwiązałem problem odbierania bzdur:

do
if Odebr_kod = 1 then
if Address < 255 then
Lcd "Adres " ; Address ; "Komenda " ; Command
Reset Odebr_kod
Enabled Int0
End if
end if

Mam nadzieję, że rozwiąże to twój problem.

K_o_n_r_a_d
Użytkownik
Posty: 123
Rejestracja: 29 lip 2005, 10:21
Lokalizacja: Lublin

Post autor: K_o_n_r_a_d » 30 cze 2008, 9:14

Wszystko jest jak najbardziej poprawnie. Przecież po wykonaniu polecenia: Getrc5(Address , Command) zmienne Address i Command muszą mieć jakąś wartość. Polecenie Getrc5 nie blokuje wykonywania programu na czas dopóki nie odczyta poprawnej komendy i adresu, wiec zmienne "po przejściu przez to polecenie" muszą przybrać jakąś wartośc, a że akurat 255 jako adres i jako komenda w poprawnym kodzie RC5 nie występują, więc takie wartości są dobrym rozwiązaniem.

Po to jest programista przy pisaniu kodu, aby wykorzystał to i napisał poprawnie program.
Dodatkowo we wszystkich przykładach jest zerowany bit znacznika naciśnięcia przycisku - a jest to bardzo przydatna informacja pomagająca napisać program według założeń.

Sprawdź to, powinno działać tak jak chcesz:

Kod: Zaznacz cały

$regfile = "m8def.dat"
$crystal = 8000000 

Dim Adres As Byte , Komenda As Byte , Togglebit As Bit

Config Lcd = 16*2
Config Lcdpin = pin , Db4 = Portc.3 , Db5 = Portc.2 ,
    Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 ,
    Rs = Portc.5
Config Rc5 = Pind.2 
Enable Interrupts
Cursor Off Noblink
Cls
Lcd "Oczekiwanie" : Lowerline : Lcd "na RC5..."
Do
   Getrc5(adres , Komenda)
   Togglebit = Komenda.7
   Komenda = Komenda And &B01111111
   If Adres <> 255 Then
      Home
      Lcd "Adres: " ; Adres ; "   "
      Locate 1 , 12
      Lcd "Tg: " ; Togglebit
      Lowerline
      Lcd "Komenda: " ; Komenda ; "   "
   End If
Loop : End

Awatar użytkownika
robson
Użytkownik
Posty: 226
Rejestracja: 22 sty 2006, 19:51
Lokalizacja: S.M.
Kontakt:

Post autor: robson » 11 lip 2008, 14:47

Działa wyśmienicie:) Dzięki. Cały czas mnie dziwiło, dlaczego te zmienne uparcie przyjmują takie właśnie wartości... :mrgreen:

Kamil 1
-
Posty: 70
Rejestracja: 01 cze 2007, 15:20

Post autor: Kamil 1 » 12 lip 2008, 9:15

Witam

Ja też zrobiłem sobie odbiornik tego kodu na Atmega8 i wgrałem ten program który podał K_o_n_r_a_d. Mój problem jest taki że po naciśnięciu na pilocie np. 1 na LCD pisze:
Kod: 32 Tg: 1 Komenda: 127, a gdy nacisnę jeszcze raz 1 to pisze co innego np. Kod: 27 Tg:0 Komenda: 95.

Czy to ma tak być? A może pilot nie nadaje w kodzie RC5?

K_o_n_r_a_d
Użytkownik
Posty: 123
Rejestracja: 29 lip 2005, 10:21
Lokalizacja: Lublin

Post autor: K_o_n_r_a_d » 12 lip 2008, 14:24

Najprawdopodobniej pilot nie nadaje w RC5.
Przy powtórnym naciśnięciu przycisku powinien zmieniać się tylko bit, który nazwałem togglebit.

luki5555
-
Posty: 1
Rejestracja: 13 sty 2007, 18:29

Post autor: luki5555 » 12 mar 2010, 6:41

Witam, dołączam się do tematu bo mam podobny problem jak kolega robson z pierwszego posta...Mam ten sam układ również z książki Marcina Wiązani, zrobiony na płytce ZL2AVR...
Jedyna różnica to, że mam inny odbiornik podczerwieni TSOP31236, bo akurat taki miałem pod ręką... Problem polega na tym, że procesor "nie widzi czujnika".. bo sam czujnik jest raczej ok. jak podłączam mu na wyjście diodę to świeci trochę a jak skieruje wiązkę to zaczyna przygasać pulsować, sprawdzałem na kilku pilotach standardu RC5...Program mam taki sam jak kolega z pierwszego postu...Wczoraj nawet wymieniłem odbiornik na TSOP1736 -bez rezultatu..elementy zew. odbiornika identyczne jak w aplikacji, próbowałem z rezystorem 10k między zasilaniem, a OUT i nic...

Nie reaguje miałem na myśli an wyświetlaczu cały czas widnieje ADRES: 255, KOMENDA: 126_
i nie zmienia się....

Fusebity ustawione tak:

http://www.fotosik.pl/showFullSize.php? ... 8106765d45

Proszę o jakieś wskazówki

ODPOWIEDZ