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
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?
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.
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ß
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.
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?
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...
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.