Taster -Entprellung und Pull-Ups

Gast #2299814
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
Angehängte Dateien:
Gast #2299820
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?
Gast #2299826
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.
Gast #2299847
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ß
Gast #2299853
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.
Gast #2299884
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren