Forum
C-Programm für Atmel90CAN128 (Elektronik)
» Dort sind an den Ausgänge
» von PortF ADC0-ADC3 4LEDs und wir haben an PortE PE0-PE2 3 Schalter
» angeschlossen. Wir bekommen es aber nicht hin diese einzubinden.
» Kann mir jemand helfen wie ich es programmieren muß, dass Schalter 1 die
» erste LED anschaltet, Schalter 2 die zweite und der dritte Schalter die 3
» LED?
Das Abfragen der Schalter funktioniert fast genau so, wie das Ansteuern der LEDs.
Als erstes müsst ihr die drei Pins an denen die Schalter hängen als Eingänge definieren. Das erfolgt über das Register DDRE. Die entsprechenden Bits sind auf 0 zu setzen.
Jetzt könnt ihr über PORTE den Status der Schalter abfragen. Wenn ihr an einer Programmstelle warten wollt, bis euer Taster gedrückt wurde, dann müsst ihr - etwas abstrakt formuliert - eine Abfrage der Form
while (Keine_Taste_gedrückt) {Leere_Anweisung}
verwenden.
Dazu müsst ihr aber den Hardwareaufbau kennen. Üblich ist das verwenden von Pullup Widerständen und das Schalten der Taster gegen GND. Das heißt, ein 0 Pegel signalisiert einen gedrückten Taster. Man kann es natürlich auch andersrum aufbauen. Also guckt erstmal nach, wie das bei euch gemacht wurde.
Das verwenden einer Endlosschleife zum Warten ist übrigens eine relativ schlechte Lösung, weil unnötig viel Rechenzeit verbraucht wird und das System in der Zwischenzeit nicht auf Anfragen reagieren kann. Aber es ist relativ einfach umzusetzen ud in eurem Fall vermutlich auch die gewünschte Lösung.
Falls ihr später mal Taster auch zum hochzählen von Zählern verwenden wollt, solltet ihr euch vorher unbedingt in das Entprellen von Tastern einlesen.
Mal was anderes zu den Kommentaren: Sind diese absolut sinnlosen Einzelzeilenkommentare Vorgabe des Lehrers?
Normalerweise fasst man mehrere Zeilen, die auch logisch im Programm zusammengehören, zu einem Block zusammen und beschreibt, was der Block macht und ggf. warum das an der Stelle erforderlich ist.
Hinter eine Zeile wie x++ noch zu schreiben, dass x um 1 erhöht wird, ist absolut unnötig, da es schon im Befehl ersichtlich ist. Interessant ist doch eher die Frage, warum x gerade an dieser Stelle um eins erhöht wird und was es im Zusammenhang bewirkt.
» PORTF = 0x00; // hiermit setzen wir den Ausgang Pin 0
» auf 1
Der Kommentar ist schlichtweg falsch.
Gruß
Torsten
Gesamter Thread:
