Forum: Projekte & Code EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Wiederholt tauchen hier Fragen auf, wie man per Taster eine Schaltung 
Ein/Aus schalten kann. Wie muß der Taster entprellt werden, und nimmt 
man ein Flip-Flop, zwei NAND-Gatter, welche RC-Kombination oder
nicht doch besser einen µC?

Das Programm 'on_off_25.c' verwendet fürs Ein/Ausschalten einen 
Attiny25, der im ausgeschalteten Zustand im Power-Down mit weniger als 
1µA Stromaufnahme auskommt. In der einfachsten Variante schaltet er eine 
LED an oder aktiviert mit dem selben Signal einen Schaltregler.

Braucht man höhere Schaltströme oder –spannungen kann man einen externen 
N-Kanal MOSFET über ein PWM-Signal mit Ladungspumpe aktivieren. Damit 
ist es einfach möglich, auch 24V bei 5A zu schalten. Die Anstiegszeit 
bei 5V Ausgangsspannung beträgt rund 10ms. Damit werden auch größere, 
nachfolgende Cs (>1mF) geladen, ohne als Kurzschluß auf den Eingang 
rückzuwirken.

Eine weitere Diskussion, die immer wieder auftaucht: darf man einen 
Taster/Schalter per Interrupt-Routine auswerten? Die 'Hauptmeinung' 
dabei ist: das ist schwer verboten!
Hier wird es dennoch gemacht und zwar eine Kombination aus RC-Filterung 
und Interruptauslösung und ein wenig Software, die dafür sorgt, dass die 
Eingangshysterese des verwendeten µC-Eingangs auf nahezu Vcc erweitert 
wird.
Dies ist recht einfach und erlaubt ein schnelles, zuverlässiges 
Einschalten des µC in ca. 2-3ms.

Im Anhang ist der C-Quellcode (AVR-Studio 4.18), die .hex-Datei, ein 
Schaltbild sowie der Kurvenverlauf beim Ein- und Ausschalten des µC.
Blaue Kurve: PB3, gelbe Kurve: PB4

Mit ein paar Erweiterungen kann man auch größere µCs 
aktivieren/deaktivieren, auf denen die komplette Applikation läuft. 
Wichtig dabei ist, dass das gesetzte Flag 'abschalten' in allen 
Funktionen berücksichtigt wird und eine Rückkehr zu main() erfolgt.

von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Falls man nur die Ein-Aus-Funktion benötigt und mit niedrigem 
Versorgungsstrom arbeiten möchte, bietet sich die gezeigte 
Minimalschaltung nebst Programm 'toggle_25.c' an.

Bei jedem Tastendruck wird lediglich PB3 umgeschaltet. Solange der 
Taster aktiv ist, fließt abhängig von der Versorgungsspannung über R3 
(2M2) zusätzlich ein geringer (Leck-)Strom. Im Ruhezustand benötigt der 
schlafende µC < 1µA. Es ist sinnvoll, die nachfolgende Schaltung mit 
einem '0' Pegel des EIN-AUS-SIGNAL anzusteueren, damit vom Tiny25 kein 
Ausgangsstrom geliefert werden muß. (P-Kanal MOSFET zum Beispiel)

C1 ist mit 10nF angegeben. 1nF erhöht die Schaltgeschwindigkeit, sodass 
man damit ein 50Hz Sinussignal 'entprellen' kann. Deutlich sieht man, 
wie bei fallendem Eingangspegel (blaue Kurve) die Schaltschwelle von PB4 
unterschritten wird und C1 aktiv für rund 2,5ms entladen wird. 
Anschließend läd sich C1 wieder auf und wird beim Erreichen der oberen 
Schaltschwelle von PB4 aktiv auf VCC gezogen. Neben der Vergrößerung der 
Hysterese entstehen auch erwünschte Totzeiten, die die Störsicherheit 
erhöhen.

Das Spiel wiederholt sich periodisch und liefert zu dem 50Hz Signal ein 
2:1 geteiltes 25Hz Rechtecksignal. Bedingt durch die 2 x 2M2 Widerstände 
und den 10M Eingangswiderstand des Oszilloskopes liegt der Ruhepegel der 
blauen Kurve bei etwa 2/3 VCC.

von Peter D. (peda)


Lesenswert?

M. N. schrieb:
> Hier wird es dennoch gemacht und zwar eine Kombination aus RC-Filterung
> und Interruptauslösung und ein wenig Software, die dafür sorgt, dass die
> Eingangshysterese des verwendeten µC-Eingangs auf nahezu Vcc erweitert
> wird.

RC ist überflüssig.
Ich benutze den PCINT nur zum Aufwachen, dann kommt die übliche 
Entprellroutine. Und wenns nur ne Störung war, gehts eben nach 40ms 
wieder schlafen.


M. N. schrieb:
> Dies ist recht einfach und erlaubt ein schnelles, zuverlässiges
> Einschalten des µC in ca. 2-3ms.

Ja, das ist der "große" Nachteil meiner Schaltungen. Man drückt ne Taste 
und die LED leuchtet nicht nach 3ms sondern erst nach 40ms. Das muß 
wirklich tierisch nerven, in der Zeit kann man ja ne Zigarette rauchen.

Ist in den 3ms die Hochlaufzeit des Bootstrap schon mit drin?
Ich finde P-FETs jetzt nicht so teuer, daß sich Trickschaltungen lohnen.
Bei hohen Strömen muß man auch beachten, das der N-FET ne Weile linear 
arbeitet und Leistung umsetzt. Ebenso beim Ausschalten.


M. N. schrieb:
> Blaue Kurve: PB3, gelbe Kurve: PB4

Die Lastspannung bei 24V/5A wäre mal interessant gewesen.
Daß der MC ne LED fix schalten kann, ist klar.

von M. N. (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ich benutze den PCINT nur zum Aufwachen, dann kommt die übliche
> Entprellroutine.

Doppelter Aufwand, völlig unnötig, Technik von gestern.

> Und wenns nur ne Störung war, gehts eben nach 40ms
> wieder schlafen.

Das verkürzt die Lebendsdauer der Batterie.

> Ist in den 3ms die Hochlaufzeit des Bootstrap schon mit drin?

Das geht aus der Beschreibung hervor.

> Die Lastspannung bei 24V/5A wäre mal interessant gewesen.

Versuch macht kluch.

von Peter D. (peda)


Lesenswert?

M. N. schrieb:
> Doppelter Aufwand, völlig unnötig, Technik von gestern.

Es ist erheblich weniger Aufwand, eine zuverlässige und erprobte Lib 
einzubinden, als für jedes Projekt alles neu zu schreiben.

M. N. schrieb:
> Das verkürzt die Lebendsdauer der Batterie.

Wow, Du kannst also die Lebensdauer auf unter 1ppm genau messen.
Z.B. ATtiny13 mit 128kHz, idle = 25µA @5V.
40ms * 25µA = 0,000000000028Ah

M. N. schrieb:
> Versuch macht kluch.

Eine Versuchsschaltung kostet aber Zeit. Da nehme ich dann doch einfach 
nen P-FET.

von M. N. (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Es ist erheblich weniger Aufwand, eine zuverlässige und erprobte Lib
> einzubinden, als für jedes Projekt alles neu zu schreiben.

Wenn es sinnvoll ist, nehme ich auch meine zuverlässigen und erprobten 
LIBs. Die gezeigte Schaltung mit RC am Eingang ist ebenfalls zuverlässig 
und erprobt.

> Wow, Du kannst also die Lebensdauer auf unter 1ppm genau messen.
> Z.B. ATtiny13 mit 128kHz, idle = 25µA @5V.
> 40ms * 25µA = 0,000000000028Ah

Komische Rechnung: wenn die Schaltung nur einmal im ganzen Leben 
eingeschaltet werden soll, kann man den Taster doch ganz weglassen.
Was bei der Berechnung ganz unterschlagen wird, dass im gestörten Umfeld 
der µC permanent getriggert wird, ohne dass eine Tasterbetätigung 
vorliegt.

> Eine Versuchsschaltung kostet aber Zeit. Da nehme ich dann doch einfach
> nen P-FET.

Aus dem Grunde habe ich ganz oben eine Schaltung gezeigt, die sich auch 
zum Schalten höherer Spannungen/Ströme eignet.
Um die Rampe beim Einschalten kommt man auch bei einem P-MOSFET nicht 
umhin, wenn eine kapazitive Last zu schalten ist.

von Michi (Gast)


Lesenswert?

Schöner Beitrag.
1
  GIFR = BIT(PCIF);                // flag löschen
2
  GIMSK |= BIT(PCIF);            // PCINT PORTB zulassen
Müsste es für GIMSK nicht PCIE (auch Bit5) heißen?

von M. N. (Gast)


Lesenswert?

Michi schrieb:
> Müsste es für GIMSK nicht PCIE (auch Bit5) heißen?

Stimmt, danke!
Ursprünglich hatte ich überall 0x20 stehen, was ich hier nur 
unvollständig geändert hatte.

von Axel S. (a-za-z0-9)


Lesenswert?

M. N. schrieb:

> Die gezeigte Schaltung mit RC am Eingang ist ebenfalls zuverlässig
> und erprobt.

Die Zuverlässigkeit möchte ich doch arg bezweifeln. Taster brauchen 
nämlich auch einen Mindeststrom, wenn sie dauerhaft funktionieren 
sollen. Die Hochohmigkeit der Schaltung ist auch überhaupt nicht nötig. 
Der Strom durch den Schalter fließt ja nur für den kurzen Augenblick, in 
dem er gedrückt wird. Und dann sind die zwei (1x Einschalten, 1x 
Ausschalten) Augenblicke ja auch noch in Relation zu setzen zu 
Einschaltdauer und Stromverbrauch der geschalteten Last.

Wenn wir mal mit 50µA rechnen (typischer Pullup-Strom eines AVR) und mit 
einer Sekunde Betätigung, dann braucht der Taster 2s*50µA = 100µAs pro 
Einschaltvorgang. Wenn die Last nur 10mA zieht und 10 Sekunden 
angeschaltet bleibt, dann gehen 99.9% der Energie in die Last. 
Einsparpotential sehe ich da keins mehr.

> Was bei der Berechnung ganz unterschlagen wird, dass im gestörten Umfeld
> der µC permanent getriggert wird, ohne dass eine Tasterbetätigung
> vorliegt.

Ein weiterer Grund, den Taster nicht zu hochohmig zu beschalten. Es 
besteht IMHO keine Notwendigkeit mit Störungen zu rechnen, die kein 
Prellen sind.


XL

von M. N. (Gast)


Lesenswert?

Axel Schwenke schrieb:
> Die Zuverlässigkeit möchte ich doch arg bezweifeln. Taster brauchen
> nämlich auch einen Mindeststrom, wenn sie dauerhaft funktionieren
> sollen. Die Hochohmigkeit der Schaltung ist auch überhaupt nicht nötig.

Du würfelst die Eigenschaften beider Schaltungen durcheinander.
Bei der 1. Schaltung ging es mir darum, zu zeigen, dass man sehrwohl 
einen Taster per Interrupt verarbeiten kann. Dass dies für einige Leute 
ein Tabu darstellt, ist mir schon klar :-)

Die 2. Schaltung sollte besonders stromsparend arbeiten. Wenn Du Dir das 
Programm dazu ansehen würdest, könntest Du feststellen, dass es kurz, 
übersichtlich und einfach nachzuvollziehen ist. Was ist daran schlecht?

Stell Dir vor, der gezeichnete Taster ist ein Reedkontakt, der von einem 
Magneten kurzzeitig aktiviert wird. Der Controller soll dabei die Anzahl 
der Ereignisse zählen, ggf. zur Anzeige bringen und ansonsten gleich 
wieder im Schlaf versinken - batteriebetrieben. Weiterhin stell Dir vor, 
dass das Relais nicht direkt am µC angeordnet ist, sondern noch ein 
Zuleitungskabel existiert.
Da ist es dann sinnvoll, den Schaltvorgang störsicher, stromsparend und 
kurz zu gestalten.

Wie und ob das jemand für sich auch so machen will?
Das kann doch jeder selbst entscheiden.

von Axel S. (a-za-z0-9)


Lesenswert?

M. N. schrieb:
> Axel Schwenke schrieb:
>> Die Zuverlässigkeit möchte ich doch arg bezweifeln. Taster brauchen
>> nämlich auch einen Mindeststrom, wenn sie dauerhaft funktionieren
>> sollen. Die Hochohmigkeit der Schaltung ist auch überhaupt nicht nötig.
>
> Du würfelst die Eigenschaften beider Schaltungen durcheinander.

Keineswegs. Ich beziehe mich ausschließlich auf die zweite Schaltung.

> Bei der 1. Schaltung ging es mir darum, zu zeigen, dass man sehrwohl
> einen Taster per Interrupt verarbeiten kann. Dass dies für einige Leute
> ein Tabu darstellt, ist mir schon klar :-)

Eine (bewußte?) Fehlinterpretation deinerseits. Es ist mitnichten ein 
Tabu, den Interrupt z.B. zum Aufwecken des µC zu verwenden. Es geht 
darum, die Entprellung in Software zu machen. Und da ist 
(timergestütztes) Polling nun mal das Mittel der Wahl.

> Die 2. Schaltung sollte besonders stromsparend arbeiten. Wenn Du Dir das
> Programm dazu ansehen würdest, könntest Du feststellen, dass es kurz,
> übersichtlich und einfach nachzuvollziehen ist. Was ist daran schlecht?

Deine Behauptung, das wäre einfach und unaufwendig. Das Gegenteil ist 
der Fall. Wenn man mal unterstellt, der Widerstand am Reset-Pin wäre 
notwendig (ist er nicht), dann brauchst du 6 Bauelemente, wo 3 reichen 
würden. Also doppelte Anzahl Bauelemente. Wenn man den externen Pullup 
an Reset auch noch wegläßt, gar 6:2, also dreifachen Aufwand. Und das 
alles nur, um ein paar Bytes im Flash einzusparen, an denen ziemlich 
sicher überhaupt keine Knappheit herrscht.

> Stell Dir vor, der gezeichnete Taster ist ein Reedkontakt, der von einem
> Magneten kurzzeitig aktiviert wird. Der Controller soll dabei die Anzahl
> der Ereignisse zählen, ggf. zur Anzeige bringen und ansonsten gleich
> wieder im Schlaf versinken

Dann stelle ich zuerst mal fest, daß diese Aufgabenstellung genau gar 
nichts mit dem Titel dieses Threads zu tun hat. Wenn du schon ein 
Strohmann-Argument bringen willst, dann mußt du dich schon etwas 
geschickter anstellen. Keine Punkte für dich, tut mir leid[1].


XL

[1] tut mir natürlich kein bisschen leid. So weit kommts noch!

von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Anbei ein Programm zur eingangs gezeigten Schaltung, bei der an PB0 
PWM-Signale aus einer Tabelle ausgegeben werden. Jeder neue Tastendruck 
nimmt den nächsten Wert aus der Tabelle.
Am Ende der Tabelle legt sich der µC wieder schlafen, um mit einem 
erneuten Tastendruck die Tabelle wieder von Vorne auszugeben.

Die gezeigte Ladungspumpe entfällt und wird durch einen passenden MOSFET 
zur Ansteuerung von Lampen/Motoren oder sonstigen Schaltungen ersetzt.

von obscurity (Gast)


Lesenswert?

M. N. schrieb:
> Du würfelst die Eigenschaften beider Schaltungen durcheinander.
> Bei der 1. Schaltung ging es mir darum, zu zeigen, dass man sehrwohl
> einen Taster per Interrupt verarbeiten kann. Dass dies für einige Leute
> ein Tabu darstellt, ist mir schon klar :-)

Ich glaube du solltest die Beiträge die die These aufstellen, dass für 
normale Tasterabfragen keine GPIO-Interrupts verwendet werden sollen mal 
genauer lesen.

Das Aufwachen aus dem Tiefschlaf ist eigentlich die einzige sinnvolle 
Anwendung von GPIO-Interrupts auf normale mechanische Taster. Auch bei 
einer Fernbedienung sorgt ein Tastendruck auf eine beliebige Taste für 
einen Interrupt auf einer einzigen Leitung oder an den Sammelleitungen 
in einer Tastenmatrix. Alles weiter macht dann die Software.

Wie oben schon angedeutet sollten mechanische Tasten nicht zu hochohmig 
beschaltet werden. Normalerweise haben Taster auch einen minimalen Strom 
in den Datenblättern stehen. Wenn die Taster relativ niederohmig 
angebunden sind, kann man das Entprellen wirklich sehr gut im Code 
machen da normale Störungen über die Luft ja erst mal eine gewisse 
Energie haben müssen. Je niederohmiger desto mehr. Bei langen Leitungen 
ist ein C am Eingang aber auch nicht verkehrt. Also wie immer. Es gibt 
nicht nur die eine Wahrheit.

von m.n. (Gast)


Lesenswert?

obscurity schrieb:
> Es gibt nicht nur die eine Wahrheit.

Da stimme ich Dir voll zu, obwohl Dein Text das Gegenteil andeutet, 
nämlich die EINE Wahrheit zu bekräftigen.
Es ist ja nicht so, dass ich alles per Interrupt erledige, sondern eine 
Auswahl treffe, die für die jeweilige Anwendung sinnvoll erscheint.

Wie man mehrere Tasten per Software entprellt ist mir ja nichts Neues 
und hatte es hier schon gezeigt: 
Beitrag "Entprellung von Tastern"
Der Beitrag ist vom 29.12.2002. Zeig mir einen Beitrag zu dem Thema, der 
älter ist.
Im Nachhinein tauchten dann Platzhirsche auf, die alles niederschreien 
und davon so taub sind, dass sie für andere Lösungsansätze kein Gehör 
mehr haben bzw. diese zulassen.
Tastenentprellung mache ich nunmehr seit 40 Jahren und hatte 
verschiedenste Ansätze und Lösungen verwendet. Da lass ich mir von 
niemanden mehr sagen, nur so und nicht anders.

Es gibt ja noch mehr Themen, wo alles niedergeschrien wird, was von der 
einzigen Wahrheit abweicht. Zum Beispiel ist die Auswertung von 
Drehgebern per Interrupt ein Tabu. Oder die Verwendung von 
'float'-Variablen ist Teufelswerk. Einzig Festkommaberechnungen sind 
zulässig, wenn es nicht mehr mit 'int'-Variablen geht.
Immer wieder tauchen die selben Schreihälse auf, mit den gleichen 
Vorurteilen, die sie sich vor langer Zeit angeeignet haben.
So ist das eben mit den Religionen.

von cybmorg (Gast)


Lesenswert?

@ M. N.

Danke fuer die schoene Arbeit, du dir hier praesentierst.

von obscurity (Gast)


Lesenswert?

m.n. schrieb:
> Zum Beispiel ist die Auswertung von
> Drehgebern per Interrupt ein Tabu.

Mechanische, prellende, wackelnde Drehencoder per GPIO-Interrupt 
auszuwerten ist meines Erachtens nach ein Tabu. Und wenn es mal ein paar 
mehr werden dann reichen die Irq-Leitungen nicht mehr und man macht doch 
wieder was anderes. Wenn du das seit 40 Jahren so machst, dann hoffe ich 
nur, daß nicht du es warst der den Code bei den alten Veissmann 
Zeitschaltuhren verbochen hat. Das ist ein Paradebeispiel für schlechte 
Programmierung. (Ist nur als Spaß gemeint). Wackelnde Zahlen bei 
Drehencodern sieht man aber leider häufig.
Häufig werden auch GPIO-Interrups verwendet um Funkempfänger zu 
dekodieren. Das ist genauso ein Müll. Ohne Signal erzeugen die Rauschen 
mit der vollen Amplitude und damit eine unberechenbare Interruptlast des 
ganzen Systems. Da ist selbst ein Polling was definiert! die Hälfte der 
CPU-Zeit verbrät die bessere Lösung. Aber lassen wir das. Argumente und 
Erfahrung werden bei dir eh mit Schreien gleich gesetzt.
Es ist auch im allgemeinen angebracht float nur da zu benutzen wo es 
sinnvoll ist. Da viele Anfänger in dieser Hinsicht Fehler machen ist es 
berechtigt den Finger in die Wunde zu legen. Wenn man float benutzt und 
weiss was man tut und warum, ist die Welt doch in Ordnung. Manche tun es 
aber nicht und dann kommen die Fragen warum x*0.9 nicht in 1k Flash 
passen.

von m.n. (Gast)


Lesenswert?

obscurity schrieb:
> Argumente und Erfahrung werden bei dir eh mit Schreien gleich gesetzt.

Das ist eine Unterstellung und durch nichts zu belegen!

Lies Dir nochmal in Ruhe, oder vielleicht besser morgen, durch, was Du 
vorhin geschrieben hast. Es ist die Suche nach Argumenten, was gerade 
NICHT geht. Ein bekanntes Spiel, um Alles ad absurdum zu führen.
Auf einmal reichen die Interruptleitungen nicht mehr oder der Speicher 
ist zu klein. Sieh Dir das obige Programm an, nur eine Interruptleitung 
wird gebraucht und Speicher gibt es in Hülle und Fülle!
Wenn nichts mehr hilft wird argumentiert: ich brauche das nicht!
Damit ist man dann auf der ganz sicheren Seite, denn milliarden von 
Menschen brauchen es auch nicht :-)

Die 'float'-Geschichte war in den letzten 24h ja noch ein Thema, weshalb 
ich das überhaupt erwähnt habe: 
Beitrag "Re: STM32F4 Gleitkommazahl berechnet nicht"
Aber Vorurteile sterben halt nicht aus.

@cybmorg: danke Dir!

von obscurity (Gast)


Lesenswert?

Komm mal bitte wieder runter. Ich habe weder deinen Code noch deine 
Schaltung kommentiert. Ich habe mich an deinem "Tabu"-Lästern gestoßen. 
Und da in den Beiträgen die ich hier kenne auch immer hervorgeht, dass 
der Interrupt (neben Reset oder Strom weg) der einzige sinnvolle Weg ist 
um den µC aus dem Tiefschlaf zu kriegen, steht das nicht im Widerspruch 
zu deiner Schaltung/Code. Du behauptest aber das Gegenteil und damit die 
Unwahrheit!

Es ist auch nicht die Suche nach Argumenten warum etwas nicht gehen 
kann. Klar kannst du alles machen und es wird wohl auch gehen. Klar kann 
ich mit meinem Auto 50 stundenlang im ersten Gang fahren. Es gibt immer 
Menschen die müssen mit dem Kopf durch die Wand nur damit sie etwas 
anders machen als sich an Bewährtem zu orientieren.

Neue Wege zu betreten ist sicher nicht verkehrt. Deine Beispiele mit 
Tasteninterrupts (ohne das es um's Aufwachen geht) und die Verwendung 
von float gehören aber nicht in diese Rubrik. Das ist weder ein neuer 
Weg noch eine Innovation.

Das hat alles aber nichts mit der oben gezeigten Schaltung und dem Code 
zu tun. Dazu will ich mich weder äußern noch es kritisieren. Jeder der 
davon Partizipieren kann hat Arbeit gespart. Danke im Namen derer die es 
brauchen können.

> denn milliarden von Menschen brauchen es auch nicht :-)

Ja,ja Millionen Fliegen können nicht irren...
Und die wenigen Fliegen die nicht glauben wollen dass Scheiße gut ist 
kleben am Ende am Fliegenfänger....

von m.n. (Gast)


Lesenswert?

Anmerkung zu der gezeigten Schaltung 'toggle_25.png':

Bei der Schaltung ging es mir darum, zu zeigen, dass die 
Ruhestromaufnahme klein bleibt, auch für den Fall, dass der 
Schalter/Taster permanent eingeschaltet ist oder blockiert.
Falls dies nicht gebraucht wird, kann man R3 entsprechend reduzieren 
oder gleich die zuerst gezeigte Schaltung in abgemagerter Form 
verwenden. Ferner gibt es die Möglichkeit, eine Serienschalteung von C+R 
parallel zu R3 zu schalten, um einen höheren Kontaktstrom zu erzwingen. 
Typische Werte wären 100nF+10k.

Für die hochohmige Variante eignen sich Schalter/Taster mit vergoldeten 
Kontakten. Für den Innenbereich z.B. ein Digitast DTL, wie er hier 
angeboten wird: 
http://www.reichelt.de/Eingabetaster-Digitast-/DTL-2-GN/3/index.html?&ACTION=3&LA=446&ARTICLE=7246&GROUPID=3280&artnr=DTL+2+GN 
Damit habe ich beste Erfahrungen gemacht.
Für den stationären Außenbereich bietet ein Reedrelais mit 
Magnetbetätigung den besten Schutz vor Feuchtigkeit und Krabbeltierchen.

Dann gibt es auch noch eine Reihe von Tastern, die ich vorsichtig 
fomuliert, für ungeeignet halte.
http://www.reichelt.de/Eingabetaster-Digitast-/DT-6-GN/3/index.html?&ACTION=3&LA=2&ARTICLE=7239&GROUPID=3280&artnr=DT+6+GN 
oder auch 
http://www.reichelt.de/Drucktaster-Druckschalter/T-250R-SW/3/index.html?&ACTION=3&LA=2&ARTICLE=19993&GROUPID=3277&artnr=T+250R+SW 
und 
http://www.reichelt.de/Drucktaster-Druckschalter/RAFI-107-507/3/index.html?&ACTION=3&LA=2&ARTICLE=110864&GROUPID=3277&artnr=RAFI+107.507
Wegen ihrer runden Bauform sind sie natürlich leicht in eine Frontplatte 
zu integrieren. Ansonsten kann ich diese nicht empfehlen. Falls man sie 
dennoch nehmen möchte, sind die Entprellzeiten lang zu wählen 
(100-200ms), weil die Kontakte mit der Zeit 'angammeln' können.

von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Anbei eine Schaltung, die nach oben beschriebenem Verfahren von zwei 
Tastern aufgeweckt werden kann. Abhängig vom gedrückten Taster, wird der 
zugehörige Ausgang invertiert ('getoggled') und der jeweils andere 
Ausgang dabei gelöscht. Ansonsten schläft der µC mit minimaler 
Stromaufnahme.

Schaltung und Programm sind einfach und sollten die Funktion hinreichend 
beschreiben.
Wer es braucht und begriffen hat, worum es geht, kann sich Schaltung und 
Programm auch nach Belieben anpassen.

von chris (Gast)


Lesenswert?

1
ISR(PCINT0_vect)  
2
{
3
volatile int8_t temp;           
4
5
[...]
6
  temp = 0; while(--temp);                    // Warteschleife zum voelligen Laden- bzw. Entladen des Kondensators
7
[...]
8
}


so was in einer ISR...
da muss man wohl nicht mehr dazu sagen, dass dein Code scheiße ist

von M. N. (Gast)


Lesenswert?

chris schrieb:
> so was in einer ISR...
> da muss man wohl nicht mehr dazu sagen, dass dein Code scheiße ist

Es freut mich, dass Du Dir meinen Code angesehen hast.
Konstruktive Verbesserungsvorschläge sind mir immer willkommen.
Vielen Dank!

von Mike J. (linuxmint_user)


Lesenswert?

M. N. schrieb:
> Konstruktive Verbesserungsvorschläge sind mir immer willkommen.

In einer ISR darf man einfach nicht warten, dadurch werden andere ISR 
blockiert.
Also schnell abarbeiten und sofort wieder frei geben.

von m.n. (Gast)


Lesenswert?

Mike J. schrieb:
> In einer ISR darf man einfach nicht warten,

Das gilt nur für Angsthasen; ich darf das!

> dadurch werden andere ISR blockiert.

Beim Einschalten kann keine andere ISR aktiv sein und beim Ausschalten 
sind sie nicht mehr von Bedeutung. Wo ist das Problem?
Unreflektierte Vorurteile zu wiederholen, empfinde ich nicht als 
konstruktiv.

von m.n. (Gast)


Lesenswert?

Unabhängig vom Umschalten der Zustände EIN/AUS durch den µC, kann man 
die Tasterentprellung auch per Hardware aufbauen. Daran wird die 
Funktion des RC-Gliedes vielleicht etwas deutlicher: 
Beitrag "Taster per Hardware entprellen – alternative Schaltung"
Man muß daher nicht zwangsläufig auf einen µC zurückgreifen.

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Was ist nur aus der guten alten Zeit geworden, als ein P- und ein 
N-Kanal-MOSFET samt zweier Widerstände und einem Kondensator reichten, 
ein bistabiles Flip-Flop herzustellen? Achso, das ist seit den 3-4€ für 
einen 1-Kanal-Entprellchip von Texas Instruments eine wirklich 
konstengünstige Alternative. Für alle Nostalgiker: 
http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/electronic-circuits/push-button-switch-turn-on/latching-toggle-power-switch

ohne Programmiergerät, ohne C-IDE, ohne Debugger…und mit MOSFETs aus dem 
aktuellen Sortiment bis hinunter nach 0.5V Schwellspannung schaltstabil.

von Frank S. (hobbyist)


Lesenswert?

Ich finde den Bauvorschlag gut und habe ihn in eagle gezeichnet. Bei der 
nächsten Platinenbestellung werde ich das mit ordern.

Aber auch den Vorschlag von Boris finde ich interessant, weil er baulich 
gesehen kleiner ist. Mich würde die Schaltung auf Fig. 7 interessieren.

Dazu habe ich aber Fragen. Welche Kombination von SMD Mosfets mit 
ähnlichen Stromwerten (bis rund 4A) müsste man nehmen, um einen weiteren 
Spannungsbereich von z. B. 3 - 18 (oder mehr) Volt abzudecken? Die 
zweite Sache, die ich nicht verstehe ist die BAV99. Die sitzt, wenn ich 
sie bei reichelt bestelle, in einem SOT23 Gehäuse, in dem schematisch 
zwei Dioden eingezeichnet sind. Im Schaltplan ist aber nur eine Diode 
eingezeichnet. Wie muss ich die BAV99 denn nun einbauen? Wird nur ein 
der beiden Dioden genutzt, also nur zwei Pins verbunden?

Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.