Forum: Mikrocontroller und Digitale Elektronik Taster -Entprellung und Pull-Ups


von Klaus W. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

verwende bei meiner Programmierung eines Atmega8 eine Routine zur 
Tastenentprellung, die ich in einem Tutorial gefunden habe.

http://www.micahcarrick.com/avr-tutorial-switch-debounce.html

In dem einfachen Beispiel wird durch Drücken eines Tasters der Zustand 
einer LED gewechselt.
Den C-Code habe ich gut verstanden und er funktioniert auch einwandfrei.

Bei mir ist allerdings das Problem aufgetreten, dass bei Wahl eines 
anderen Tasters das selbe Programm nicht funktioniert.
Anstatt den Zustand zu wechseln, reagiert die LED nicht auf 
Taster-Druck, sondern wechselt den Zustand in einem kurzen Abstand 
automatisch.

Ich vermute, dass dies an dem internen Pull-Up Widerstand liegt.
Aber wieso funktioniert es bei dem ersten Taster?
Weiß einer von euch, wie ich das Problem beheben kann?

Zur Programmierung verwende ich das AVRStudio 4 GCC.

Vielen Dank für eure Hilfe

von Helfer (Gast)


Lesenswert?

Wie sehen diese Zeilen bei deiner Variante aus?

> #define BUTTON_PORT PORTC       /* PORTx - register for button output */
> #define BUTTON_PIN PINC         /* PINx - register for button input */
> #define BUTTON_BIT PC1          /* bit for button input/output */

Wie sieht deine Schaltung des Tasters aus?

von Helfer (Gast)


Lesenswert?

Nachtrag: Oder meinst du mit "anderem Taster" ein anderes Bauteil bei 
exakt gleichem Programm und Schaltplan? In diesem Fall würde ich prüfen, 
ob der Taster korrekt in der Schaltung eingesetzt ist.

von Klaus W. (Gast)


Lesenswert?

Helfer schrieb:

> Wie sehen diese Zeilen bei deiner Variante aus?
>
>> #define BUTTON_PORT PORTC       /* PORTx - register for button output */
>> #define BUTTON_PIN PINC         /* PINx - register for button input */
>> #define BUTTON_BIT PC1          /* bit for button input/output */


Anstatt:

#define BUTTON_BIT PC1

verwende ich den Taster, der mit PC2 verbunden ist.

#define BUTTON_BIT PC2

Den Rest lasse ich komplett so.
Die beiden Taster sind identisch aufgebaut.

Beschreibung + Schaltplan:
http://www.myavr.info/download/produkte/myavr_board_mk2/techb_myavr-board-mk2_de_en.pdf

Gibt es denn mehrere, unterschiedliche Pull-Ups, die man aktivieren 
muss?

Danke und Gruß

von Klaus W. (Gast)


Lesenswert?

Der Taster funktioniert.
Hab die Verschaltung mal ausgetauscht und geprüft, ob es mit dem 
Schalter funktioniert.
Es liegt aber nur an der anderen Bezeichnung PC2 anstatt PC1.
Die Schalter sind beide i.O.

Ich weiß leider nur nicht, inwieweit sich diese unterscheiden, bzw. was 
der Unterschied bei der Verwendung ist.

von Helfer (Gast)


Lesenswert?

Im Programm wird der richtige Pulldown für den PC2 aktiviert.

Du brauchst bei der neuen Variante eine Verbindung von Pin 25 am Atmega8 
zum Jumperpin 1 oder 2 des Schalters S2. Ist die vorhanden?

Kontrolliere dann mit einem Multimeter die Spannung an Jumperpin 1 oder 
2 von S2 wenn S2 gedrückt ist. Die Spannung muss beim Drücken deutlich 
in Richtung 0V abfallen (LOW Pegel) und bei losgelassenem Taster 
deutlich in Richtung 5V gehen (HIGH Pegel). Ist das der Fall?

von Klaus W. (Gast)


Lesenswert?

Ich hab jetzt alle Verbindungen ausprobiert.
Auf einen weiteren PIN wird der Pull-Up jetzt tatsächlich auch noch 
aktiviert.

Danke für deine Hilfe. Das war sehr hilfreich...

von Ina (Gast)


Lesenswert?

>Im Programm wird der richtige Pulldown für den PC2 aktiviert.

Pulldown?

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.