Diskussion:Veranstaltungsreihe/Mikrocontroller Workshop: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
Zeile 13: Zeile 13:
  }
  }


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.
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.
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.
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?  
Gibt es auch eine Software L�sung?  
In dem Testprogramm lief das doch einigerma�en passabel.
In dem Testprogramm lief das doch einigerma�en passabel.
   
   
K�nnte irgendjemand das Testprogramm hier ver�ffentlichen?
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.
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: [http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Atmel-GCC-Tutorial] <br>
Hier gibts ein Tutorial rund um den Atmel: [http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Atmel-GCC-Tutorial] <br>
Dort gibt es auch einen Abschnitt ueber softwaremaessige Tastenentprellung.
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.

Version vom 16. November 2008, 20:26 Uhr

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.