Hallo zusammen!
Ich würde nochmals Hilfe benötigen. Ich würde meine Sensorschaltung
gerne mit einem Taster aus- bzw. ein schalten. Ich verwende den ATtiny
24. Der Taster geht von PB3 auf Ground. Möchte also den internen Pull Up
Widerstand nutzen.
Wenn das Gerät ausgeschaltet ist, muss ja weiterhin eine Schleife
ablaufen die den Taster abfragt. Der Controller wird sich in dieser Zeit
ja wahrscheinlich im Idle Mode befinden. Wie kann ich sowas generieren.
Eine while-Schleife und eine Abfrage des Pins nach 0 ist wohl
einleuchtend. Wenn ich den Taster alle 100 ms oder so abfrage, sollte
die Entprellung ja zusätzlich gegeben sein oder? Ist ein Interrupt
nötig??
Könnte mir hierbei jemand mit einem Code Beispiel helfen?
Die zweite Frage. Wie generiert man Hard- und Softwaremäßig am
einfachsten einen "Batteriewächter". Die ganze Schaltung läuft mit einer
3 V Batterie. Bei sagen wir mal 2,5 V soll ein Warnlämpchen blinken. Mit
ADC und Spannungsteiler kann man das ja schwer machen, weil die
Referenzspg. = VCC mitabsinkt. Wie macht man das am geschicktesten??
Danke im voraus!
Gruß
Thomas
wenn du nicht grad einen V-Typ hast blinkt bei 2,5V nix mehr. Ansonsten
wirst du mit etwas Mühe genug Antworten hier im forum finden wenn du nur
danach suchst.
bye
Frank
1.Ein guter Betreff hilft manchmal weiter...
2.An einer toten Batterie brennt auch keine LED.
3.Wenn man keine Spannung messen will, kann man sie auch vergleichen.
Bastler schrieb:
> Ich würde nochmals Hilfe benötigen. Ich würde meine Sensorschaltung> gerne mit einem Taster aus- bzw. ein schalten. Ich verwende den ATtiny> 24. Der Taster geht von PB3 auf Ground. Möchte also den internen Pull Up> Widerstand nutzen.> Wenn das Gerät ausgeschaltet ist, muss ja weiterhin eine Schleife> ablaufen die den Taster abfragt.
Dann darf das Gerät nicht komplett ausgeschaltet sein. Mindestens der
ATtiny muss noch laufen.
> Der Controller wird sich in dieser Zeit> ja wahrscheinlich im Idle Mode befinden. Wie kann ich sowas generieren.
Da gibt es mehrere Verfahren. Wenn der µC aus einer Batterie oder einem
Akku versorgt wird, ist Stromsparen besonders wichtig. Dann wird
üblicherweise ein Sleep Mode eingesetzt.
> Eine while-Schleife und eine Abfrage des Pins nach 0 ist wohl> einleuchtend. Wenn ich den Taster alle 100 ms oder so abfrage, sollte> die Entprellung ja zusätzlich gegeben sein oder? Ist ein Interrupt> nötig??> Könnte mir hierbei jemand mit einem Code Beispiel helfen?
Gerade dieses Pollen wird aus Stromspargründen vermieden. Mit einem
Interrupt kann der schlafende (d.h. stromsparende) µC aufgeweckt werden.
> Die zweite Frage. Wie generiert man Hard- und Softwaremäßig am> einfachsten einen "Batteriewächter". Die ganze Schaltung läuft mit einer> 3 V Batterie. Bei sagen wir mal 2,5 V soll ein Warnlämpchen blinken. Mit> ADC und Spannungsteiler kann man das ja schwer machen, weil die> Referenzspg. = VCC mitabsinkt. Wie macht man das am geschicktesten??
Du könntest eine klassische Blinkschaltung konstruieren, die einen
Disable-Eingang oder Reset-Eingang hat, der von dem µC bedient wird.
Wenn der µC nicht mehr läuft, weil eine Unterspannung einen Brownout
ausgelöst hat, blinkt die externe Schaltung.
Dass der ATtiny 24V laufen muss ist mir völlig klar. Sleep Mode ist auch
relativ klar, wobei ich da auf den ersten Blick im Datenblatt wenig dazu
sehe. Dass ich die ganze Sache dann mit einem Interrupt wieder
zurückhole kann ich mir auch gut vorstellen. Nur geht das mit einem
Taster? Kann ich ihn mit diesem Impuls auf 0 in den Sleep Modus
versetzen? Reicht der 0-Impuls aus um einen Interrupt auszulösen damit
er wieder anläuft? Im Sleep Modus ist ja nur noch mein interner Takt
(1MHz) am laufen. Habe keinen externen Quarz. Das Schalterentprellen
muss dann wohl auch anders als mit der while Schleife funktionieren,
weil die ja ständig Strom verbraucht.
Zu der Anregung mit der Batterieüberwachung. Ich möchte nicht gewarnt
werden, wenn schon nichts mehr geht. Da ich den Tiny 24V gewählt habe,
der normal bis 1,8 V funktioniert, hätte ich hald gerne ab 2,3 V oder so
ein Warnlämpchen. Wenn das blinkt, muss mit einem Ausfall oder
Fehlermeldungen gerechnet werden. Ich weiss auch die Sache mit dem
Komperator. Also mit einem Vergleich. Nur dann bräuchte ich ja wohl
wieder eine Z-Diode die mir eine feste Spg. liefert damit ich überhaupt
vergleichen kann.
Gruß
Th.
Bastler schrieb:
> Sleep Mode ist auch> relativ klar, wobei ich da auf den ersten Blick im Datenblatt wenig dazu> sehe.
Das ganze Kapitel 7 im Datenblatt ist dem Thema gewidmet.
> Dass ich die ganze Sache dann mit einem Interrupt wieder> zurückhole kann ich mir auch gut vorstellen. Nur geht das mit einem> Taster?
Geht, wenn du den Taster an INT0 betreibst (Tabelle 7-1, Spalte Wake-up
Source)
> Kann ich ihn mit diesem Impuls auf 0 in den Sleep Modus> versetzen?
Könnte man, in der Regel programmiert man das aber anders. Im Leerlauf
(Idle) kann man den I/O-Pin an INT0 pollen und bei Bedarf den µC
schlafen schicken. Zuvor den "Wecker" fürs Aufwachen stellen, d.h. INT0
scharf machen. Der nächste Tasterdruck weckt den µC und man schaltet den
Wecker wieder am.
Ich habe sowas mit dem Suppentimer gemacht
http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#Suppentimer> Reicht der 0-Impuls aus um einen Interrupt auszulösen damit> er wieder anläuft?
Es gibt Bedingungen für die Mindestdauer des Tastendrucks. Steht im
Datenblatt im Abschnitt 9.2 zu den Externen Interrupts.
> Im Sleep Modus ist ja nur noch mein interner Takt> (1MHz) am laufen. Habe keinen externen Quarz. Das Schalterentprellen> muss dann wohl auch anders als mit der while Schleife funktionieren,> weil die ja ständig Strom verbraucht.
Das Entprellen kannst du per Software machen z.B. wenn du ein
Schlafenlegen nach dem Aufwecken nur nach einer Mindestzeit zulässt.
Für die Entprellung im Wachmodus gibt es verschiedene Methoden.
Ansehen würde ich mir die Interruptmethode mit einem Timerinterrupt
statt des Wartescheifenverfahrens mit while.
> Zu der Anregung mit der Batterieüberwachung. Ich möchte nicht gewarnt> werden, wenn schon nichts mehr geht. Da ich den Tiny 24V gewählt habe,> der normal bis 1,8 V funktioniert, hätte ich hald gerne ab 2,3 V oder so> ein Warnlämpchen. Wenn das blinkt, muss mit einem Ausfall oder> Fehlermeldungen gerechnet werden. Ich weiss auch die Sache mit dem> Komperator. Also mit einem Vergleich. Nur dann bräuchte ich ja wohl> wieder eine Z-Diode die mir eine feste Spg. liefert damit ich überhaupt> vergleichen kann.
Genau, entweder diskret selber aufbauen oder einen integrierten
Resetcontroller mit der Wunschspannung (=> programmierbare
Schaltschwelle) benutzen.
Ok. Das sind alles sehr nützliche Hilfen für mich. Also für mich würde
sich dann in meinen Augen der Idle Mode oder Standby Mode anbieten.
Also das mit Taster drücken funktioniert dann wohl auch. Aber das
Programm Suppentimer hört sich sehr kompliziert und ist ja auch
Ewigkeiten groß befürchte ich.
Soweit ich das Einschätzen kann müßte es relativ leicht gehen. Nur die
Register dementsprechend belegen und wohl eine ISR Routine schreiben. In
die kann ich dann gleichzeitig auch das mit dem Entprellen nehmen wenn
es eine Timerinterruptroutine ist.
Das mit dem integrierten Resetcontroller verstehe ich noch nicht bei der
Batterieüberwachung.
Bastler schrieb:
> Ok. Das sind alles sehr nützliche Hilfen für mich. Also für mich würde> sich dann in meinen Augen der Idle Mode oder Standby Mode anbieten.> Also das mit Taster drücken funktioniert dann wohl auch.> Aber das> Programm Suppentimer hört sich sehr kompliziert und ist ja auch> Ewigkeiten groß befürchte ich.
Bestimmt weil eine vierstellige 7-Segmentanzeige dabei angesteuert wird.
Das Grundverfahren, Schlafen vorbereiten, Wecker stellen, Schlafen,
Aufwachen Wecker abstellen ist rel. einfach. Der Suppentimer-Code kann
auch auf drei Arten übersetzt werden (s. DEFINEs im Source) - ohne
Schlafen/Wecken, mit simuliertem Schlafen/Wecken und mit tatsächlichem
Schlafen/Wecken.
> Soweit ich das Einschätzen kann müßte es relativ leicht gehen. Nur die> Register dementsprechend belegen und wohl eine ISR Routine schreiben.
Zwei ISRs: Eine für die Behandlung des externen Interrupts von INT0 beim
Aufwecken. Und eine für den Timerinterrupt für alle Zeitaufgaben.
> In> die kann ich dann gleichzeitig auch das mit dem Entprellen nehmen wenn> es eine Timerinterruptroutine ist.
Korrektemente.
> Das mit dem integrierten Resetcontroller verstehe ich noch nicht bei der> Batterieüberwachung.
Das ist ein IC, das eingangsseitig eine zu überwachende Spannung bekommt
und ausgangsseitig ein Logiksignal aus gibt, ob die Schaltschwelle von
der Spannung über- oder unterschritten wird.
Wenn man das Logiksignal an einen RESET-Eingang eines µC hängt, kann man
den kontrolliert rauf- und runterfahren lassen. Das ist der übliche
Einsatzzweck eines solchen ICs, daher der Name Reset Controller.
Aber wenn man das Logiksignal an einen beliebigen I/O-Eingang eines µC
hängt, kann man auf den Zustand der Versorgungsspannung im Programm
reagieren.
Da ich für meine Sensorschaltung eine while(1) Schleife benutze, müßte
die ISR-Routine wohl innerhalb dieser Schleife sein vermute ich.
Ansonsten ist ein Austreten aus dieser Schleife ja ausgeschlossen. Das
kann ich ja wiederum auch mit dem Interrupt für externe Ereignisse
handeln.
Ich versuch gerade aus dem Suppentopf-Timer den für mich interessanten
Code rauszuziehen. Das dürften ja nicht mal 10 -15 Zeilen sein für meine
einfache Anwendung.
Ein weiteres IC ist für meine Aufgabe nur ganz schwer zu vermitteln. Das
zu begründen würde aber jetzt sehr lange dauern. Gibt es irgendeine
Möglichkeit das mit wenigen Bauteilen so zu realisieren?
Bastler schrieb:
> Da ich für meine Sensorschaltung eine while(1) Schleife benutze, müßte> die ISR-Routine wohl innerhalb dieser Schleife sein vermute ich.> Ansonsten ist ein Austreten aus dieser Schleife ja ausgeschlossen.
Gerade nicht. Das ist ja der Clou einer ISR: Es ist eine eigenständige
Funktion in einem Programm, die im Falle eines Interrupts das
Userprogramm ("die while(1) Schleife") unterbricht, abgearbeitet wird
und danach das Userprogramm an der unterbrochenen Stelle weiterführt.
In Ordnung. Dann werde ich jetzt mal versuchen diese ISR zu schreiben
und hoffe dass des so klappt wie ichs mir vorstelle.
Könnte man das mit der Batterieüberwachung auch irgendwie mit Brown out
machen??