Zeitschaltuhr - "Funk"
Home > Elektronik > Zeitschaltuhr "Funk"  
 

[Jan. 2017] Zeitgesteuerte Funkschalter

Ein günstiges Funksteckdosenset mit drei Funkschaltern ist das Ausgangsmaterial für die folgende Bastelei. Die weitere Motivation war eine praktische Möglichkeit zu schaffen Lampen zeitgesteuert zu schalten und dabei nicht mit einzelnen Schaltuhren hantieren zu müssen. So entstand eine Steuereinheit, die die Funkschalter unabhängig voneinander schalten kann.

Funktionen

Kern ist wieder ein PIC16F1827 Mikrocontroller, welcher schon ins der Zeitschaltuhr "Extra" zum Einsatz kam. So konnte ein großer Teil des Quellcode im neuen Projekt verwendet werden und ein paar Verbesserungen haben den Weg zurück in das Ursprungsprojekt gefunden.

Die Anzeige ist ein LC-Display mit zwei Zeilen (je 8 Zeichen). Über dies lassen sich alle Zustände und Einstellungen aufrufen. Die Hauptanzeige wird nach einiger Zeit ohne Tasteneingabe eingeblendet. Da die Schaltung batteriegespeist ist (2x Typ AA / Mignon), wird nach 30 Sekunden das Display abgeschaltet (der komplette DC-DC Wandler) – um die Stromaufnahme gering zu halten.
Die Uhrzeit, der Status der Funkkanäle und Zustand der Batterie lässt sich auf der Hauptanzeige ablesen.

 
Aktuelle Uhrzeit
DCF77 Empfang (?)

Batteriezustand (! = schlecht)

 

 

Status der Funkkanäle (A, B, nächste Zeile: C)

Funkuhr
Die Uhrzeit wird automatisch über das DCF77 Funksignal gestellt. Wurde das Funksignal zweimal in Folge erfolgreich empfangen, so erscheint ^ im Display. Nach dem ersten Einschalten oder wenn der Funkempfang für mehr als 4 Stunden nicht möglich war, erscheint ? in der Hauptanzeige. In diesem Fall wechseln alle Funkschalter auf Aus.

Zeitschaltuhr mit Zufallsfunktion
Die Funktion der Zeitschaltuhr ermöglicht es einen, oder auch alle Funkschalter zu einem bestimmten Zeitpunkt ein- oder auszuschalten. Für jede Schaltzeit kann eine Zufallsfunktion aktiviert werden, welche die eingestellte Schaltzeit verzögert. Jeder der 30 Speicherplätze kann frei den Funkschaltern zugeordnet werden.

Zufallszeit
Die maximale Zufallszeit ist von 0 bis 30 Minuten konfigurierbar. Es wird für jede programmierte Schaltzeit eine Zufallszahl in diesem Bereich erzeugt und, falls aktiviert, zu der Ein- oder Ausschaltzeit addiert. Wenn die Zufallszeit auf 0 eingestellt wird, erfolgt keine Verzögerung der Schaltzeiten.

Batteriezustand
Die Batteriespannung wird mit Hilfe einer, im Prozessor verfügbaren, Spannungsreferenz gemessen. Ist der Zustand der Batterien in Ordnung, wird Batt:ok im Display angezeigt. Wenn die Batteriespannung abnimmt, wechselt die Anzeige auf Batt:ko. In diesem Zustand wird diese Meldung angezeigt, sobald das Display eingeschaltet wird. Zusätzlich erscheint ein ! in der Hauptanzeige.

 

top Funksignale

Um den Handsender der Funkschalter nachzubilden und das gleiche Signal über das Sendemodul schicken musste zunächst das Signal analysiert werden. Wie lange dauert eine Telegramm (Frame), wie ist der Kodiert? Dazu wurde der Ausgang des Handsenders angezapft (Übergang des Logik-ICs HS2260A, Ausgang zum Sendemodul Eingang), über einer Schutzschaltung mit einer PC Soundkarte (Line In) verbunden und der Signal mit "Audacity" aufgezeichnet. Die Schaltung ist hier beschrieben.

Nachdem jeder der Sendetaster betätigt wurde sind alle Sechs Signalverläufe als Audiodatei gespeichert. Das Folgende Bild stellt den Verlauf dar. Anhand der Zeitmarkierung in "Audacity" lässt sich die Dauer eines Telegramms bestimmen. Hier sind es 37 ms inklusive einer Pause bevor das nächste Telegramm gesendet werden darf.

 
Dank fleißiger Bastler im Netz, die sich mit der gleichen Aufgabe befasst haben, lässt sich auf eine Kodierung mit drei logischen Zuständen schließen. "0", "1" und "F".
Ein vollständiger Befehl sieht wie folgt aus:
  Jedes logische Datenelement besteht aus 8 Takten, zu je 289µs = 2,312ms um eins der drei Datenelemente zu Senden.
Mit 12 Datenelementen und 4 "Pausenelementen" ergeben sich bei 128 Takten je 289µs eine Länge von 36,99ms für das gesamtes Telegramm.
 

Nach der Auswertung aller Sechs Signalverläufe ergibt sich ein Muster, welches eine Unterteilung der Datenelemente erlaubt. Die ersten 4 in Gruppen-/Hauscode, die nächsten 4 für den jeweiligen Funkschalter und die letzten 4 Datenelemente für den Befehl "An" oder "Aus". Mit dieser Gruppierung lassen sich später im Programm die einzelnen Elemente des Telegramms wieder zusammensetzen und der benötigte Speicherplatz ist relativ klein (28 Byte für 3 Funkkanäle, 32 für 4).
Damit es zu keiner Fehlfunktion der Funkschalter kommt, müssen mehrere Telegramme des selben Befehls in Folge gesendet werden.

 

top Aufbau

Die Elektronik basiert, wie erwähnt, auf einem einfachen Funksteckdosenset welche in Baumärkten oder Elektronikgeschäften erhältlich ist. Bei der Auswahl sollte man darauf achten, das der Sender mit einer geringen Spannung arbeitet – also mit einer Lithium Batterie oder zwei 1,5V Batterien betrieben wird. Nicht mit 9V oder 12V! (Mein Model ist leider mit 12V Batterie, läuft aber mit 5V, dafür mit geringerer Reichweite.)

Der erste Testaufbau um den Sender mit verschiedenen Spannungen und die ersten Zeilen Programmcode auf seine Funktion zu prüfen. Das Sendemodul im Handsender war auf einer separaten Platine untergebracht und ließ sich somit hervorragend ausbauen. Die LED am Sender wurde später noch ausgelötet. Die LED am Mikrocontroller diente meist dazu sekündlich zu Blinken (Debugging).

Es hat einige Zeit in Anspruch genommen, bis sich der Funkschalter zum einschalten bewegen ließ, was auch daran lag, dass mir die 9ms Pause zwischen den einzelnen Telegrammen erst später aufgefallen sind.

Die teil- und komplett bestückte Platine.
Rechts im Bild, das DCF77 Modul von Pollin auf der Platinenrückseite. Der Empfang des Signals ist soweit in Ordnung und mit ein paar Prüfungen in der Software auch zuverlässig.
Der Step-Up Wandler ist ein MAX619CSA welcher, ohne Spulen, aus 2,2 bis 3 Volt 5 erzeugt.

Das Gehäuse entstand aus 4mm Fichtensperrholz – sieht gut aus und lässt Funkwellen passieren. Die Taster aus 5mm Kunststoffresten und das Batteriefach wurde aus einem Spielzeug wiederverwendet. Ein wenig Nacharbeit mit Schlüsselfeilen war noch nötig um das Batteriefach passgenau in das Gehäuse zu integrieren.
Vor dem LC-Display befindet sich eine 1mm Dicke Schutzscheibe. Die Tasten sind mit dünnen Kunststoffstreifen verbunden, so fallen sie nicht so schnell heraus und kompensieren den zu großen Abstand zu den Tastern.
Die ganze Konstruktion, mit verbundenem "Pickit 3" Programmer.
 
Platzhalter für finales Foto.    

 

top PIC Programm

Programmablauf

  1. Initialisierung, Werte aus dem EEPROM lesen
  2. Hauptprogramm:
    1. DCF77 Daten auswerten
    2. Wenn nötig, neue Werte aus dem EEPROM lesen (z.B. bei einem neuen Tag)
    3. Programmierte Schaltzeiten prüfen/ausführen
    4. Tasten auswerten, Funktion aufrufen
    5. LCD Anzeige aktualisieren
    6. Sender aktivieren, sonst DC Wandler abschalten und schlafen legen
  3. Mit Interrupts wird gesteuert:
    1. Systemticker für die Uhr/Kalender
    2. Senden des Funksignals
    3. Interrupt-on-Change für das DCF77 Eingangsignal

Der PIC16F1827 läuft meist mit 4MHz, da in dieser Chip Revision ein paar Bugs steckten und bei Taktraten über 8MHz der ADC nicht mehr richtig funktioniert. (Das Löschen des GO_nDONE Flags erfolgt nicht mehr zuverlässig.) Bei niedriger Taktfrequenz ist die Stromaufnahme geringer und 4MHz reicht für alle Funktionen vollkommen aus, wenn aber ein Funksignal gesendet werden muss, wird auf 16MHz gewechselt.

Der Programmspeicher von 4K "Words" ist mit den benötigen Funktionen, u.a. für das LCD und dem Menü wieder eine Herausforderung. Daher ist ein Teil des Programmcodes per Direktiven "abschaltet":
#define LCD_REDUCED_CODE_SIZE
#define REDUCED_CODE_SIZE

Der Code für die DCF77 Signalauswertung (Messung der Bitlänge, BCD Umwandlung, etc.) stammt, in etwas abgeänderter Form, aus dem Lauer-Sommerabend-Detektor von Fingers elektrische Welt. Der ursprüngliche Code zur Zufallserzeugung stammt von Zabex "Looping Louie", hier meine Version.

Um die Batteriespannung zu messen, wird das "Fixed Voltage Reference (FVR) module" des Prozessors genutzt und auf 2,048 Volt eingestellt. Diese Referenzspannung wird als positive Spannung dem Analog/Digital (ADC) Wandler zugeführt.

Das LCD Menü wurde von der Zeitschaltuhr "Extra" übernommen und angepasst. Dabei sind eine paar Verbesserung, wie z.B. das auslesen aller nötigen EEPROM Werte beim Aufruf des Menüpunkts zur Zeitprogrammierung, in den ursprünglichen Quellcode zurück geflossen.

top Schaltpläne/Layout

Funkschalter aus dem Baumark, weitere Teile von Pollin, Reichelt und gesammelte Bauteile...

Der Schaltplan als PDF Datei

 

Programmcode (MPLAB-X Projekt + hex)