Diskussion:Veranstaltungsreihe/Mikrocontroller Workshop

Aus LaborWiki
Wechseln zu: Navigation, Suche

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.