Mikrocontroller
Herbert Bernstein Mikrocontroller Grundlagen der Hard- und Software der Mikrocontroller ATtiny2313, ATtiny26 und ATmega32
Herbert Bernstein München, Deutschland ISBN 978-3-658-02812-1 DOI 10.1007/978-3-658-02813-8 ISBN 978-3-658-02813-8 (ebook) Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Springer Vieweg Springer Fachmedien Wiesbaden 2015 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht ausdrücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Springer Vieweg ist eine Marke von Springer DE. Springer DE ist Teil der Fachverlagsgruppe Springer Science+Business Media www.springer-vieweg.de (www.springer.com)
Vorwort ATMEL hat mehrere leistungsfähige 8-Bit- und 32-Bit-Mikrocontroller in seinem Programm. Für den Unterricht und für das Buch wurden die drei Mikrocontroller ATtiny2313, ATtiny26 und ATmega32 verwendet. Die drei Mikrocontroller verwenden für die Speicherung des Programms einen 2-Kbyte-Flash-Speicher, der über eine In-System-Programmierung (3-Draht-ISP-Schnittstelle) programmiert wird. Die Programmierung übernehmen diese Bausteine selbständig durch eine interne High-Voltage- Programmierung. Mit dem bekannten digitalen 8-Bit-Mikrocontroller ATtiny2313, einem Industriestandard in einem praktischen 20-poligen DIL-Gehäuse, steht für den Elektroniker ein kostengünstiger Mikrocontroller zur Verfügung. Mit diesem Baustein lassen sich zahlreiche Aufgaben aus dem Bereich der Hobbyelektronik und aus der Praxis lösen. Der analoge 8-Bit-Mikrocontroller ATtiny26, ebenfalls ein Industriestandard in einem praktischen 20-poligen DIL-Gehäuse, hat mehrere 10-Bit-AD-Wandler zur Verfügung. Mit dem AD-Wandler lassen sich zahlreiche Versuche durchführen. Der große 8-Bit-Mikrocontroller ATmega32 ist ebenfalls ein Industriestandard in einem praktischen 40-poligen DIL-Gehäuse und hat mehrere 10-Bit-AD-Wandler zur Verfügung. Mit dem AD-Wandler lassen sich zahlreiche Versuche durchführen. Die Versuche mit dem ATtiny2313, ATtiny26 und ATmega32 sind einfach auf einer Lochrasterplatine oder im Steckgehäuse aufgebaut, man benötigt für die einzelnen Aufbauten etwa eine Stunde an Lötzeit. Die Bauelemente erhalten Sie im Versandhandel. Die Versuche werden alle im AVR-Assembler programmiert. Entwickler, Studenten und Schüler können auf komfortable Weise die ATMEL-Software für Ihre Anwendungen auf dem PC implementieren und testen. Die sehr leistungsfähige Entwicklungsumgebung mit der Bezeichnung AVR-Studio bündelt alle benötigten Funktionen vom Assembler bis zum Simulator. Wie bekommt man nun das Programm in Assemblersprache in den Mikrocontroller? Man muss es übersetzen, entweder in Hexadezimal- oder in Binärzahlen. Vor 20 Jahren musste man ein Programm in Assemblersprachen manuell übersetzen, Befehl für Befehl, und dies bezeichnete man als Hand-Assemblierung. Wie im Falle der Umwandlung hexadezimal in binär ist die Hand-Assemblierung eine Routine-Aufgabe, die uninteressant, sich wiederholend und anfällig für zahllose kleine Irrtümer ist. Verwenden der falschen V
VI Vorwort Zeile, Vertauschen von Ziffern, Auslassen von Befehlenund falsches Lesen dercodessind nur einige der Fehler, die einem unterlaufen können. Die meisten Mikrocontroller machten früher die Aufgaben noch komplizierter, indem sie verschiedene Befehle mit unterschiedlichen Wortlängen verwendeten. Manche Befehle sind nur ein Wort lang, während andere eine Länge von zwei oder drei Worten besitzen. Einige Befehle benötigen Daten im zweiten und dritten Wort, andere benötigen Speicheradressen, Registernummern oder andere Informationen. Assembler besitzen eigene Regeln, die man erlernen muss. Diese enthalten die Verwendung bestimmter Markierungen oder Kennzeichen (wie Zwischenräume, Kommata, Strichpunkte oder Doppelpunkte) an den entsprechenden Stellen, korrekte Aussprache, die richtige Steuer-Information und vielleicht auch die ordnungsgemäße Platzierung von Namen und Zahlen. Diese Regeln stellen nur ein kleines Hindernis dar, das man leicht überwinden kann. Ferner muss man beim Programmieren in Assemblersprache eine sehr detaillierte Kenntnis des verwendeten Mikrocontrollers besitzen. Man muss wissen, welche Register und Befehle der Mikrocontroller hat, wie die Befehle die verschiedenen Register genau beeinflussen, welche Adressierverfahren der Mikrocontroller verwendet und eine Unmenge weiterer Informationen. Keine dieser Informationen ist für die Aufgabe, die der Mikrocontroller letztlich ausführen muss, relevant. Ich bedanke mich bei meinen Studenten für die vielen Fragen, die viel zu einer besonders eingehenden Darstellung wichtiger und schwieriger Fragen beigetragen haben. Meiner Frau Brigitte danke ich für die Erstellung der Zeichnungen. Die E-Mail-Adresse des Autors lautet Bernstein-Herbert@t-online.de. München, im Februar 2015 Herbert Bernstein
Inhaltsverzeichnis 1 Grundlagen der Mikrocontroller... 1 1.1 Mikrocontroller-Familie ATtiny2313, ATtiny26 und ATmega32... 6 1.1.1 Merkmale des ATtiny2313, ATtiny26 und ATmega32... 8 1.1.2 Pinbelegung des ATtiny2313, ATtiny26 und ATmega32... 14 1.1.3 ALU (Arithmetik- und Logikeinheit)... 16 1.2 Register im Mikrocontroller... 21 1.2.1 I/O-Register im I/O-Adressraum... 23 1.2.2 I/O-Ports als digitale Ein- und Ausgänge... 24 1.2.3 Konfiguration der Anschlüsse... 26 1.2.4 Konfiguration der Pins... 26 1.2.5 Lesen der Pinzustände... 28 1.2.6 Unbenutzte Pins... 29 1.2.7 Alternative Port-Funktionen... 29 1.2.8 SFIOR-Register... 32 1.2.9 Alternative Funktionen von Port B... 32 1.2.10 Alternative Funktionen von Port C... 34 1.2.11 Alternative Funktionen von Port D... 36 1.2.12 Beschreibung der Register der I/O-Ports... 37 1.3 Statusregister... 39 1.4 Programmzähler (program counter)... 42 1.5 Stapel (Stack)... 43 1.6 Rücksetzen (Reset)... 44 1.7 Zeitgeber und Zähler (Timer und Counter)... 45 1.7.1 8-Bit-Timer/Counter 0... 46 1.7.2 Timer/Counter Interrupt-Mask-Register (TIMSK)... 46 1.7.3 Timer/Counter Interrupt-Flag-Register (TIFR)... 46 1.8 Peripherie... 47 1.8.1 I/O-Ports... 48 1.8.2 Synchrone serielle Schnittstelle (SPI)... 53 1.8.3 Asynchrone serielle Schnittstelle (USART)... 59 1.8.4 Analogkomparator... 62 VII
VIII Inhaltsverzeichnis 1.8.5 Watchdog-Timer... 64 1.8.6 Interrupthandling... 67 1.9 Speichereinheiten... 75 1.9.1 Programmspeicher (Flash)... 75 1.9.2 Datenspeicher (SRAM)... 76 1.9.3 EEPROM-Speicher... 78 1.9.4 I/O-Speicher... 82 2 Hard- und Software für die Entwicklungsumgebung... 83 2.1 Entwicklungsumgebung... 85 2.1.1 Editor... 85 2.1.2 Cross-Assembler und Linker... 88 2.1.3 Emulatoren und Debug-Stationen... 91 2.2 Arbeiten und Erstellung für Programme mit AVR-Studio 4... 94 2.2.1 Fenster des AVR-Studio 4... 97 2.2.2 Programmentwicklung...103 2.2.3 Programm erstellen (Build)...105 2.2.4 Programm testen (Debugging)...105 2.2.5 In-Circuit-Emulator (ICE) und In-System-Programmierung (ISP)...106 2.3 Simulator...111 2.3.1 Unterbrechungspunkte (Breakpoints)...112 2.3.2 Variablenwerte von Register und Prozessor ausgeben...112 2.4 Programmieren des Mikrocontrollers...113 3 Befehle der ATMEL-AVR-Mikrocontroller-Familie...121 3.1 Arithmetische und logische Befehle...121 3.2 Logische Befehle...124 3.3 Sprungbefehle...125 3.4 Vergleichsbefehle...133 3.5 Unbedingte Sprungbefehle...134 3.6 Unterprogrammaufrufe...134 3.7 Datentransferbefehle...135 3.8 Bitmanipulationsbefehle...137 3.9 Löschbefehle...140 3.10 Schiebebefehle...142 3.11 Sonstige Befehle...143 3.12 Befehlsverzeichnis in alphabetischer Reihenfolge...144 3.13 Befehle in Assembler...147 3.14 Ports für die AVR-Mikrocontroller...150 3.15 Assemblerdirektiven für die AVR-Mikrocontroller...151
Inhaltsverzeichnis IX 3.16 Befehle und Adressierung...151 3.16.1 Datentransferbefehle (Datentransportbefehle)...152 3.16.2 Arithmetische und logische Operationen (Befehle)...155 3.16.3 Bitorientierte Befehle...155 3.16.4 Sprungbefehle (jump), Verzweigungsbefehle (branch) und Unterprogrammbefehle (call)...155 3.16.5 Sonstige Befehle...156 3.16.6 Zustands- oder Statusregister SREG...156 3.16.7 Adressierungsarten...158 3.16.8 Direkte Adressierung der SF-Register (Sonderfunktions-Register)...161 3.16.9 Direkte Adressierung des Datenspeichers (SRAM)...161 3.16.10 Indirekte Adressierung...162 3.16.11 Indirekte Adressierung mit automatischem Erhöhen bzw. Verringern des Adresszeigers...163 3.16.12 Indirekte Adressierung mit konstantem Abstand...164 3.16.13 Indirekte Adressierung mit PUSH und POP...166 3.16.14 Adressierung des Programmbereichs...166 3.16.15 Direkte Adressierung von Konstanten im Programmspeicher mit lpm...167 4 Programmierung in Assembler...171 4.1 Programm für den Mikrocontroller...171 4.1.1 Probleme des Programmierens...172 4.1.2 Assemblerprogramm...174 4.1.3 Eigenschaften von Assemblern...175 4.1.4 Nachteile der Assemblersprache...176 4.1.5 Höhere Programmiersprachen...178 4.1.6 Vorteile von höheren Programmiersprachen...180 4.1.7 Nachteile von höheren Programmiersprachen...181 4.1.8 Höhere Sprachen für Mikroprozessoren und Mikrocontroller..183 4.2 Assembler...186 4.2.1 Eigenschaften von Assemblern...186 4.2.2 Marken (Labels)...187 4.2.3 Assembler-Mnemoniks...189 4.2.4 Pseudooperationen...190 4.2.5 Pseudooperation EQUATE (oder DEFINE)...192 4.2.6 Pseudooperation ORIGIN...193 4.2.7 Reserve-Pseudooperation...194 4.2.8 Adressen und Operandenfeld...196 4.2.9 Bedingte Assemblierung...198
X Inhaltsverzeichnis 4.2.10 Makros...199 4.2.11 Kommentare...200 4.2.12 Typen von Assemblern...201 4.2.13 Fehler...202 4.2.14 Lader...203 5 8-Bit-Mikrocontroller ATtiny2313 für digitale Anwendungen...205 5.1 Merkmale des Mikrocontrollers ATtiny2313...205 5.1.1 Anschlüsse des Mikrocontrollers ATtiny2313...206 5.1.2 Interner Aufbau des Mikrocontrollers ATtiny2313...209 5.1.3 Programmierkopf des Mikrocontrollers ATtiny2313...210 5.1.4 Ein- und Ausgänge des ATtiny2313...215 5.1.5 Programmierung des ATtiny2313...219 5.1.6 Registerüberprüfung...222 5.2 ATtiny2313 mit Speicherverhalten...224 5.3 ATtiny2313 als Rechteckgenerator...227 5.4 Steuerbarer Blinker...243 5.5 Einschaltverzögerung...245 5.6 Ein- und Ausschaltverzögerung...249 5.7 Logische Verknüpfung zwischen zwei Tasten...250 5.8 RS-Flipflop...252 5.9 Steuerbarer Blinker...253 5.10 PWM-Helligkeitssteuerung einer Leuchtdiode...254 5.11 Steuerung einer Fußgängerampel...264 5.12 Ampelsteuerung für Nebenstraße...268 5.13 Hexadezimaler Zähler mit 7-Segment-Anzeige...271 5.14 Elektronischer Würfel mit 7-Segment-Anzeige...275 5.15 Garagenzähler mit neun Stellplätzen...276 5.16 Lottomat mit 2-stelliger 7-Segment-Anzeige...278 6 Hard- und Software für den ATtiny26...283 6.1 Interner AD-Wandler...286 6.1.1 Sukzessive Approximation...286 6.1.2 Starten einer Umsetzung...291 6.1.3 Wechsel der Kanäle und Referenzspannung...294 6.1.4 Störungsunterdrückung...297 6.1.5 Schaltung der Analogeingänge...298 6.1.6 Definitionen der ADC-Genauigkeit...300 6.1.7 Register für den AD-Wandler...302 6.2 Bau und Programmierung eines digitalen TTL-Messkopfes...306 6.3 Programmierung eines digitalen Thermometers von 0 C bis 99 C...313
Inhaltsverzeichnis XI 6.4 Programmierung eines dreistelligen Voltmeters von 0 V bis 2,55 V...322 6.5 Differenzmessung von Spannungen im 10-mV-Bereich...325 6.6 Messungen und Anzeigen von zwei Spannungen...329 7 Hard- und Software für den ATmega32...333 7.1 Interner Aufbau...334 7.1.1 Ein- und Ausschaltverzögerung...337 7.1.2 Stackpointer im Mikrocontroller...342 7.2 Ansteuerung der LCD-Anzeige...347 7.2.1 Ansteuerung der LCD-Anzeige im 4-Bit-Format...356 7.2.2 Zweistellige Darstellung der LCD-Anzeige...362 7.3 8-Bit-DA-Wandler MAX505 mit vier Ausgängen...364 7.3.1 Analoge Signalverarbeitung...364 7.3.2 Bewertungsnetzwerk...367 7.3.3 Eigenschaften des MAX505...369 7.3.4 MAX505 am ATmega32...370 7.3.5 Sinusgenerator mit dem MAX505...379 7.4 Hard- und Software für ein Platinensystem mit dem Mikrocontroller ATmega32...383 7.4.1 Mikrocontroller ATmega32...385 7.4.2 Abfrage der Tastatur...388 7.4.3 Ansteuerung der Leuchtdioden...390 7.4.4 Lauflicht...394 7.4.5 Ansteuerung der Tastatur...396 7.5 Programmierbarer Schnittstellenbaustein 8255...402 7.5.1 Betriebsarten des 8255...405 7.5.2 Ausgabebetrieb des 8255...408 7.5.3 Eingabebetrieb des 8255...413 7.5.4 Ein-Ausgabebetrieb des 8255...416 7.5.5 Elektronischer Würfel...418 7.5.6 TTL-Logiktester...420 7.5.7 Vier-Kanal-Logiktester...424 7.5.8 Einstufiger Vor-/Rückwärtszähler...425 7.5.9 Zweistufiger Vor-/Rückwärtszähler...430 7.5.10 Zweistelliges Betriebsvoltmeter...432 7.5.11 Ansteuerung einer zehnstelligen Baranzeige...434 7.6 ATmega32 mit der LCD-Anzeige...440 7.6.1 Voltmeter mit vier Messkanälen...444 7.6.2 Anzeige eines kombinierten Volt- und Amperemeters...450 7.6.3 Sägezahngenerator...458 7.6.4 Programm zur Berechnung einer Sinusfunktion...460
XII Inhaltsverzeichnis 7.7 Mikrocontroller ATmega32 mit Quarz...467 7.7.1 ATmega32 mit Quarzoszillator...469 7.7.2 ATmega32 mit externem RC-Oszillator...471 7.7.3 ATmega32 mit internem RC-Oszillator...472 7.7.4 ATmega32 mit externem Taktgenerator...473 Sachverzeichnis...477