erstellt 06.06.2012 |
||||||||||||||||||||||||||||||||||||||||||||||||
Eingabe mit Taster |
||||||||||||||||||||||||||||||||||||||||||||||||
Zur Ausgabe von Daten haben wir das Display kennengelernt, um Zustände
abzufragen oder anders gesagt Daten oder Informationen einzugeben gibt
es vielerlei Möglichkeiten , wir wollen erst einmal die einfachste Form
kennen lernen, und das ist die Dateneingabe über Taster oder Schalter. Wir erweitern unsere Platine also erst einmal um zwei Taster wie im Schaltplan grün dargestellt. Unsere Taster bewirken im geschlossenen Zustand einen "Low" Pegel am Anschluss des Mikrocontrollers, (Low Pegel bedeutet soviel wie "nahe bei Null") in unseren Fall ist es sogar exakt Null ,man sagt auch für Low "Null". |
||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||
Im offenen Zustand der Taster (Bild oben) sollte der Pegel am Mikroprozessor High
sein (High Pegel bedeutet "nahe" bei Max, Betriebspannung), dazu sagt
man "Eins" leider liegt an den Eingängen die man auch als Inputs oder Pins bezeichnet ,( in der Bascom Programmiersprache wird immer von Pin gesprochen wenn es sich um einen Anschluss handelt der als Eingang benutzt wird) aber ein undefinierter Pegel an, so das er vom Mikroprozessor als Low oder High erkannt werden kann. Damit aber ein genau definierter Zustand eintritt der vom Mikroprozessor eindeutig verstanden wird schaffen wir uns Abhilfe mit einen sogenannten"PullUp-Widerstand" das ist ein Widerstand der zwischen Plus und Pin des Mikroprozessor eingesetzt wird (Bild unten) somit haben wir einen eindeutigen High Pegel wenn die Taster offen sind, und einen eindeutigen Low Pegel wenn die Taster geschlossen sind, natürlich fließt so ein unerwünschter Strom sobald der Taster geschlossen ist der unserer Batterie belastet deshalb sollte der Widerstand möglichst groß sein um die Verluste gering zu halten. Unser Moderner Atmega 8 Mikroprozessor hat diese "PullUp " Widerstände aber schon im Gehäuse mit eingebaut und die können durch einfache Programmbefehle aktiviert werden, so das wir uns die Externen Widerstände sparen können. |
||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||
Schreiben wir also ein kleines Programm um den Zustand der Taster abzufragen: Die ersten Zeilen bis Zeilen Nr.6 können wir als Standard bei allen Programmanweisungen erst einmal beibehalten. Die Anschlüsse beim Atmega 8 sind sogenannte Bidirektionale Anschlüsse, das bedeutet das sie je nach Konfiguration als Eingänge oder als Ausgänge fungieren können. Um also die Anschlüsse an denen die Taster sich befinden als Eingänge nutzen zu können , muss dies dem Atmega mitgeteilt werde. Neu hinzu gekommen ist also Zeile 7 hier wird dem Mikroprozessor mitgeteilt ob er die Anschlüssen als Eingänge oder Ausgänge behandeln soll. |
||||||||||||||||||||||||||||||||||||||||||||||||
Die Anweisung DDRC=&B00000000 hat folgende Bedeutung DDR
steht für
DataDirectionRegister ( Datenrichtungsbefehl ) , zuständig für das
Register das unseren Atmega mitteilt ob der Anschluss als Eingang
oder Ausgang genutzt werden soll, dabei steht die Zahl 1 immer für die
Nutzung als Ausgang und die Zahl 0 immer für die Nutzung als Eingang. Ein Register ist ein Speicherbereich der für bestimmte Funktionen zuständig ist in unserem Fall für die Umstellung ob ein Anschluss als Ein oder Ausgang eingestellt wird. Das folgende C steht für den gesamten Port C, also C0 bis C7 siehe Anschlussplan (Bild unten), die Zeichen &B stehen als Zeichen dafür das die Nachfolgende Zahl als Binärzahl interpretiert wird, es ist möglich dies auch in Dezimalzahl (&D0)oder Hexadezimalzahl (&H0) darzustellen , und die acht Nullen stehen als Anschlüsse für jeden Pin also von rechts an gezählt die erste Null für PortC.0 die zweite Null von rechts steht für PortC.1 usw.( siehe Bild rechts) Die Null selber steht für die Definition als Eingang , sollte der Anschluss als Ausgang definiert werden schreiben wir anstatt Null eine Eins. Da wir um die Taster abzufragen Eingänge benötigen, deklarieren wir diese auch Als Eingänge, also mit einer Null . Standardmäßig befinden sich nach dem Einschalten des Atmega Mikroprozessor alle Ports als Eingänge, somit ist es nicht zwingend erforderlich diese jetzt explizit als Eingänge zu definieren, um aber ein besseres Verständnis davon zu bekommen sollte man sich angewöhnen diese trotzdem zu setzen , weil man dann später nicht vergisst diese zu setzen falls es nötig wird . Weiter ist Zeile 8 hinzugekommen: Portc=&B00001100 mit dieser Anweisung wird der Atmega angewiesen die zuvor erwähnten "PullUp" Widerstände zu setzen und zwar für PinC.2 und PinC.3 Danach erscheint ab Zeile 8 der eigentliche Programmteil |
||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||
Nach
dem Compilieren und übertragen in den Atmega sollte dann folgende
Anzeige auf dem Display erscheinen, die beiden einsen zeigen uns die
aktuellen werte des Atmega am Pinc.0 und PinC.1 an |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||
Wenn
anschließend z.B. die rechte Taste gedrückt wird erscheint folgende
Anzeige , aber nur solange die Taste festgehalten wird , das gleiche
sollte passieren wenn die linke Taste gedrückt wird.allerdings sollte
dann auf der Anzeige die Null auf der linken Seite erscheinen. |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||
Aktualisiert 25.12.2013 |