Link zur Experimentierplatine:
http://www.loetstelle.net/projekte/tinydil/tinydil.php
Normale Code-Schlösser haben meist ein numerisches Tastenfeld, um die Zahlenkombination einzugeben. Das hier vorgestellte Codeschloss hingegen verwendet nur einen einzigen Taster, um den Code einzugeben. Der Code besteht dabei aus Tastenimpulsen verschiedener Länge..
Der Code besteht aus Tastenimpulsen, die entweder "lange" oder "Kurz" sein können. Wurde die Kombination richtig eingegeben, wird ein Ausgang für ca 0.5s aktiviert, damit kann dann ein Türöffner etc betätigt werden..
Um einen eigenen Code einzugeben, muss der Onboard-Taster an PB3 während der Code-Eingabe gedrückt gehalten werden. Das bewirkt, dass die erkannte Tastenfolge im internen EEProm abgelegt wird und somit als neuer Code fungiert. Die Eingabe eines Codes wird dabei durch kurzes Aufblinken der Status-LED an PB3 angezeigt.
.
Wurde der Code 3 mal falsch eingegeben, verweigert das Codeschloss für ca 10 Minuten das Aktivieren des Ausgangs.
.
Die Schaltung ist sehr gut für Batteriebetrieb geeignet, da der Prozessor die meiste Zeit im Power Down Modus ist und nur wenige uA benötigt.
Durch Drücken des Tasters wacht der Controller auf (Pin Change Intrrupt) und ist für die Eingabe eines Codes bereit, wobei der Prozessor dabei ebenfalls meistens im Sleep Modus verweilt.
über den Watchdog-Timer erwacht der Controller ca alle 8 Sekunden und gibt einen kurzen "Blitz" mit der Status-LED aus, um die Funktionsbereitschaft anzuzeigen.
.
Die Anzahl der benötigten Tastendrücke kann über den Parameter CODELENGTH eingestellt werden, je nachdem wie hoch das "Sicherheitsbedürfnis" des Anwenders ist. Da jeder Tastendruck und jeder Codeteil recht verschwenderisch in einem eigenen Byte abgelegt wird, kann die Codelänge maximal ca 55 Stellen betragen (Beim Tiny13, SRAM-Stack), was mehr als ausreichend sein sollte. .
Ich betreibe diese Schaltung als "verdeckten Türöffner", der mir schon einige male einen Anruf beim Schlüsseldienst und viel ärger erspart hat.
Fast jeder kennt das Problem, wenn die Haustür ins Schloss fällt und der Schlüssel in der Wohnung liegt. Man bräuchte jemanden, der von Innen den Türöffner betätigt (Meine Wohnungstüre hat einen Türöffner eingebaut).
Genau das kann diese Schaltung:
.
über einen Optokoppler habe ich die Schaltung parallel zu meiner Türklingel (über 1 Widerstand , 1 Diode und 1 Kondensator, da meine Klingel mit Wechselspannung läuft..) angeschlossen.
Normales Klingeln ignoriert das Codeschloss. Aber wenn das Klingeln mit der richtigen Impulsfolge erfolgt, wird kurz der Türöffner aktiviert, und Voila, Sesam öffne Dich.
.
Eine relativ kurze Codelänge ist dabei für mich kein Sicherheitsrisiko, denn wenn ich meinen Schlüssel mal nicht in der Wohnung vegessen habe, sperre ich die Haustüre natürlich noch extra ab, wenn ich weggehe.
.
Quellcode: (Klick hier für Download)
| .include "tn13def.inc"
.def wrongcount = r24
.equ TASTER_INTERN = 3 .equ TASTER_EXTERN = 4 //Wartezeit bei überschreiten der Fehlversuche .equ CODELENGTH = 5 //Die Schluessel-Länge, maximal RAM / EEprom Groesse- Stack)
.org WDTAddr .org PCI0Addr
reset: //Stack Pointer initialisieren //Output und Status-Pins als Ausgang out portb,temp1 //Prescaler sezten und Timer Starten //interne Zaehler zurücksetzen
//Watchdog init
sei
//Pulsieren , dabei wird auch die Sleep-Semaphore wieder geloescht. cbi portb,STATUS //Power Down Modus
OVF0Handler:
dec pulseoutput testbutton: //prüfen, ob taster gedrückt //maximal 10 Interrupt-Zyklen lang hochzählen
// Taster wurde losgelassen //zu kurz gedrückt / entprellung valid: ldi temp1,$00 inc temp1 //Erkannten Tastendruck im SRAM speichern rcall eval
wdthandler: in r1,sreg
pcihandler: in r1,sreg out sreg,r1 eval: //Wenn alle uebereinstimmen, dann Ausgang aktivieren oder //CODELENGTH aufeinanderfolgende Bytes aus EEPROM lesen und vergleichen ldi temp2,low(code) dec temp4 rcall pulse
exiteval: rcall status_short
setcode: //code im EEPROM abspeichern writeloop: rcall status_long ret readeeprom: status_short: status_long:
//Ausgang aktivieren
.eseg code: .byte CODELENGTH |
| Bauteile für dieses Projekt - Anzeigen: | |
|
Aktive Bauelemente |
|
|
Passive Bauelemente |
Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen: