Funkfernsteuerung mit AVR-Controller

Mit 5 Tasten am Sender kann man drahtlos 5 verschiedene Ton/ Blinksignale am Empfänger auslösen und 5 verschiedene Signale von dort über serielle Schnittstelle an das zu steuernde (dritte) Gerät liefern.

Die Fernsteuerung verfügt über 5 Tasten, die man drücken kann. Das wird von einem Tiny26 Controller in ein serielles Signal umgewandelt und von einem kleinen UHF-Sender (433,92 Mhz) der aus einer drahtlosen Klingel ausgebaut wurde, abgestrahlt. Das Verwenden der Klingel erspart den Aufbau eines eigenen Sende und Empfangssystems und da die Dinger in jedem zweiten Ramschladen im Wühltisch liegen, ist es auch nicht teurer und obendrein braucht man sich nicht um Funkvorschriften Sorgen zu machen.

Die Tasten wecken den Controller über Port-Change-Interrupt auf, und da der ansonsten schläft und die Schaltung dann nur 3uA verbraucht, kann man sich trotz der schwachen 30mAh-12V Batterie den Ausschalter eigentlich sparen.

Der Controller läuft, wenn erwacht mit einem Timer Interrupt im Takt von etwa 400Hz. In diesem Takt schiebt er drei Byte Informationen raus und dann ein AbstandsByte = 8mal Low-Pegel. Das vordere und hintere Byte sind Adressbytes, die auch der Überprüfung der Übertragungssicherheit dienen. Die Adressbytes sind fest eingestellt und können nur mit dem Assembler (AVR-Studio4 – Assembler2) geändert werden. Zum Beispiel damit sich mehrere Geräte nicht gegenseitig stören. Die drei Byte werden 10 mal wiederholt damit man sicher sein kann, dass sie auch mal richtig ankommen, dann schläft der Controller wieder. Da das ganze weniger als eine Sekunde dauert, spielt das beim Stromverbrauch keine Rolle. Die asynchrone serielle Übertragung nutzt nicht das serielle Interface des Tiny26, da das erstens nervig unterbelichtet ist, zweitens das serielle Interface (Usart)des Empfänger-Controllers Mega-8 sowieso für anderes vorgesehen ist.



Das Funksignal kommt bei dem Empfänger aus der drahtlosen Klingel an und kommt dort als Rechtecksignal aus dem Empfänger-IC heraus, von wo es ürsprünglich an das De-Codier-IC ging. (Diesen ASK-Chip, bei dem man mit Lötbrücken den Code einstellt.) Das De-Codier-IC hab ich aus der Klingel rausgeschmissen, wie natürlich auch das ursprüngliche Codier-IC aus dem Klingel-sender. Statt des (De)/Codier- Ic's ist jetzt der jeweilige Microcontroller angeschlossen.

Der Empfänger-Controller, ein AT-Mega-8, läuft mit einem Timer-Interrupt-Takt, der genau doppelt so schnell ist, wie der des Senders, also ca 800Hz. (Man könnte den genauen Wert ausrechnen,wichtig ist nur: doppelt so schnell) Der Empfänger schiebt mit diesem Takt abwechsend den Wert des Empfangseingangs in zwei Schieberegister, die er mit den beiden Adressen vergleicht. (funktioniert insoweit wie der asynchrone Empfang des Usart, ist aber unabhängig davon mit Software gelöst) Wenn die beiden Adressen stimmen, wird aus dem (mittleren) Daten-Byte die gedrückte Taste identifiziert und eine Anzahl Töne auf den Piezolautsprecher ausgegeben, die der Nummer der gedrückten Taste entspricht. Die Tonhöhe wurde für jede Taste verschieden eingestellt. Die LED blinkt bei Empfang auf. Bei Taste 1 einmal bei Taste 2 zwei mal usw.

Wenn der Empfänger ein Tastensignal empfängt, gibt er außerdem mithilfe seines USART ( diesmal ist der hardware-mäßig eingebaute USART des Controllers gemeint) am USART-TX-Port-Pin ein Signal mit einer Baudrate von 19200 ab, (mit dem der angeschlossene Roboter gesteuert wird, der aber nicht Bestandteil der hier beschriebenen Schaltupng ist). Die genaue Baudrate erhält man mit 3,6864Mhz-Quarzen. Ansonsten kommt es auf den genauen Wert nicht an. 4 Mhz geht genausogut. Nur dass der Sender und Empfänger die gleichen brauchen, natürlich. Das Signal ist je nach gedrückter Taste verschieden. Der Frame ist : ein Start Bit, 9 Data Bits, ein Stopp-Bit. Parity wird ignoriert, das 9. Bit wird zwar übertragen, aber nicht verwendet.

Schaltbild 1

Schaltbild 2

source-code Sender

source-code Empfänger

Schaltbilder im png Format sehen mitunter schlecht aus, wenn man sie mit dem Browser öffnet. Wenn man sie erst speichert und dann öffnet, kann man sie aber mit den meisten Grafik-programmen korrekt anzeigen, selbst mit Windows-Paint.

Der source-code ist eine asm-File, die sich mit AVR-Studio 4 öffnen lässt und verwendet den AVR-Studio- “Assembler2”. Damit kann man dann die Hex-File erzeugen und ggf Veränderungen durchführen. In die AVR-s gebrannt habe ich die File mit “PonyProg” mit einem STK-300 – kompatiblen Brenner, der aber leider nicht direkt mit AVR-Studio4 läuft, weil das keine Brenner unter STK-500 mehr unterstützt.



zurück zur Homepage