Forum: Mikrocontroller und Digitale Elektronik 4 Taster an Mega32 entprellen


von Ichnur (Gast)


Lesenswert?

Hallo,

ich muss 4 Taster an meinem Mega32 entprellen. Auf meiner Platine ist 
noch Platz, das Programm würde ich nur ungern ändern.

Wie genau muss ich das anstellen? Im Internet finde ich nur Schaltpläne 
mit Schmitt-Trigger, aber das braucht man ja beim AVR nicht, richtig? 
Wie muss ich verkabeln?

MfG
Simon

von holger (Gast)


Lesenswert?

>ich muss 4 Taster an meinem Mega32 entprellen. Auf meiner Platine ist
>noch Platz, das Programm würde ich nur ungern ändern.

Timerinterrupt mit 20-50ms kostet glaub ich gerade
mal 20 Zeilen Code.

von Ichnur (Gast)


Lesenswert?

Und wie genau geht das dann? (C)

von Icke (Gast)


Lesenswert?

Forumsuche:
Taster entprellen

von Fred (Gast)


Lesenswert?

Wenn du unbedingt eine Hardwareentprellung willst, dann brauchst du 4 RS 
FF und entsprechend 4 Taster mit Umschaltkontakt.

Aber wenn man schon einen mC hat, dann kann man das auch 
softwaretechnisch lösen.

Fred

von Peter D. (peda)


Lesenswert?

Ichnur schrieb:
> Wie genau muss ich das anstellen?

Nimm die bekannte Routine für 8 Tasten.

http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

Ichnur schrieb:
> Im Internet finde ich nur Schaltpläne
> mit Schmitt-Trigger, aber das braucht man ja beim AVR nicht, richtig?

Völlig richtig.

Ichnur schrieb:
> Wie muss ich verkabeln?

Taste an Pin und gegen GND.
Vorzugsweise alle 4 Tasten an den gleichen Port.


Peter

von Ichnur (Gast)


Lesenswert?

Danke für den Link! Ich versuch es jetzt per Software und wenn das nicht 
klappt, dann per Hardware. Meine Taster hängen alle an PORTD. Da sind 
aber auch noch LEDs dran. So wie ic hden Code verstehe, sollte das aber 
keine Probleme machen.

Ein paar Fragen zum Code habe ich noch.

1) Was ist
1
#define REPEAT_MASK     (1<<KEY1 | 1<<KEY2)       // repeat: key1, key2
2
#define REPEAT_START    50                        // after 500ms
3
#define REPEAT_NEXT     20                        // every 200ms
?

Ich verstehe nicht, wozu diese Konstanten gut sein sollen. Brauch ich 
das nur für "Doppelklicks"?

2) Warum werden nur 4 Schwingungen ("Toggles" des Schalters) beachtet 
und wo ist dies im Code zu finden?

Auf Antworten freue ich mich!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ichnur schrieb:
> Ich verstehe nicht, wozu diese Konstanten gut sein sollen. Brauch ich
> das nur für "Doppelklicks"?
Das ist keine doppelklick-funktion, sondern eine Repeat-Funktion wie 
z.B. an der PC-Tastatur: einmal drücken und warten ergibt mehrere 
nachfolgende Tastendrücke...

> 2) Warum werden nur 4 Schwingungen ("Toggles" des Schalters) beachtet
> und wo ist dies im Code zu finden?
Wie meinst du das?
Im Code sind einfach nur 8 parallele Zähler (das sind die Bytes), die 
jeweils 4 Schritte (=Timeraufrufe) weit zählen können. Solange muß das 
Tastensignal stabil bleiben, sonst wird der entsprechende Timer 
zurückgesetzt.

von Ichnur (Gast)


Lesenswert?

Danke für Punkt 2, habs verstanden! Ich habe einfach nahc einer 
Möglichkeit gesucht, die Grenze für maximale Schwingungen zu ändern. Ist 
aber nicht so schlimm, wenn es das nicht gibt.

Erklärung 1 habe ich jetzt auch kapiert :)

Ich hoffe nur, dass das Ganze auch problemlos funktioniert und ich nicht 
an sowas hängen bleibe. Morgen muss das Ding nämlich laufen (Nein, kein 
Schulprojekt ;))

von Peter D. (peda)


Lesenswert?

Ichnur schrieb:
> Ich habe einfach nahc einer
> Möglichkeit gesucht, die Grenze für maximale Schwingungen zu ändern. Ist
> aber nicht so schlimm, wenn es das nicht gibt.

Ergibt sich aus der Interruptrate: 10ms * 4 = 40ms
Ist aber völlig unkritisch.
In der Regel reichen 2ms aus, kannst aber auch auf 50ms hochgehen. 
Reaktionen nach <=200ms werden vom Menschen noch als "sofort" 
wargenommen.


Peter

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
Noch kein Account? Hier anmelden.