
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Zusammen, als Abschluss der kleine Odyssee nun das fertige Projekt mal vorgestellt. Ist auch gut für Anfänger geeignet. Wer hat es noch schon erlebt. Jemand kommt ungestüm und drückt zig mal auf den Klingelknopf. Warum Menschen das tun? Nun ja, kann man spekulieren. Tatsache ist dann aber, dass ein mehrfaches Dingdong eines Röhrengongs schon recht laut ist. Also überflüssig das Mehrfache. Da sowieso noch open Micro in der Bastelkiste schlummerten, sollte also eine Sturmklingelsperre her. Das Gute an einem Controller ist halt, dass man sein Ideen direkt umsetzen kann. Dazu ist gar nicht viel nötig. Um möglichst kompatibel mit allen möglichen Gongsorten zu sein, sind als Aktoren einfache Miniturrelais im Einsatz. Das heißt, der eigentliche Klingelstromkreis bleibt inhaltlich erhalten. Lediglich dort, wo die Klingel (Gong) ursprünglich war, ist jetzt ein Relais. Ausgangsseitig besteht wiederum der normale Klingelstromkreis, nur mit dem Unterschied, dass der eigentliche Klingelknopf nun der Arbeitskontakt eines Relais ist. Und dazwischen ist der Controller angesiedelt. Der open micro ist vollkommen ausreichend für diese Anwendung. Eigentlich benötigt man nur zwei Ports. Einen als Eingang für den Taster und einen als Ausgang für das Relais. Da ich aber gern eine optische Signalisierung haben wollte, habe ich drei weitere Ports belegt. Eine blaue LED für die Beleuchtung des Klingelknopfes, eine grüne LED zum signalisieren der Betriebsbereitschaft des Controllers und zugleich der Klingelfreigabe und eine rote Blink-LED für die Signalisierung der Sperre. Alle Ausgänge werden mit Hilfe eine ULN2803 angetrieben. Das erspart einige diskrete Bauteile, auch wenn nur vier Kreise benutzt werden. Damit keine kurzzeitigen Störungen im Bereich der Klingelleitung den Gong "versehentlich" auslösen, ist eine Entprellung (mit Verzögerung) des Klingelimpulses im Programm eingebaut. Wie das Ganze funktioniert steht als Beschreibung am Ende im Quelltext. '*************************************************************************************** '* * '* Sturmklingelsperre V1.0 by Ati mit einem Open-Micro * '* * '*************************************************************************************** ' --- Betriebssystem konfigurieren ----------------------------------------------------- include "om.def" ' Definitionen fuer Betriebssystem RunOnErr = on ' bei Fehler Programm neustarten (Fehler in ERR) PullUpA = 0 ' Pull-Up-Widerstände - aus '--------------------------------------------------------------------------------------- '--- Definitionen der QT4 Ports -------------------------------------------------------- define Taste port[2] 'Digital-Port1 / Eingang Klingeltaste define LED_rot port[4] 'Digital-Port4 / Ausgang für LED Treiber define LED_gruen port[5] 'Digital-Port5 / Ausgang für LED Treiber define LED_Tuer port[6] 'Digital-Port3 / Ausgang für LED Treiber define Relais port[1] 'Digital-Port0 / Ausgang Klingelrelais '--------------------------------------------------------------------------------------- ' Die Pinbelegung der ' Open-Micro (QT4) _____ _____ ' | \__/ | ' 1 [ VDD GND ] 8 VDD = 4.6 bis 5.5 Volt ' | | ' LED Tür 2 [ PTA5 PTA0 ] 7 Ausgang Klingelrelais ' | | ' LED grün 3 [ PTA4 PTA1 ] 6 Klingeltaste ' | | ' LED rot 4 [ PTA3 PTA2 ] 5 host/run ' |______________| ' define Flanke1 Bit[81] ' Flankenbit Taste '--- Startprogramm --------------------------------------------------------------------- #init LED_rot = 1 ' Rote Blink LED ein als Programstartsignal LED_gruen = 0 ' grüne LED aus LED_Tuer = 0 ' Tür Taster LED aus Pause 240 LED_rot = 0 ' Rote Blink LED aus LED_gruen = 1 ' grüne LED ein als Bereitschaftssignal LED_Tuer = 1 ' Tür Taster LED ein '--- Hauptprogramm --------------------------------------------------------------------- #start if Taste=0 then goto setz1 ' Taste gedrückt? Ja, dann setze EIN-Flanke Flanke1 = 0 ' FlankenBit off setzen goto start ' Reset Ein-Flanke (bei Nichtbetätigung der Taste) #setz1 if Flanke1 then goto Klingel ' Ein-Flanke gesetzt? Nein, dann nächster Schritt. Ja, dann gehe zum Unterprogramm Klingel Flanke1 = on ' Setze Ein-Flanke (Sperre für weiteres Setzen) Pause 10 ' kurze Pause vor erneuter Abfrage goto start ' Rücksprung zum Start #Klingel Flanke1 = 0 Relais = 1 ' Klingelrelais ein LED_rot = 1 ' rote LED ein LED_Tuer = 0 ' Tür LED aus LED_gruen = 0 ' grüne LED aus pause 40 ' Pause 800 Millisekunden Relais = 0 ' Klingelrelais aus pause 240 ' Pause 4800 Millisekunden LED_rot = 0 ' rote LED aus LED_gruen = 1 ' grüne LED ein LED_Tuer = 1 ' Tür LED ein goto start end ' Erklärung ' im Ruhezustand läuft der Programmteil ab #start immer wieder durch. ' Erst wenn die Klingeltaste gedrückt wird, wird zu #setz1 gesprungen. ' Hier wird abgefragt, ob die Flanke bereits gesetzt ist. Wenn nicht, dann wird sie gesetzt. Das Programm springt wieder auf Anfang. ' Da die Programmdurchlaufzeit gering ist, ist die Dauer eines Tastendrucks länger als ein Umlauf. Jetzt wird also erneut abgefragt, ' ob die Flanke gesetzt ist. Diesmal ist die Flanke gesetzt und es folgt ein Sprung zu #Klingel. ' Im Unterprogramm wird das Klingelrelais angesteuert (Ding), die grüne LED geht aus, die rote Blink-LED geht an, die Tür-LED wird ausgeschaltet. ' nach 800 ms wird das Klingelrelais abgeschaltet (Dong). es folgt eine Pause von rund 5 Sekunden. Dann wird die rote Blink-LED abgeschaltet, ' die grüne LED und die Türklingel-LED wieder eingeschaltet. Im Anschluss erfolgt der Sprung zum Programmstart. |
| Antwort schreiben |