Hallo, ich brauche Hilfe bei der Realisierung folgender Schaltung. Ich habe einen ATiny den ich in den Sleep Modus versetzen will. Er soll möglichst wenig Strom verbrauchen, da er an einer C2032 Knopfzelle betrieben werden soll. U.a. habe ich zwei Tasten am ATiny. Wenn eine der beiden Tasten gedrückt wird dann soll der ATiny aufwachen, erkennen welche Taste gedrückt wurde und dementspechend eine Funktion ausführen. Fragen: 1. Mit welcher Beschaltung kann ich zwei Taster an den 'WakeUp' Interrupt Pin und gleichzeitig an zwei Portpins hängen (zum auswerten welche gedrückt wurde) 2. Wie kann ich erkennen welche der Tasten gedrückt wurde? Ganz normal durch Einlesen an den Portpins? Geht das in der Interruptroutine oder dauert das Aufwachen evtl. zu lange so dass in der Interruptroutine nicht mehr erkannt werden kann welche Taste gedrückt wurde? 3. Kann ich im WakeUp-Interrupt auch gleich die Tasten entprellen? Brauche da ein wenig Starthilfe, danke an Euch!
Hallo, Zu deinen Fragen: 1) Das was und wie steht in Dein Datenblatt deines AVR µC. Dort steht in einer Tabelle welcher Interrupt welchen Mode wieder "aufwachen" lässt. Ok ? Das wissen wir leider nicht. 2) Nach dem Aufwachen und sperren der Tasterinterrupts, wird in der Main wieder die INT. Entprellroutine mit ca. 10ms Zykluszeit gestartet. Tritt ein Event Taste A oder B gedrückt auf, wird die entsprechende Funktion Event_A() oder Event_B() aufgerufen. 3) nein.
Schlagworte die du suchst sind u.a. powerdown mode und pin change interrupt. Was du vor hast ist mithilfe des GCC-AVR tutorials ( interrupt und sleepmodes) und des datenblattes in 10-15 Zeilen code zu bewerkstelligen
:
Bearbeitet durch User
Zuerst verräts du, um welchen Tiny es sich handelt. Dann bringst du deine Schaltung ohne Sleep zum Laufen. Also das übliche Zeugs mit Taster entprellen und je nach Tastendruck Funktionen ausführen. Erst wenn alles läuft, wird der Sleep eingebaut. Das Aufwecken geschieht dann mit Pinchange-Interrupt. Dann ist der Ablauf wie von Uwe beschrieben. mfg.
m.n. schrieb: > Oder so, auf zwei Tasten erweitert. > Beitrag "EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." Dieser Vollpfostenscheiss hat auch gerade noch gefehlt. mfg.
Thomas Eckmann schrieb: > Dieser Vollpfostenscheiss hat auch gerade noch gefehlt. Ein in der Tat sehr sachliches Argument :-)
Hallo, danke schonmal für die Antworten. Also ich denke es wird ein ATtiny85 werden. In dem Beitrag EIN-AUS... wird ja ellenlang diskutiert ob mit RC oder ohne usw. wie mache ich es denn nun richtig? Wie schließe ich denn die Taster an den ATtiny85 Ports und an den Pin Change Interrupt Pin (ich nehme an PB0?) an? Schließlich müssen die Taster ja den Pin Change Interrupt auslösen und gleichzeitig einen Eingangs-Pin auf Low ziehen. Gibt es eine schnelle Entprell-Routine? Ich brauche keine Taster-Lang/Taster-Kurz Auswertung sondern möchte nur einfaches Tasten also Kurzdrücken erkennen. Danke nochmals!
Mr.Burns schrieb: > Hallo, > > danke schonmal für die Antworten. Also ich denke es wird ein ATtiny85 > werden. > > In dem Beitrag EIN-AUS... wird ja ellenlang diskutiert ob mit RC oder > ohne usw. wie mache ich es denn nun richtig? In Software. RC ist Murks. Siehe auch: Lothar Miller schrieb: >> Um ein "bouncing" der Buttons zu verhindern, habe ich parallel zum >> Taster einen 0.01uF Kondensator geschaltet. > Das ist nur eine lange Schreibweise für "Murks". > Wenn man einen uC hat, macht man die Entprellung in der Software. > Wie schließe ich denn die Taster an den ATtiny85 Ports und an den Pin > Change Interrupt Pin (ich nehme an PB0?) an? Schließlich müssen die > Taster ja den Pin Change Interrupt auslösen und gleichzeitig einen > Eingangs-Pin auf Low ziehen. Es gibt nicht DEN Pinchange-Pin. Alle Pins können einen Pinchange-Interrupt auslösen. Die Pins, die den Interrupt auslösen sollen, werden in einer Maske eingestellt. Wird ein Taster betätigt, wird ein Interrupt ausgelöst. In der ISR, eine für den ganzen Port, schaltest du die Pinchange Interrupts ab, damit das eventuelle Prellfeuerwerk keine weiteren auslöst, landest im Hauptprogramm in der ersten Anweisung nach Sleep und das Programm arbeitet ganz normal weiter und fragt im Polling die Tasten ab. Du mußt nur dafür sorgen, daß der Controller nicht in den Sleep geht, bevor alles abgearbeitet ist. Der Sleep wird ganz zuletzt eingebaut, wenn alles läuft. Die Bezeichnungen im Datenblatt verwirren ein bisschen. Die "ISR(PCINT0_vect)" wird bei allen Pinchange-Interrupts an diesem Port aufgerufen. Bei größeren Controllern gehört PCINT0-vect zu PORTA, PCINT1_vect zu PORTB usw., unabhängig davon, daß die Pins an PORTA auch mit PCINT0, PCINT1 usw. bezeichnet werden. Das hätte man sicherlich besser machen können. > Gibt es eine schnelle Entprell-Routine? Ich brauche keine > Taster-Lang/Taster-Kurz Auswertung sondern möchte nur einfaches Tasten > also Kurzdrücken erkennen. Nimm die Peda-Routine. Die ist hier State-of-the-Art. mfg.
:
Bearbeitet durch User
Mr.Burns schrieb: > 1. Mit welcher Beschaltung kann ich zwei Taster an den 'WakeUp' > Interrupt Pin und gleichzeitig an zwei Portpins hängen (zum auswerten > welche gedrückt wurde) Einfach einen ATtiny nehmen, der durch alle Pins geweckt werden kann, dann stellt sich das Problem erst garnicht. Falls das nicht möglich ist: "wired" OR/AND. Also im Wesentlichen zwei Dioden. > 2. Wie kann ich erkennen welche der Tasten gedrückt wurde? Ganz normal > durch Einlesen an den Portpins? > Geht das in der Interruptroutine oder > dauert das Aufwachen evtl. zu lange so dass in der Interruptroutine > nicht mehr erkannt werden kann welche Taste gedrückt wurde? Das wäre denkbar. Ebenfalls denkbar ist, daß die ISR gerade dann zum Zuge kommt, wenn der Kontakt gerade "weggeprellt" ist. Beides umgehst du, wenn du, wie oben vorgeschlagen, einen PCINT-fähigen Tiny verwendest. Für einen der beiden Taster einen PCINT-Pin, für den anderen INTx. Schon löst sich das Problem in Wohlgefallen auf. Wird die PCINT-ISR beim Aufwachen durchlaufen, war's der Taster, der am PCINT-Pin angeschlossen ist, wird die INTx-ISR durchlaufen, war's der andere. Du brauchst also garkeinen Pin mehr nach dem Aufwachen abfragen. > 3. Kann ich im WakeUp-Interrupt auch gleich die Tasten entprellen? Und das entfällt dann ebenfalls, weil du die Weckquelle beim Aufwachen bereits kennst.
Mr.Burns schrieb: > In dem Beitrag EIN-AUS... wird ja ellenlang diskutiert ob mit RC oder > ohne usw. wie mache ich es denn nun richtig? Diese Diskussionen ergeben sich immer wieder, da einige Leute nur ein Verfahren kennen und zwanghaft auf dessen Anwendung bestehen. Die agressiven Reaktionen sprechen für sich. > Wie schließe ich denn die Taster an den ATtiny85 Ports und an den Pin > Change Interrupt Pin (ich nehme an PB0?) an? Schließlich müssen die > Taster ja den Pin Change Interrupt auslösen und gleichzeitig einen > Eingangs-Pin auf Low ziehen. So, wie in der Schaltung an PB4 gezeigt. Sofern Du mit einer 3V Knopfzelle arbeitest, kann R1 entfallen und C1 direkt an PBx gelegt werden. Der Zustand des Pins wird im Programm erfaßt und ist beim Einschalten immer '0'. > Gibt es eine schnelle Entprell-Routine? Ich brauche keine > Taster-Lang/Taster-Kurz Auswertung sondern möchte nur einfaches Tasten > also Kurzdrücken erkennen. Eine schnelle Entprellroutine ist durch R2/C1 und den ATtiny schon gegeben. Die angehängten Bilder zeigen doch, dass in ca. 2,5ms der µC entprellt eingeschaltet ist. Wenn Dein Programm nur kurz auf die Tastendrücke reagieren muß, kann der µC nach 5ms schon wieder im Tiefschlaf liegen, was der Batterielebensdauer sehr zugute kommt. Mit regulären Entprellroutinen muß erst einmal ca. 50ms entprellt werden, bevor der µC das Einschalten als gültig erkannt hat. Das 2.Schaltbild zeigt, wie man einen Eingang recht hochohmig ansteuern kann. Bei Batteriebetrieb kann daher auch ein blockierender Schalter die Batterie nicht zu schnell entladen. Du mußt entscheiden, was Du brauchst! Was soll es denn werden?
m.n. schrieb: > Mit > regulären Entprellroutinen muß erst einmal ca. 50ms entprellt werden Das ist Quatsch. Du kannst den Entprelltimer auf jede beliebige Zeit programmieren. 20..100ms haben sich allerdings als Optimum bewährt, zwischen Tasterqualität und sicherer Erkennung. Ein Mensch drückt typisch länger 300ms, also ist noch reichlich Luft. Man muß auch bedenken, das Taster mit zunehmendem Alter durch Ermüdung, Verschmutzung deutlich stärker prellen, als fabrikneue. Und Du wirst ja nicht ständig auf den Tasten rumhämmern, daß 50ms einen nennenswerten Stromverbrauch bewirken. Und falls doch, nimmste eben den Watchdogtimer zum Entprellen, da ist dann zwischen den Timerinterrupts Tiefschlaf mit etwa 30µA.
:
Bearbeitet durch User
Peter Dannegger schrieb: > m.n. schrieb: >> Mit >> regulären Entprellroutinen muß erst einmal ca. 50ms entprellt werden > > Das ist Quatsch. Du kannst den Entprelltimer auf jede beliebige Zeit > programmieren. > 20..100ms haben sich allerdings als Optimum bewährt, Mit Deinen 20-100ms liegst Du im Mittelwert bei 60ms. Meine 50ms sind Quatsch und Deine 60ms sind die Erlösung? Lächerlich! > Und falls doch, nimmste eben den Watchdogtimer zum Entprellen, da ist > dann zwischen den Timerinterrupts Tiefschlaf mit etwa 30µA. Warum soll man denn zusätzliche Programmkonstrukte einbauen, wenn ein RC-Glied von Hause aus schon beste Tiefpass-Eigenschaften aufweist? @Mr.Burns Sag am besten, wofür Du die Schaltung brauchst, dann kann man konkret entscheiden, was angebracht ist.
m.n. schrieb: > Warum soll man denn zusätzliche Programmkonstrukte einbauen, wenn ein > RC-Glied von Hause aus schon beste Tiefpass-Eigenschaften aufweist? Warum sollte man sich mit unnötiger Zusatzhardware rumschlagen, wenns in Software sowohl einfacher als auch besser geht?
chris schrieb: > Warum sollte man sich mit unnötiger Zusatzhardware rumschlagen, wenns in > Software sowohl einfacher als auch besser geht? Verstehe ich nicht, was Du meinst.
Wenn der Tiny nur auf den Tastendruck wartet, warum schaltest Du ihn nicht komplett aus und durch die Tasten ein, dann hast du Null Stromverbrauch.
Zum einfachen Nachbau ein fertiges Programm mit Aufweckfunktion, Entprellung und Dekodierung für zwei Taster. Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
Hallo, oh mann ich wusste nicht, dass ich durch meine Frage hier fast einen Streit auslöse. Das war nicht meine Absicht. Nunja ich bin nun eher verwirrt, der eine sagt RC ist murks weil Zusatzhardware der andere sagt das ist super mit RC weil Manns dann nicht in software machen muss. Also ich weiß echt nicht wie ich nun es machen soll. Was ich machen möchte? Also ich möchte mit einem ATtiny85 zwei batteriebetriebene Geräte gleichzeitig über den ATtiny bedienen. Welche Geräte das sind ist hier zweitrangig. Ich möchte also durch einen Tastendruck am ATTiny an den beiden batteriebetriebenen Geräten eine Aktion auslösen, dies mache ich über Ausgagnsgpins des ATtiny und stellt in der Entwicklung / Programmierung kein Problem für mich dar, ich mache es über Optokoppler. Mein Problem ist halt, dass ich möglichst wenig Strom verbrauchen möchte, damit die Batterie lange hält. Der ATtiny soll also möglichst immer schlafen. Nur wenn ich eine Taste drücke, soll er kurz aufwachen, eine Aktion ausführen und wieder einschlafen. Die Geschichte mit den zwei Tastern dient für mich in erster Linie erstmal zum erlernen der WakeUp Funktion und der Programmierung der ATtinys. In meiner finalen Schaltung habe ich dann aber ca. 10-12 Taster, da die batteriebetriebenen Geräte auch 10-12 Taster haben, die ich nun über den ATtiny antriggern möchte. Für mich wäre es kein Problem ein zus. R/C Glied mit in die Schaltung einzubauen, wenn damit eine sicheres Aufwachen und Entprellung gewährleistet ist. Ist mir lieber, da ich die Interupts des ATtiny dann nicht mit Entprellen 'belasten' müsste. Bin einwenig verwirrt...
Die SW-Entprellung ist zuverlässig und einfach anzuwenden. Den meisten Strom werden die Optokoppler verbrauchen. Die µA des ATtiny13 kannst Du vernachlässigen.
Mr.Burns schrieb: > der andere sagt das ist super mit RC weil Manns dann > nicht in software machen muss. Es ist eine Kombination von Hard- und Software. Das RC-Glied sorgt entsprechend seiner Zeitkonstante für eine Vorfilterung, und die Software bringt die µC-interne Eingangshysterese auf immer VCC/2. Mr.Burns schrieb: > Bin einwenig verwirrt... Hier ist es üblich, dass x-beliebige Leute nur substanzloses Geschreie ablassen. Ließ Dir die Beiträge noch einmal in Ruhe durch und beurteile das, was an Sachargumenten geliefert würde. Wenn oben über 'unnütze Zusatzhardware' lamentiert wird, bleibt eine Rückfrage unbeantwortet. Diese Leute darf man einfach nicht ernst nehmen. Laß Dich nicht durch heiße Luft infizieren. Mr.Burns schrieb: > Fragen: > > 1. Mit welcher Beschaltung kann ich zwei Taster an den 'WakeUp' > Interrupt Pin und gleichzeitig an zwei Portpins hängen (zum auswerten > welche gedrückt wurde) > > 2. Wie kann ich erkennen welche der Tasten gedrückt wurde? Ganz normal > durch Einlesen an den Portpins? Geht das in der Interruptroutine oder > dauert das Aufwachen evtl. zu lange so dass in der Interruptroutine > nicht mehr erkannt werden kann welche Taste gedrückt wurde? > > 3. Kann ich im WakeUp-Interrupt auch gleich die Tasten entprellen? Mit Schaltung und Programm, die ich gestern in diesem Forum ergänzt habe, werden alle Deine Anforderungen voll erfüllt. Anstatt zwei Ausgangspins zu togglen, kannst Du einfach andere Aktionen durchführen. Mache es einfach!
Hallo m.n., danke werde Deine Schaltung mal testen!
Mr.Burns schrieb: > Hallo m.n., > > danke werde Deine Schaltung mal testen! Das freut mich! Schaltung + Programm hatte ich mit meinem Musteraufbau noch einmal durchgemessen. Für niedrige Ruhestromaufnahme muß der Brown-Out-Detector ausgeschaltet bleiben. Andernfalls fließen schon ca. 18µA @ 3,3V. Mit unbelasteten Ausgängen (ohne Meßspitzen vom Oszilloskope) liegt die Ruhestromaufnahme bei < 0,2µA. Bei einem gedrücktem Taster steigt diese auf < 4µA, was hauptsächlich durch den 1M Pullup-Widerstand hervorgerufen wird. Natürlich kann man auch die internen Pullup-Widerstände verwenden, die die Stromaufnahme bei gedrücktem Taster aber deutlich erhöhen. Diese Werte wurden bei Raumtemperatur bzw. Raumfeuchtigkeit gemessen und können unter anderen Bedingungen natürlich auch höher ausfallen. Als 'Hausnummer' taugen sie dennoch. Beim Drücken oder Loslassen eines Tasters ist der µC < 300µs @ 8MHz aktiv und geht danach wieder in den Tiefschlaf. Wenn Du letztlich insgesamt zwölf Taster verwenden möchtest, wäre es besser einen AVR zu nehmen, der hinreichend viele Eingangspins hat, zum Beispiel ein ATtiny2313/4313. Welche Art der Aufweckfunktion + Entprellung Du letztlich verwendest, hängt dann von Deinen genauen Anforderungen ab.
Mr.Burns schrieb: > Nunja ich bin nun eher verwirrt, der eine sagt RC ist murks weil > Zusatzhardware der andere sagt das ist super mit RC weil Manns dann > nicht in software machen muss. Was sind wir? Sind wir Programmierer oder nicht? Was soll das heißen, man 'muss' es in Software machen. Jeder ordentliche Programmierer hat kein Problem, den ganzen Vorgang in Software und nur in Software zu machen und sich so eine externe Beschaltung zu ersparen. Wie PeDa schon sagte: wenn du auf deinem Taster 24 Stunden lang im halbe Sekunde Takt rumhämmerst, dann können die 50ms zum Problem werden. Wenn dem nicht so ist, dann spielt zero,null,nada,niente,... Rolle, ob dein µC 50ms später auf deinen Tastendruck reagiert und in dieser Zeit etwas Strom verbraucht oder nicht. Den Menschen möchte ich erst mal sehen, der diese 50ms Verzögerung auf einen Tastendruck feststellen kann. Ausgenommen Chuck Norris selbstverständlich.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.