PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8, RC5, IR-Fernbedienung und Taktfrequenzen



jcrypter
03.08.2011, 12:48
Hallo liebes Forum,

ich versuche gerade eine Fernbedienung, von der ich nicht genau weiß ob sie RC5 unterstützt, mit einem ATMega8 zu kombinieren.
Es handelt sich um eine Samsung Fernbedienung für eine Musikanlage.


Ich habe mich dabei an dem Beispiel in Bascom orientiert.

Es hätte mich nicht gewundert, wenn es nicht funktioniert hätte aber ich habe durch einen Fehler im Programm tatsächlich Resultate erhalten.

Ich bekam Werte auf meinem LCD angezeigt.
Aber nur dann wenn die über $crystal eingestellte Frequenz 16 mal größer ist als die tatsächliche über die Fusebits eingestellte.
Ich habe es mit mehreren unterschiedlichen Werten ausporbiert.

Allerdings bekomme ich relativ willkürliche Werte.
Sie unterscheiden sich bei jedem Tastendruck, zumindest in einem gewissen Rahmen. Es gibt drei, vier Werte die immer wieder angezeigt werden.
Teilweise unterscheiden sie sich von Taste zu Taste, teilweise sind es die gleichen Werte.

ich könnte das jetzt so verwenden wenn ich mich auf eine Single-Button-Menüführung einigen könnte... ich hätte aber lieber vier Tasten...

Ich wäre euch dankbar wenn ihr Ideen hättet wie ich es vielleicht doch mit dieser Fernbedienung hinbekomme.
Kennt jemand einen Bascom Code für SAmsung Fernbedienungen mit dem ich es probieren könnte, oder hat jemand eine Erklärung wieso ich überhaupt Werte bekomme?

Danke für eure Mühe!

Crypi

Searcher
03.08.2011, 13:09
Hallo,
ich habe auch mit einem ATtiny45 mit BASCOM GETRC5 nach http://avrhelp.mcselec.com/index.html?getrc5.htm experimentiert.

Hat mit Systemtakt 8MHz über internen Oszillator und $crystal=8000000 auch sofort funktioniert. Allerdings habe ich alle bei mir verfügbaren Fernbedienungen durchprobiert bis ich eine mit RC5 gefunden hatte (War eine von Technisat Satellitenempfänger)

Ob Samsung RC5 benutzt weis ich nicht. Das Du da eine Ausgabe am LCD bekommst scheint mir nach Deiner Beschreibung eher Zufall zu sein.

Das BASCOM Kommando nutzt TIMER0. Wenn Du den auch anderweitig im Programm nutzt, könnte es da Probleme geben!?

Gruß
Searcher

Sauerbruch
03.08.2011, 13:27
...auch hier kann geholfen werden :-)


Zunächst mal zu der Takt-Geschichte: Das ist seltsam, und eines ist ziemlich sicher: Wenn Bascom von einer anderen Taktfrequenz als der tatsächlichen ausgeht, KANN dabei nichts gutes rauskommen. Was für Werte hast Du denn per Fuses bzw. $Crystal gewählt?

Zu den "Wechselnden" Werten beim RC5-Empfang muss man folgendes wissen:

Bit 7 des "Kommando"-Bytes ist ein sogenanntes "Toggle-Bit", mit dem es folgendes auf sich hat:
Wenn Du eine Taste dauerhaft drückst, sendet die Fernbedienung ja ziemlich oft das gleiche Kommando aus (mindestens 10 mal pro Sekunde, wenn nicht öfter). Das heißt aber auch, dass bei einem ganz "normalen" Tastendruck (a.so z.B. für eine halbe Sekunde) das entsprechende Kommando mehrfach gesendet wird. Wenn der Empfänger nun z.B. dreimal das Kommando "8" empfängt, muss er ja irgendwie unterscheiden können, ob die Taste "8" nur etwas länger gedrückt wurde, oder der Bediener tatsächlich dreimal die Taste 8 gedrückt hat. Und das geht mit dem Toggle-Bit, das nämlich bei jedem Tastendruck (!) getoggelt wird. Kommt also immer das gleiche Byte rein weiß der Empfänger, dass der Benutzer halt nur etwas länger auf der Taste steht. Wenn aber "fast" gleiche Bytes eintrudeln, die sich nur im 7. Bit unterscheiden, ist klar, dass die selbe Taste mehrfach gedrückt wurde.

Im Zweifelsfall kann man das 7. Bit des Kommando-Bytes einfach löschen - dann sehen die empfangenen Bytes plötzlich ziemlich gleichmäßig aus!

jcrypter
03.08.2011, 15:59
Danke für eure Antworten!

Die Einstellung war $crystal =1600000 und per fuse 1Mhz bzw. per $crystal=128000000 und per fuse 8Mhz, eben jeweils das 16-fache.

Ich benutze den Timer nicht weiter. Ich habe nichts weiter im Programm als den RC5 Empfang und das LCD.

Wie bekomme ich das 7. Bit gelöscht?

Crypi

Sauerbruch
03.08.2011, 17:00
Also - bevor Du mit RC5 weitermachst musst Du unbedingt sicherstellen, dass Takt und $Crystal übereinstimmen.
Die einfachste Möglichkeit hierfür ist, eine LED mittels Waitms-Befehl mit 1 Hz blinken zu lassen. Das kann man dann mit dem bloßen Auge und einer Uhr mit Sekundenzeiger überprüfen:



$regfile = mega8def.dat (oder so...)
$Crystal = 8000000 (bzw. der in den Fuses gewählte Wert)

Config PORTX.Y = output

Do

Toggle PORTX.Y
waitms 500

Loop


Wenn die LED dann in einem ganz anderen Takt als 1 Hz blinkt, brauchst Du mit RC5 erstmal gar nicht weiter zu experimentieren, weil es hierbei absolut essenziell auf das Timing ankommt.

Und das siebte Bit löschst Du ganz einfach:

GetRC5(adresse, kommando)
kommando.7 = 0