Zeitrelais mit dem ATtiny13
Vor gut 25 Jahren habe ich mit LOGMOS ICs (40er Serie, damals und auch
heute super Bausteine) für mich drei Zeitrelaiskreise mit der
Funktion 5 Min. Licht und Dauerlicht schaltbar über
Flächentaster an der Wand für Garten, Eingangstür und
Vorraum, mühselig auf einer Lochrasterplatine aufgebaut und seit
dieser Zeit in Betrieb. Die Relaiskontakte sind dementsprechend
gezeichnet da auch Neonlampen, also Induktivitäten daran
hängen.
Da ich vor gut 30 Jahren unter anderem
Assemblerprogramme bei Siemens für 8080/85 µPs geschrieben
habe bin ich jetzt, in meiner eigenen Verschrottungsphase, auf die Idee
gekommen mir die neue µC-Generation zu Gemüte zu
führen. Das ist ja elektrotechnische Völlerei auf kleinstem
Raum.
Nach Errichtung einer minimalen Infrastruktur mit Pollin
Evaluation Board wurde, durch einige Änderungen an diesem (z.B.
Steckbarer Nullkraftsockel für die versch. µC Typen) und
einem betagten Laptop mit 9pol. RS232 Schnittstelle, ans Sammeln von
Datenblättern gegangen. Atmel hatte durch sein
Preis-Leistungsverhältnis die Nase vorne. Da ging es auch schon
los: der Tiny13 hat es mir erst einmal angetan.
So
entstand ein Redesign meiner 25 Jahre alten Schaltung mit drei
Stück Tiny13 gegenüber 7 LOCMOS von früher. Ein winziger
Schritt für die Menschheit, ein riesen Schritt für mich.
Kurze
Beschreibung: Bei Betätigen der Taste Licht wird der 1,5-µf
-Tantal entladen (Flächentaster haben kein besonderes
Kontaktmaterial und brauchen eine Mindeststrombelastung zur
einwandfreien Funktion), der fallende Impuls verursacht ein
Weiterschalten im Programmablauf auf die ca.5 Min. Zeitschleife. Eine
weitere Betätigung auf Dauerlicht und nochmals auf
Ausgangsstellung. Die freien Beinchen "mussten" einfach mit vorhandenen
Leds, die den Schaltzustand darstellen, bestückt werden.
Wichtig
ist der Netztrafo. Ich habe nach Durchsuchen meiner Schatztruhe
Netztrafos mit 2,9 mA an 230 V Ruhestrom, ist 0,63 W Dauerleistung,
gefunden. Das ist erträglich, ist doch das Teil 365 Tage im
Einsatz und viele Kleineisentrafos einfach dahingehend Schrott (bis 15
mA!!), zu Tode gespart. Man könnte auch ein Kondensatornetzteil
bei kompletter Kapselung ins Auge fassen, macht aber durch den
Relaisstrom ein Problem.
Beleuchteter Tastschalter: Wird in meinem kleinen Projekt der 10-k-Widerstand auf 5,6 k verringert und mit 3 od. 4
Dioden 1N4148 in Serie (oder Z-Diode) eine superhelle Led über den Kontakt
geschaltet so komme ich auf ca. 0,06 W Verbrauch des Tastenzweiges bei ca. 3 mA,
und erhalte mir die Schaltmöglichkeit am PB0. Könnte leicht sein dass ich in
Summe bei konventionellen Lösungen lande, denn eine brauchbare kleine Glimmlampe hat in der
Regel 47 k Vorwiderstand und nimmt immerhin 0,3 - 0,5 W auf.
Download: ZeitrelaisATtiny13.bas
'--------------------------------------------------------------------------'
' Zeitrelais V2 ATtiny13.bas '
' 2012 ,OE3FHA Hubert '
' Freeware '
'--------------------------------------------------------------------------'
' '
'Dieses Zeitrelais mit ATtiny13 ermöglicht das Treppenlicht nach einmaligem'
'betätigen der Taste T (für die Zeit t=n Anzahl der Schleifendurchlaeufe) '
'einzuschalten oder in dieser Zeit auf Dauerlicht zu schalten, Ein dritter '
'Tastendruck stellt die Ausgangslage "Licht aus" wieder her. '
' '
'Einstellungen am Taster : 3 mögliche '
' '
' Ausganslage : Portb.4 = 0 Licht aus '
' 1. Tastendruck : Portb.4 = 1 (Dauer t= For A = 1 To n) '
' 2. Tastendruck : Portb.4 = 1 (Dauer t= unendlich) '
' 3. Tastendruck : Portb.4 = 0 Ausgangslage, Licht aus '
'--------------------------------------------------------------------------'
$regfile = "attiny13.dat" 'verwendeter Prozessor
$crystal = 1200000 'Definition des Takt
$hwstack = 15 'Reservierung im SRAM
$swstack = 15
$framesize = 15
Ddrb = &B00011110 'konf Port's B auf > 0=Eingabe 1=Ausgabe
Portb = &B00000000 'setze Port's B auf 0
Rem Pinb.0 = 1 'Pin 0 auf 1 setzen
Dim A As Integer '1.Variable für Schleife 'Timeloop
Dim B As Integer '2.Variable für Schleife 'Timeloop
Config Debounce = 30 'Zeit der Kontaktentprellung in ms
'Funktionstest nach Neustart
Portb.1 = 1 'Led Main gn >ON
Portb.2 = 1 'Led Time ge >ON
Portb.3 = 1 'Led Perm rt >ON
Wait 1
Main: 'Warten auf Taste
Portb.1 = 1 'Led Main gn >ON
Portb.2 = 0 'Led time ge >OFF
Portb.3 = 0 'Led Perm rt >OFF
Portb.4 = 0 'Rel+Led ge >OFF
Do 'Warteschleife
Debounce Pinb.0 , 0 , Timeloop 'Wenn Taste gedrueckt 'Timeloop'
Loop
Timeloop: 'warten auf Taste oder Schleifenende
Portb.1 = 0 'Led Main gn >OFF
Portb.2 = 1 'Led Time ge >ON
Portb.3 = 0 'Led Perm rt >OFF
Portb.4 = 1 'Rel+Led ge >ON
For A = 1 To 500 'Zeitschleife Multiplikator
For B = 1 To 15000
If A = 500 Then Goto Main ''Main' wenn A erfüllt
Debounce Pinb.0 , 0 , Perm 'Wenn Taste gedrueckt 'Perm'
Next B
Next A
Perm: 'Unterprogramm warten auf Taste
Portb.1 = 0 'Led Main gn >OFF
Portb.2 = 0 'Led Time ge >OFF
Portb.3 = 1 'Led Perm rt >ON
Portb.4 = 1 'Rel+Led ge >ON
Do 'Beginn der Schleife
Debounce Pinb.0 , 0 , Main 'Wenn Taste gedrueckt 'Main'
Loop
Elektronik-Labor Projekte AVR