Mikrocontroller-Einstieg mit myAVR Teil 5/7
Aus ELVjournal
06/2006
0 Kommentare
Keine
Angst vor dem Einstieg in die Welt der Mikrocontroller-Programmierung!
Die myAVR-Sets enthalten alles Nötige für den schnellen und fundierten
Beginn der Programmierer-Karriere – Experimentierboard mit
ATMEL-Controller, Lehrbuch, Softwarepaket, Kabel, sämtlichem Zubehör. Im
fünften Teil unserer Serie zur Programmierung des AVR beschäftigen wir
uns mit der Kommunikation zwischen AVR und seiner Umgebung über die
serielle UART-Schnittstelle.UART – seriell und asynchron
Der
Austausch von Daten mit anderen Systemen ist eine wichtige
Voraussetzung für die Arbeit mit Mikrocontrollern. Der
Kommunikations-„Partner“ muss nicht immer ein PC sein, auch Tastaturen,
Displays und externe Speicher müssen vom Prozessor abgefragt bzw. mit
Daten versorgt werden. Dabei hat sich in Mikrocontrollern die serielle
Schnittstelle bis heute bewährt. Sie ist einfach aufgebaut, entsprechend
einfach handhabbar und in den Controllern implementiert. Beim
AVR-Controller finden wir neben den seriellen Interfaces I2C und SPI die
serielle Schnittstelle in Form eines integrierten UART-Bausteins
(Universal Asynchron Receiver Transmitter). Dieser spezielle
Schnittstellenbaustein unterstützt die serielle Datenübertragung nach
der weitverbreiteten RS232-Norm und stellt damit eine einfache
Möglichkeit dar, Daten zu versenden und zu empfangen.
Dies erfolgt über die Zweidrahtschnittstelle des AVR. Diese allerdings
arbeitet mit den in Mikrocontrollersystemen üblichen TTL-Pegeln. Das ist
in Ordnung, solange über kurze Strecken etwa mit einem angeschlossenen
Speicherbaustein direkt kommuniziert werden soll.![Bild 42: Der MAX 232 sorgt für die normgerechte Erzeugung der Pegel für die RS232-Schnittstelle aus der 5-V-Betriebsspannung. Darüber ist der RS232-Port zu sehen. Bild 42: Der MAX 232 sorgt für die normgerechte Erzeugung der Pegel für die RS232-Schnittstelle aus der 5-V-Betriebsspannung. Darüber ist der RS232-Port zu sehen.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_007.jpg)
|
Bild
42: Der MAX 232 sorgt für die normgerechte Erzeugung der Pegel für die
RS232-Schnittstelle aus der 5-V-Betriebsspannung. Darüber ist der
RS232-Port zu sehen. |
Will
man aber eine RS232-Verbindung zur seriellen Schnittstelle eines PCs
aufbauen, sind die Signalpegel an die RS232-Konventionen anzupassen.
Dazu befindet sich auf dem myAVR-Board der bekannte
Schnittstellen-Baustein MAX 232 (Abbildung 42), der eine Umwandlung der
TTL-Pegel (0/5 V) in die RS232-Signalpegel ±12 V vornimmt. Der Vorteil
dieses Bausteins: Man benötigt nur eine Versorgungsspannung von 5 V, die
Umwandlung erfolgt durch interne Spannungswandler.Damit
und mit dem 9-poligen Sub-D-Steckverbinder auf dem Board sind die
hardwaremäßigen Voraussetzungen erfüllt, um mit einer
RS232-Standard-Schnittstelle, wie sie die serielle PC-Schnittstelle
darstellt, kommunizieren zu können. Bleibt noch die eigentliche
Verbindung. Abbildung 43 zeigt die vollständige Verbindung zwischen zwei
RS232-Schnittstellen. Zusätzlich zu den Datenleitungen RXD (Empfangen)
und TXD (Senden) finden wir hier noch einige Steuerleitungen, die
jeweils die Bereitschaft von Sender und Empfänger zur Datenübertragung
signalisieren. Für eine einfache Datenübertragung nutzt man allerdings
oft die in Abbildung 44 dargestellte 3-Draht-Nullmodem-Verbindung. Ein
so beschaltetes Nullmodem-Kabel befindet sich im Lieferumfang des
myAVR-Sets, womit alle hardwareseitigen Voraussetzungen für den
Datenaustausch zwischen PC und AVR erfüllt sind. ![Bild 43: Die vollständige RS232-Verbindung mit Steuerleitungen. Bild 43: Die vollständige RS232-Verbindung mit Steuerleitungen.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_006.jpg)
|
Bild 43: Die vollständige RS232-Verbindung mit Steuerleitungen. |
![Bild 44: Die vereinfachte RS232-Verbindung als Nullmodem-Verbindung. Bild 44: Die vereinfachte RS232-Verbindung als Nullmodem-Verbindung.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_004.jpg)
|
Bild 44: Die vereinfachte RS232-Verbindung als Nullmodem-Verbindung. |
Diese
geringe Leitungsanzahl (je Richtung eine plus Masse) wird durch das
angewendete serielle, asynchrone Datenübertragungsverfahren mit einer
sehr einfachen Datenstruktur ermöglicht. Asynchron heißt, dass mit den
Daten kein Taktsignal übertragen wird und es keine Rückfrage über den
ordnungsgemäßen Empfang der Daten gibt. Somit verliert man keine Zeit
mit der Kontrolle der Datenübertragung. Allerdings müssen dazu Sender
und Empfänger mit exakt der gleichen Übertragungsrate (Baudrate)
arbeiten bzw. darauf eingestellt sein. Und beide Stellen müssen sich
gegenseitig signalisieren, wenn die eigentliche Datenübertragung beginnt
(Start-Bit) und endet (Stopp-Bit). Entsprechend sind die Datenbits
eines Datenwortes jeweils von je einem Start- und Stopp-Bit eingerahmt.
So erreicht man eine relativ schnelle und sehr einfach aufzubauende
Datenverbindung. UART inside
Verschaffen
wir uns zum Verständnis der Programmierung des AVR-UARTs zunächst mit
Abbildung 45 einen Überblick über seinen Aufbau. Auch hier erfolgt die
Programmierung über Register, die der Steuerung, der Festlegung der
Baudrate und der Verwaltung der eigentlichen Daten dienen. Die
Übertragungsrate wird direkt aus dem quarzstabilen Systemtakt generiert,
die Genauigkeit ist für diese Art der Datenverbindung völlig
ausreichend.![Bild 45: Der Aufbau des UART und seine Registerbelegung. Die Registerbezeichnungen können je nach Controllertyp variieren, die Funktionen sind jedoch kompatibel. Bild 45: Der Aufbau des UART und seine Registerbelegung. Die Registerbezeichnungen können je nach Controllertyp variieren, die Funktionen sind jedoch kompatibel.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic.jpg)
|
Bild
45: Der Aufbau des UART und seine Registerbelegung. Die
Registerbezeichnungen können je nach Controllertyp variieren, die
Funktionen sind jedoch kompatibel. |
![Bild 46: Der UART besitzt drei Interrupt-Quellen, die alternativ zum Pollingverfahren einsetzbar sind. Bild 46: Der UART besitzt drei Interrupt-Quellen, die alternativ zum Pollingverfahren einsetzbar sind.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_003.jpg)
|
Bild 46: Der UART besitzt drei Interrupt-Quellen, die alternativ zum Pollingverfahren einsetzbar sind. |
Die
„INT“-Anschlüsse weisen darauf hin: Der UART-Baustein ist
interruptfähig, ein Blick in die Vektortabelle (Abbildung 46) bestätigt
die drei möglichen Interrupt-Arten. Schließlich realisieren die
Empfangs- und Sendebausteine die normgerechte RS232-Kommunikation nach
außen.UART initialisieren
Wollen wir uns nun mit der Programmierung des UARTs befassen, um schließlich Daten an einen angeschlossenen PC zu senden.Baudrate einstellen
Wie
gesagt, die Baudrate wird direkt aus dem Systemtakt abgeleitet. Die
RS232-Konventionen sehen eine Reihe definierter Baudraten, z. B. 1200,
2400, 9600, 57 600 oder 115 200 Baud vor. Entsprechend ist ein Faktor in
das Register UBRR zu laden. Wollen wir z. B. mit der gängigen Baudrate
9600 Baud übertragen, errechnet sich dieser Faktor wie folgt:Im späteren Programm kann man den Faktor entweder als Formel oder gleich das Ergebnis eintragen. Empfänger/Sender initialisieren
Nach
dem Einschalten des AVR sind die Empfänger- und Senderbausteine
ausgeschaltet, einmal um Strom zu sparen und zum anderen um ungewollte
Übertragungen und Störeffekte zu unterbinden.
Daher muss je nach Aufgabe der Sender und/oder Empfänger des UART
aktiviert bzw. deaktiviert werden.
Dies erfolgt über das Kontroll-Register UCR/UCSRB (siehe Abbildung 45)
und dort über die Bits 3 (Sender (TX) ein-/ausschalten) und 4 (Empfänger
(RX) ein-/ausschalten).Daten empfangen
Nachdem
nun die Initialisierung abgeschlossen ist, kann der UART-Baustein Daten
empfangen. Die Empfangssteuerung erfolgt über die beiden Register
USR/UCSRA und UDR (siehe Abbildung 45). Dabei wird über das
Statusregister USR/UCSRA über das Bit 7 (RXC, Receive complete) durch
ständige Abfrage (Polling) überwacht, ob das Stopp-Bit gesendet wurde.
Erst dann werden die empfangenen Daten im Datenregister UDR abgelegt und
liegen hier zur Auswertung bereit.![Bild 47: Das Unterprogramm zum Warten auf den Empfang eines Bytes. Bild 47: Das Unterprogramm zum Warten auf den Empfang eines Bytes.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_009.jpg)
|
Bild 47: Das Unterprogramm zum Warten auf den Empfang eines Bytes. |
Abbildung
47 zeigt die zugehörige Programmierung über die „getChar“-Routine
(Zeichen via Polling empfangen). Der Befehl sbis ist wieder einer der
bereits bekannten Skip-Befehle. Er sorgt für die Abfrage des Zustands im
Register USR/UCSRA. Ist das Bit 7 dort gesetzt, also der Empfang
abgeschlossen, wird der folgende Rücksprungbefehl ignoriert, und es
erfolgt das Einschreiben der Daten, die sich im UDR-Register befinden,
in das Zwischenregister r16.Daten senden
![Bild 48: Das Unterprogramm der Senderoutine im Polling-Modus. Bild 48: Das Unterprogramm der Senderoutine im Polling-Modus.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_010.jpg)
|
Bild 48: Das Unterprogramm der Senderoutine im Polling-Modus. |
Ganz
ähnlich läuft das Senden ab. Der UART wird durch das Eintreffen eines
Bytes im Datenregister dazu aufgefordert, dieses auch zu senden – aber
erst, wenn das Senden des vorhergehenden Bytes abgeschlossen ist. Die
zugehörige Polling-Routine „putChar“ (Abbildung 48) ähnelt der
Empfangsroutine, hier wird aber das Bit 5 des Registers USR/UCSRA
abgefragt, bevor der Inhalt des Zwischenregisters in das Datenregister
und damit an den Sender gegeben wird.
Die zu sendenden Daten werden Byte für Byte über das Hauptprogramm in
das Zwischenregister geladen und hier eines nach dem anderen über
Rücksprung zum Unterprogramm „putChar“ gesendet.
Wollen wir uns ansehen, wie das praktisch funktioniert.Das Programm
![Bild 49: Der Quellcode für die serielle Datenübertragung des Wortes TEST! an den PC. Bild 49: Der Quellcode für die serielle Datenübertragung des Wortes TEST! an den PC.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_013.jpg)
|
Bild 49: Der Quellcode für die serielle Datenübertragung des Wortes TEST! an den PC. |
Das
einfache Programm zur Ausgabe eines Wortes über die serielle
Schnittstelle ist schnell erklärt, da wir alle wesentlichen Bausteine ja
bereits kennen.
Der Quellcode (Abbildung 49) für unser einfaches Sendeprogramm zeigt,
dass in der Vektortabelle außer dem Power-on-Reset keine
Interrupt-Quelle genutzt wird, da wir ja das Polling-Verfahren zur
Abfrage der Sendebereitschaft verwenden.
Die Initialisierungsroutine wird hier ergänzt durch das Setzen des
Registers UCR/UCSRB, hier wird, wie beschrieben, der Sendebaustein
aktiviert. Danach erfolgt das Generieren der Baudrate.
Im Hauptprogramm finden wir die beschriebenen Routinen zum Aufrufen der
auszugebenden Zeichen über das schließlich folgende
Ausgabe-Unterprogramm „putChar“. Kompilieren, linken und brennen wir das
Programm nun wie üblich über das Parallelkabel in unseren AVR. Erst,
wenn das abgeschlossen ist, verbinden wir eine serielle Schnittstelle
des Rechners (COMx) über das beschriebene Nullmodem-Kabel mit der
seriellen Schnittstelle des myAVR-Boards.![Bild 50: Unser Text ist im PC angekommen! Er wird über das Terminalprogramm des Controlcenters ausgegeben. Bild 50: Unser Text ist im PC angekommen! Er wird über das Terminalprogramm des Controlcenters ausgegeben.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_012.jpg)
|
Bild 50: Unser Text ist im PC angekommen! Er wird über das Terminalprogramm des Controlcenters ausgegeben. |
Nach
dem Öffnen des SiSy-AVR Controlcenters über den Button „Ausführen“, dem
Herstellen der seriellen Verbindung und dem Starten des AVR über den
Start-Button sendet dieser ständig die programmierten Zeichen in das
Protokollfenster (Abbildung 50), bis das Programm wieder angehalten
wird.
Das hier aufgeführte Programm ist natürlich nur als einfach zu lernende
Programmiersequenz aufzufassen, die u. a. die Grundzüge der Ausgabe auf
eine Anzeige beschreibt. Dass es noch wesentlich eleganter geht, ganze
Zeichenketten „auf einen Schlag“ zu verschicken und zu empfangen,
Nachrichten in den einzelnen Speicherarten, insbesondere dauerhaft im
EEPROM zu speichern und aus diesen auszulesen, beschreibt der
myAVR-Lehrgang ebenso ausführlich wie die Programmierung des UART als
Empfänger.
Wir wollen uns zum Abschluss der Einführung in die
AVR-Assemblerprogrammierung noch einmal kurz mit einer weiteren
Möglichkeit befassen, wie man den AVR nutzen kann – die Verarbeitung
analoger Signale über die analogen Eingänge des Controllers.Analoge Signalverarbeitung
Erinnern
wir uns noch an den Beginn unserer Serie, als wir Aufbau und Pin-Out
des AVR-Controllers besprochen haben. Hier fallen uns auch diverse
analoge Ports auf, darunter mehrere A/D-Wandler-Eingänge und ein
Komparator. Die Nutzung des Letzteren wollen wir in unserem kurzen
Beispiel genauer erarbeiten. Die ausführliche Nutzung der A/D-Wandler,
die einen analogen Spannungswert in eine digitale Größe umwandeln,
überlassen wir dem ausführlichen myAVR-Lehrgang.Der Komparator des ATmega
![Bild 51: Der prinzipielle Schaltungsaufbau des Komparators und das zugehörige Steuerregister ACSR. Bild 51: Der prinzipielle Schaltungsaufbau des Komparators und das zugehörige Steuerregister ACSR.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_002.jpg)
|
Bild 51: Der prinzipielle Schaltungsaufbau des Komparators und das zugehörige Steuerregister ACSR. |
Ein
Komparator vergleicht zwei analoge Spannungen in einem bestimmten
Spannungsbereich und gibt ein Signal aus, wenn eine der Spannungen
größer oder kleiner als die andere (meist ein fester Referenzwert) ist.
Der Komparator des ATmega auf unserem myAVR-Board verbirgt sich hinter
den Pins 12 (AIN 0, analog input 0) und Pin 13 (AIN 1, analog input 1).
AIN 0 ist der Eingang für die Referenzspannung. Er ist so
programmierbar, dass entweder eine externe oder intern erzeugte
Referenzspannung nutzbar ist (Abbildung 51). Hat die zu kontrollierende
Spannung an AIN 1 einen Wert unter der Referenzspannung, so erscheint am
Ausgang des Komparators der Zustand „0“. Übersteigt der Spannungswert
die Referenzspannung, kippt der Komparator, und es erscheint der
logische Zustand „1“ an seinem Ausgang. Genau das kann der Controller
auswerten und z. B. eine Warnanzeige ausgeben (oder auch, in Erweiterung
des vorherigen Kapitels, eine Meldung an den PC ausgeben bzw. auch eine
Regelschaltung in Gang setzen). Die praktischen Anwendungen sind
vielfältig, man denke nur an die Überwachung einer Temperatur.Das Steuerregister
Das
in Abbildung 51 bereits abgebildete Steuerregister des Komparators
bietet zahlreiche Optionen zur Steuerung des Komparators. So kann er
durch Setzen des Bits 7 wie die UART-Sender/-Empfänger ein- und
ausgeschaltet werden. Durch Bit 6 ist die Umschaltung zwischen einer
externen oder der internen Referenzspannung (fest: 1,22 V) möglich. Die
Auswertung von Bit 5 ermöglicht es, den aktuellen Ausgangswert des
Komparators auszulesen.
Und da wir den Komparator auch in der Interrupt-Vektortabelle als
Interrupt-Quelle finden, zeigt Bit 4 des Steuerregisters an, ob ein
Komparator-Interrupt-Ereignis vorliegt oder nicht. So kann der
Komparator bei entsprechender ISR einen Interrupt auslösen – sofern man
über Bit 2 des Steuerregisters diese Betriebsart freigibt und über Bit 1
und 0 das Interrupt-Ereignis definiert (Interrupt bei jedem Wechsel des
Komparatorausgangs, bei fallender oder bei steigender Flanke).
In unserem folgenden Programmierbeispiel wollen wir den Komparator dazu
nutzen, zwei analoge Spannungen an AIN 0 und AIN 1 zu überwachen und,
wenn die Spannung an AIN 1 die an AIN 0 übersteigt, eine LED zu
schalten. Dazu lassen wir die Interrupt-Möglichkeit wieder außen vor und
überwachen den Zustand des Bits 5 im Komparatorregister ACSR im
Polling-Betrieb, ähnlich unserem Vorgehen bei der seriellen
Datenübertragung. Als Spannungsquellen nutzen wir praktischerweise die
beiden Potentiometer des myAVR-Boards, die den Komparatoreingängen
Spannungen zwischen 0 und +5 V liefern können.Das Programm
![Bild 52: Der Quellcode zum Komparatorprogramm. Bild 52: Der Quellcode zum Komparatorprogramm.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_011.jpg)
|
Bild 52: Der Quellcode zum Komparatorprogramm. |
Im
Quellcode (Abbildung 52) sehen wir, dass gar nicht so viel Aufwand für
die Lösung dieser einfachen Aufgabe getrieben werden muss.
Nach Interrupt-Vektortabelle und Stack-Initialisierung finden wir hier
zunächst die beschriebene Aktivierung des Komparators über sein Register
ACSR und dessen Bit 7. Danach folgt die Aktivierung des Bits 6, was
bedeutet, dass die externe Referenzspannung genutzt werden soll. Und
schließlich finden wir einen alten Bekannten wieder: Port B0 wird als
Ausgabeport für die rote LED definiert.![Bild 53: Die Verdrahtung des myAVR-Boards. Bild 53: Die Verdrahtung des myAVR-Boards.](Mikrocontroller-Einstieg%20mit%20myAVR%20Teil%205_7%20_%20ELVjournal-Dateien/journal_pic_008.jpg)
|
Bild 53: Die Verdrahtung des myAVR-Boards. |
Im
Hauptprogramm folgen nun der Auslesebefehl des
Komparator-Statusregisters, das Laden des Ausgaberegisters r25 mit „0“,
also LED aus. Jetzt wird es spannender – wurde das
Komparator-Statusregister (Bit 5) mit „1“ ausgelesen, bedeutet dies,
dass die Eingangsspannung an Pin AIN 1 höher ist als die an Pin AIN 0.
Jetzt wird Register r25 mit „1“ geladen und dies an Port B ausgegeben –
die LED wird eingeschaltet! Abbildung 53 zeigt die Verdrahtung des
myAVR-Boards für diese Aufgabe.
Das war’s – und das war es auch mit unserem kleinen Assembler-Lehrgang
zum AVR-Controller. Wie gesagt, das Lehrgangsmaterial zum myAVR-Board
enthält noch viele, vor allem weiterführende Beispiele und interessante
Lösungen bestimmter Aufgaben. Wir gehen in der nächsten Folge zu einer
Kurzeinführung der AVR-Programmierung in den Programmiersprachen C und
BASCOM über.Fachbeitrag online und als PDF-Download herunterladen
Inhalt
Sie erhalten den Artikel in 2 Versionen:
als Online-Version
als PDF (5 Seiten)
Sie erhalten folgende Artikel:
- Mikrocontroller-Einstieg mit myAVR Teil 5/7
weitere Fachbeiträge | Foren | |
Hinterlassen Sie einen Kommentar: