Diskussion:Veranstaltungsreihe/Mikrocontroller Workshop
Probleme mit der Ansprache der Taster
Bei dem folgenden kleinen Testprogramm sollte der Eingang der Ports B, also der Taster, direkt auf den Port C kopiert werden, an dem sich die Dioden befinden.
#include <avr/io.h> int main(void) { DDRC = 0xFF; DDRB = 0x00; while (1) { PORTC = PINB; } return 0; }
Wenn man nun einen Taster dr�ckt, geht die entsprechende Diode f�r diesen Taster ca. 3 Sekunden aus (Low-Active). Dr�ckt man w�hrend dieser Zeit erneut auf den Taster wird die Zeit, die die Diode ausgeschaltet auf weitere 3 Sekunden erh�ht. Wie soll man denn so eine vern�nftige Abfrage der Taster programmieren, die einen Taster �fter als 1-mal pro 3 Sekunden abfragen kann.
Eine Hardware-L�sung sind Pullup-Widerst�nde. Dass hei�t die PORTB1 bis PORTB4 m�ssen mit einem hohen Widerstand z.B. 10 kΩ auf 5 V gezogen werden. Mir ist aufgefallen, dass die Taster so auch unanf�lliger f�r St�rungen sind.
Gibt es auch eine Software L�sung? In dem Testprogramm lief das doch einigerma�en passabel.
K�nnte irgendjemand das Testprogramm hier ver�ffentlichen?
Ja, das ist ganz einfach. Man muss zus�tzlich noch die Internen Pullup Widerst�nde des Controllers aktivieren. Die sin aktiv, wenn man eine 1 in das entsprechende Bit des PORT Registers schreibt, w�hrend der Pin auf Eingang gestellt ist.
Hier gibts ein Tutorial rund um den Atmel: Atmel-GCC-Tutorial
Dort gibt es auch einen Abschnitt ueber softwaremaessige Tastenentprellung.
ubuntu 8.04:
apt-get install avr-binutils E: Konnte Paket avr-binutils nicht finden
Toolchain funktioniert aber trotzdem.