Diskussion:Veranstaltungsreihe/Mikrocontroller Workshop: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) |
Keine Bearbeitungszusammenfassung |
||
Zeile 13: | Zeile 13: | ||
} | } | ||
Wenn man nun einen Taster | 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 | 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- | 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 | Gibt es auch eine Software L�sung? | ||
In dem Testprogramm lief das doch | In dem Testprogramm lief das doch einigerma�en passabel. | ||
K�nnte irgendjemand das Testprogramm hier ver�ffentlichen? | |||
Ja, das ist ganz einfach. Man muss | 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.