Ein aufgeweckter Prozessor

Ein-Ausschalten per Interrupt bei ATtiny__/ATmega__

zurück zur Übersicht

Ursprünglich befand sich hier die Schaltung nebst Assemblerprogramm für einen AT90S2313, der auf Tastendruck eine LED ein paar Mal blinken läßt und sich dann wieder in den 'power down'-Modus begibt. Gezeigt wird jetzt eine aktuellere Schaltung/Programm, die beispielhaft mit einem ATtiny25 ausgeführt ist.

Das 1. Schaltbild zeigt die einfachste Schaltung, bei der ein wiederholtes Betätigen von SW1 das EIN-AUS-Signal umgeschaltet wird. Die Schaltung ist auf geringste Stromaufnahme getrimmt und kann für batteriebetriebene Geräte verwendet werden, oder auch eine Stromversorgung mit Schaltregler ein-/ausschalten.

Im Ruhezustand wird PB4 über R2+R3 auf '1' Pegel (VCC) gehalten. Beim Betätigen des Tasters wird der Pegel an PB4 über das RC-Glied (R2 || C1) gefiltert gegen GND geschaltet. Sobald die neg. Schaltschwelle von PB4 zum Erkennen eines '0'-Pegels überschritten wird, wird der PinChange-Interrupt ausgelöst und der µC 'aufgeweckt'. Das Entladen von C1 wird nun in der PCINT-Routine aktiv von PB4 übernommen, bis er GND Potential erreicht hat. Dadurch wird sichergestellt, daß an PB4 ein definierter Pegel von 0V erreicht wird, selbst wenn der Taster nur kurz betätigt wurde.

Beim Öffnen des Tasters wird C1 über R2+R3 aufgeladen, bis die pos. Schaltschwelle von PB4 den betreffenden PCINT auslöst, die daraufhin PB4 als Ausgang konfiguriert und C1 auf VCC auflädt. Somit wird auch beim Öffnen von SW1 ein definierter Pegel VCC an PB4 erreicht. Zwischenwerte, die als mehrfaches Schalten interpretiert werden könnten, werden somit verhindert.
Passend zu dieser Schaltung ist das Programm 'toggle_25.c' und für unkompliziertes Testen die Datei 'toggle_25.hex'.

Die nächste Schaltung zeigt, wie man auch noch einen Leistungsschalter mit dem ATtiny25 ansteuern kann, und dennoch im ausgeschalteten Zustand im Power-Down mit weniger als 1µA Stromaufnahme auskommt. Im Gegensatz zur vorausgehenden Schaltung wird bei offenem SW1 der '1' Pegel an PB4 durch den internen pullup-Widerstand (30-50k) erreicht. Entsprechend kleiner müssen R2 (10k) gewählt und C1 vergrößert werden.

Das Programm 'on_off_25.c' beschreibt die Funktion näher. Mit einem zusätzlichen 5V-Regler für den ATtiny25 können auch höhere Spannungen geschaltet werden. Durch die Dimensionierung der Ladungspumpe (insbesondere die Auswahl von R5/C4) beträgt die Anstiegszeit der Ausgangsspannung rund 10ms. Damit werden auch größere, nachfolgende Cs (>1mF) geladen, ohne als Kurzschluß auf den Eingang rückzuwirken. Zum Ausprobieren die Datei 'on_off_25.hex'.

Das nachfolgende Bild verdeutlicht das Einschalten der vorherigen Schaltung mit R2=10k und C1=100nF und zeigt, daß der Einschaltvorgang nach 2-3ms abgeschlossen ist. Dabei zeigt die gelbe Kurve das Signal an C1 und die blaue Kurve das Ein-Aus Signal. Deutlich zu erkennen an der gelben Kurve ist das aktive Entladen von C1 (rund 0,3ms) und der anschließend leichte Anstieg der Spannung auf ca. 1V, der durch den internen pullup-Widerstand verursacht wird.

Das nächste Bild zeigt den Ausschaltvorgang bei erneutem Betätigen von SW1.


Weiterhin ein Bild, wie das Prellen eines (guten) Tasters mit vergoldeten Kontakten (digitast) aussieht und verarbeitet wird. Die blaue Kurve zeigt das Prellen des Signals an SW1 und die gelbe Kurve den Spannungsverlauf an C1.

Dann noch ein Bild zum Prellen eines für Kleinsignale eigentlich ungeeigneten Tasters für die Hausinstallation (Berker 230V/16A).

 

Fragen, Tipps, Kontakt:

zum Seitenanfang zurück zur Übersicht