AVR Mikrocontroller - Programmierung in C



Ähnliche Dokumente
CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich

Einführung in die Welt der Microcontroller

Audiospektrum- Analyse mit Mikrocontrollern


Programmierung Tiny45 für DCC Lokdecoder

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

& & & & 7, * 5-6 & +&/ ++ ( ( +2:/ " ; + &/ < ' *6 " >. &/ , "? 2 > 4 " +" 3 &/ 3 + +? +&/ +? 2 &/ ! "# $% & ' ()* # +,- -)***.

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

DIGITALVARIO. Anleitung Bootloader. Ausgabe 0.1 deutsch für Direkt-Digital-Vario. Firmware ab Hardware 01 Seriennummer ab 0003

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Stepperfocuser 2.0 mit Bootloader

Scholz (Hrsg.) / Krämer / Schollmayer / Völcker. Android-Apps. Konzeption, Programmierung und Vermarktung

Mikrocontroller Grundlagen. Markus Koch April 2011

Kreatives Gestalten mit Flash 5.0

Mikrocontroller von Markus Koch April 2011

Sensor board EB

Sobotta Atlas der Anatomie des Menschen

Der Kälteanlagenbauer

AVR Experimentierboard

Dokumentation IBIS Monitor

Elektrische Logigsystem mit Rückführung

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Pflichtenheft. Projektteam. Rexford Osei - Frey Michael Weichert Thomas Thutewohl. Pflichtenheft Seite 1 von 7

Anleitung über den Umgang mit Schildern

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Anschluss des ISP-Programmieradapters. Erste Programmierung mit Bascom

Bau und Programmieranleitung für den IR - Booster. Vorbemerkungen

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

AVR-Mikrocontroller mit dem GCC programmieren

PicKit 3. Programmierung mit dem USB-Programmer PICkit3 (Microchip) AB

easyident Türöffner easyident Türöffner Art. Nr. FS-0007 FS Fertigungsservice

ateval-board Aufbauanleitung & Handbuch

Science goes Business

Benutzung der LS-Miniscanner

Umwandelung einer Physikalischen Größe in eine Elektrische

Mikrocontroller - Schnelleinstieg

TECHNISCHE DOKUMENTATION ZUM TURBO-FREEZER XL 3 & XE 1

Ablaufsteuerung Sequenzer, als Schaltstufen für den Amateurfunk.

Hex Datei mit Atmel Studio 6 erstellen

1 Aufgaben zu Wie funktioniert ein Computer?

Waggonbeleuchtung. Stützkondensatoren

Was ist Arduino? Historie Der Kern Entwicklungsumgebung Hardware Software Und wozu das Ganze? Workshop Mikrorechner 2012 A.

Technische Informatik Basispraktikum Sommersemester 2001

Atmel AVR für Dummies

A.u.S. Spielgeräte GmbH A-1210 Wien Scheydgasse 48 Tel.+43-(0) Fax. +43-(0)

Koordinatenmesstechnik und CAX-Anwendungen in der Produktion

Arbeitshilfen Messecontrolling Wie geht denn das?

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen

Handbuch USB-Isolator

C und C++ für Embedded Systems


L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Installationsanleitung für das KKL bzw. AGV4000 Interface

Internationales Altkatholisches Laienforum

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Serielle Kommunikation mit dem Arduino. Teil 1: Das Serial Peripheral Interface (SPI)

JavaScript kinderleicht!

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Anleitung zur Durchführung des Firmware-Updates. HomePilot 1 via Upgrade-USB-Stick

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Intrinsisch motivierte Mitarbeiter als Erfolgsfaktor für das Ideenmanagement: Eine empirische Untersuchung

Einrichten einer Toolchain zur Programmierung des Nibo 2 Roboters mit Atmel Studio 6

BLIT2008-Board. Uwe Berger

Anleitung TempCW 2011

HARDWARE. Öffnung Kensington Kabelschloss 2 Umschalttasten für Templates. USB-Buchse. 16 Drehregler. 4 Tasten für Navigation und Modus-Auswahl

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Tutorial about how to use USBView.exe and Connection Optimization for VNWA.

Local Control Network Technische Dokumentation

s.beat DAP-10X White Paper USB Stromversorgung am Apple Macintosh und deren Auswirkung

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Befehlssatz zum High Speed Interface-88-USB (HSI-88-USB) (ab Firmware 0.71) (Version 1.2)

Interrupt-Programmierung

SU Egerlandstr. 24a, Moosburg 08761/4245 oder 63708, FAX Vorteile der Cartridges

690+ Bootloader Software - Upgrade -

Kontakte Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Nutzung dieser Internetseite

1. Was ihr in dieser Anleitung

XY-Plotter. Hardware. Software µp. Software PC. von Thomas Wagner

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

10. Elektrische Logiksysteme mit

Die Computerwerkstatt

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Elektronik-Lösungen. Ihre Idee wird zum Produkt. i-bl Elektronik GmbH. Telefon: +49 (0) 7520 / Fax: +49 (0) 7520 /

ATMega2560Controllerboard

ICCS SSP 10. Merkmale. Anwendungsbeispiele

Ein Vorwort, das Sie lesen müssen!

Enigmail Konfiguration

IT Sicherheitsmanagement

Serielladapter SerCon V1.1

CNC-Fräse für die Schule BLL im Schuljahr 2008/2009

Vorbereitung einer Grafik zum Druck einer Glotze aus, Stadion an! -Zaunfahne Torsten Bunde, Stand 5. Juli 2014

Basiswissen Medizinische Software

Baubericht für den AX81-GKR Einleitung

Hier ist die Anleitung zum Flashen des MTK GPS auf der APM 2.0. Prinzipiell funktioniert es auch auf der APM 2.5 und APM 1.

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

Templates für Joomla! 1.6

Transkript:

AVR Mikrocontroller - Programmierung in C Eigene Projekte selbst entwickeln und verstehen Bearbeitet von Heimo Gaicher, Patrick Gaicher 1. Auflage 2016. Taschenbuch. 368 S. Paperback ISBN 978 3 7323 5854 0 Format (B x L): 17 x 24 cm Gewicht: 697 g Weitere Fachgebiete > Technik > Elektronik > Mikroprozessoren Zu Leseprobe schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, ebooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.

Autor: Heimo Gaicher Umschlaggestaltung, Illustration: Patrick Gaicher Verlag: tredition GmbH, Hamburg ISBN: 978-3-7323-5854-0 (Paperpack) 978-3-7323-5853-3 (e-book) Printed in Germany Das Werk, einschließlich seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung ist ohne Zustimmung des Verlages und des Autors unzulässig. Dies gilt insbesondere für die elektronische, fotografische oder sonstige Vervielfältigung, Übersetzung, Verbreitung und öffentliche Zugänglichmachung. Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie. Detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Rechte & Haftung für Inhalte Die Inhalte dieses Buches wurden mit großer Sorgfalt erstellt. Für die Richtigkeit, Aktualität und Vollständigkeit der angebotenen Inhalte kann weder der Autor noch der Verlag eine Gewähr übernehmen. In keinem Fall haften Autor und Verlag für Schäden, die sich aus der Nutzung der hier bereitgestellten Informationen ergeben. Der Haftungsauschluss gilt auch für Links zu Webseiten Dritter, auf deren Inhalte weder der Autor noch der Verlag einen Einfluss haben. Weiteres distanzieren sich Autor und Verlag von rechtswidrigen Inhalten von Seiten, auf die Links gesetzt wurden. Evtl beigefügte oder zum Download angebotene Dateien, Codes und Informationen dienen nur zu Schulungszwecken. Eine gewerbliche Nutzung ist ohne die Zustimmung der entsprechenden Lizenzinhaber nicht gestattet. Firmennamen, Firmenlogos sowie Produktbezeichnungen von Hard- und Software die in diesem Buch genannt werden, sind üblicherweise auch eingetragene Warenzeichen. Webseite zum Buch Alle in diesem Buch verwendeten Codebeispiele können Sie auf der Webseite www.ne555.at im Servicebereich downloaden. Nachträgliche Änderungen werden ebenfalls auf der Webseite im Servicebereich dokumentiert. 2

Heimo Gaicher AVR-Mikrocontroller Programmieren in C für Einsteiger Vorwort Dieses Buch richtet sich an Einsteiger und Elektronik-Entwickler, die die ersten Schritte in der Programmierung von Mikrocontrollern machen. Da Mikrocontroller sehr komplexe Systeme sind, wurde in diesem Buch großen Wert darauf gelegt, den Einstieg so einfach wie möglich zu gestalten. Theoretische Teile werden daher mit vielen praktischen Beispielen unterstützt. Die Beispiele wurden im Programmcode genau dokumentiert und führen so zu einem besseren Verständnis. Das Buch ist kein Kompendium sondern eine für den Studierenden schrittweise Anleitung um Projekte besser zu verstehen und selbständig eigene Projekte entwickeln zu können. Das Buch wurde aus meiner eigenen praktischen Erfahrung mit großer Sorgfalt geschrieben. Sollten sich dennoch Fehler eingeschlichen haben, freue ich mich über entsprechende Hinweise. Anmerkungen und Kritiken sind unter info@ne555.at immer willkommen. Viel Spaß beim Programmieren! 2015 Heimo Gaicher Heimo Gaicher, Jahrgang 1969, ist bereits seit jungen Jahren leidenschaftlicher Bastler, Elektroniker und Programmierer. Berufsbegleitend absolvierte er die Werkmeisterschule für industrielle Elektronik und anschließend die Höhere Technische Bundeslehr- und Versuchsanstalt der Fachrichtung Elektronik und Technische Informatik (BULME) in Graz. In seiner Industrielaufbahn befasst er sich mit der Hard- und Softwareentwicklung für innovative Produkte aus den Bereichen der LED-Lichttechnik, der Entwicklung von Prüfumgebungen sowie der Entwicklung von Steuergeräten für Allradsysteme. 3

Inhaltsverzeichnis 1 Einführung... 10 1.1 Die AVR-Produktfamilie von ATMEL... 11 1.2 Die Entwicklungsumgebung... 12 1.3 Das Programmiergerät... 13 1.4 Das Entwicklerboard... 15 1.5 Der Mikrocontroller... 19 1.6 Der Aufbau eines Mikrocontrollers... 20 1.6.1 Rechnerarchitekturen... 22 1.6.2 Der Speicher eines Mikrocontrollers... 23 1.7 Signalpegel (Logik-Pegel)... 24 1.8 Das Taktsignal... 26 1.9 Blockschaltbild eines ATmega88... 29 1.9.1 Pinbelegung des ATmega88... 31 1.10 Compiler und Linker... 31 1.11 Vorarbeiten für das erste Projekt... 35 1.11.1 Aufbau der Hardware... 35 1.11.2 Stromversorgung des Mikrocontrollers... 37 1.11.3 Anschluss der ISP-Schnittstelle... 39 1.11.4 Aufbau der Grundschaltung... 40 1.12 Einführung in Atmel Studio 6 Das erste Projekt... 41 1.13 Wechsel in den ISP-Mode... 52 1.14 Ein Programm im ISP-Mode flashen... 53 1.15 Debuggen in Atmel Studio 6... 54 1.15.2 Breakpoints und Überprüfen von Variableninhalten... 57 1.16 Fusebits und Lockbits... 60 1.17 Das erste Programm... 65 1.18 Zahlensysteme... 67 1.19 Das binäre Zahlensystem... 67 1.20 Das hexadezimale Zahlensystem... 71 1.21 Das Hex-Format in der Mikrocontrollertechnik... 73 1.22 Analyse des Programmes Blinklicht... 74 4

1.23 Einbinden von Headerdateien... 74 1.24 Die Startfunktion main()... 75 1.25 Das Richtungsregister DDRx... 76 1.26 Schreibweisen... 79 1.27 Registerinhalte verändern... 79 1.28 Konfiguration von Pull-Up Widerständen... 82 1.28.1 Interne Pull-Up Widerstände aktivieren... 83 2 Bit-Operatoren... 84 2.1 Bitweises UND... 84 2.2 Bitweises ODER... 85 2.3 Bitweises exklusiv ODER (XOR)... 86 2.4 Bitweise Negation... 86 2.5 Maskieren von Bits... 87 2.6 Schiebeoperatoren (Links-shift / Rechts-shift)... 89 2.7 Sonderverknüpfungen von Operatoren... 91 3 Variablen und Datentypen... 92 3.1 Datentypen... 94 3.2 Variablen deklarieren und initialisieren... 95 3.3 Mit Variablen arbeiten... 95 3.4 Compileroptimierung... 97 3.5 Sichtbarkeit und Lebensdauer von Variablen... 98 3.6 Globale und lokale Variablen... 99 3.7 Statische Variablen... 101 3.8 Konstanten... 103 3.9 Symbolische Konstanten und Makros... 104 4 Kontrollstrukturen if und else-if... 106 4.1.1 Die if-anweisung... 106 4.1.2 Die if-else und else if-anweisung... 107 4.1.3 Bedingter Ausdruck?... 108 5 Funktionen... 109 5.1 Aufruf von Funktionen... 110 6 Arbeiten mit mehreren C-Dateien und H-Dateien... 114 6.1 Include Guards... 116 7 Der Watchdog... 118 5

7.1 Watchdog Blockdiagramm und Registereinstellungen... 119 8 Programmierbeispiele... 125 8.1 Programmbeispiel Lauflicht... 125 8.2 Einsatz einer for-schleife... 126 8.3 Die for-schleife im Detail... 127 8.4 Programmbeispiel Binärzähler... 128 8.5 Programmbeispiel Blinklicht ohne delay()... 128 8.6 Programmbeispiel Lauflicht knight rider... 129 9 Einlesen von Tastenzuständen... 131 9.1 Einlesen eines aktive-low Tasters... 132 9.2 Einlesen eines aktive-high Tasters... 134 9.3 Programmbeispiel speed button... 135 9.4 Einlesen eines Tasters mit internem Pull-Up Widerstand... 139 9.5 Entprellen eines Tasters... 140 9.6 Praktische Beispiele zur Tasterentprellung... 141 9.7 Tastenzustandserkennung... 143 9.7.1 Unterscheidung Taste kurz/lang... 145 10 Schalten von Lasten... 149 10.1 Schalten von Lasten mit Transistoren... 149 10.2 Schalten von Lasten mit einem Relais... 154 11 Die State Machine... 155 11.1 Programmbeispiel Ampelregelung mit einer State Machine... 155 12 Interrupts... 159 12.1 Funktionsweise einer Interruptsteuerung... 159 12.2 Welches Ereignis kann einen Interrupt auslösen?... 160 12.3 Anforderungen an eine Interrupt-Routine (ISR)... 161 12.4 Ausführung eines Interrupts mit einem Programmbeispiel... 162 12.5 Interrupt Registereinstellungen... 165 12.6 Variablen in einer ISR... 166 12.7 Pin Change Interrupt... 168 12.8 Pin Change Interrupt Beispiel... 169 13 Der ADC (Analog to Digital Converter)... 171 13.1 Elektrische Eigenschaften des ADC... 171 13.2 Funktionsprinzip eines ADC... 171 6

13.3 Messen einer Spannung mit dem ADC... 173 13.4 Das Control- und Statusregister ADCSRA... 180 13.5 Messen höherer Spannungen... 181 13.6 Temperaturmessung mit dem ADC... 184 13.7 Tastenerkennung mit dem ADC... 187 13.8 Tastenentprellung mit dem ADC... 193 14 Der Analog Comparator... 195 14.1 Registerbeschreibung... 196 14.2 Eingänge des Analog Comparators... 198 14.2.1 Der AC als Dämmerungsschalter... 198 15 Der EEPROM... 200 15.1 EEPROM-Daten schreiben und lesen... 202 15.1.1 EEPROM-Daten mit Atmel Studio 6 auslesen... 203 15.1.2 Schreiben und Lesen von Blöcken... 205 15.1.3 Schreiben und Lesen von Gleitpunktzahlen... 207 15.1.4 EEMEM... 207 15.1.5 EEPROM Register... 208 15.1.6 EEPROM Registerfunktionen anwenden... 211 16 Der 8-Bit Timer/Counter... 212 16.1 Der Prescaler... 213 16.2 Der 8bit Timer (Timer 0)... 214 16.2.1 Der 8bit Timer im Normal Mode... 215 16.2.2 Registereinstellungen im Normal Mode... 216 16.2.3 Eine LED im Sekundentakt blinken lassen... 218 16.2.4 Programmbeispiel Nachtriggerbares Monoflop... 220 16.2.5 Ansteuerung eines Servos... 222 16.2.6 Die Stromversorgung eines Servos... 223 16.2.7 Servotest... 224 16.2.8 Servoposition per Taster steuern... 225 17 Porterweiterung mit Schieberegistern... 227 17.1 Serielle Ausgabe mit Schieberegister... 229 17.2 Schieberegister per SPI ansteuern... 233 17.3 Kaskadierung von Schieberegistern... 234 17.4 8-Kanal Lauflicht mit Schieberegister... 235 7

18 Der 16-Bit Timer/Counter... 237 18.1 Die Register des 16bit Timers (Timer 1)... 237 18.2 Die Betriebsarten des 16bit Timers... 239 18.3 Der 16bit Timer im Normal Mode... 240 18.3.1 Einen 1kHz Takt im Normal Mode erzeugen... 240 18.4 CTC-Modus (Clear Timer on Compare Match)... 244 18.4.1 Eine LED im Sekundentakt im CTC Mode blinken lassen... 245 18.5 OCR-Modus (Output Compare Mode)... 246 18.5.1 Erzeugen eines 100Hz Taktes am OCnx-Pin... 248 18.6 PWM-Mode (Pulsweitenmodulation)... 251 18.6.1 Erzeugen eines Fast-PWM-Signals... 254 18.6.2 Erzeugen eines exakten 1kHz PWM-Signals... 257 18.6.3 Phasenkorrekte PWM... 260 18.6.4 Eine LED in phasenkorrekter PWM dimmen... 262 18.6.5 Phasen- und Frequenzkorrekte PWM... 265 19 LED-Fading... 266 19.1 LED mit einem Taster dimmen... 271 20 SPI Schnittstelle (Serial Peripheral Interface)... 273 20.1 SPI Registereinstellungen... 278 20.2 SPI Daten senden... 280 20.3 SPI Daten empfangen... 282 20.4 SPI - Kommunikation mit einem 16 Mbit Flash-Speicher... 285 21 Die USI-Schnittstelle... 299 21.1 USI Registereinstellungen... 300 21.2 SPI mit der USI-Schnittstelle programmieren... 302 22 Die UART / USART-Schnittstelle... 304 22.1 Ein Zeichen vom PC an die USART-Schnittstelle senden... 305 22.2 USART Konfiguration und Registereinstellungen... 308 22.3 USART Ein Zeichen per Rx-Interrupt empfangen... 315 22.4 USART Asynchrone Übertragung (Abtastung)... 316 23 Die I 2 C-Schnittstelle (TWI-Schnittstelle)... 317 23.1 Prinzip der I²C - Datenübertragung... 317 23.2 Datenübertragung von einem Master zu einem Slave... 319 23.3 Datenübertragung von einem Slave zu einem Master... 319 8

23.4 Bitübertragung... 320 23.5 Start- und Stopbedingung... 321 23.6 Repeated Start... 321 23.7 Adressierung eines Slaves... 322 23.8 7-Bit Adressierung... 322 23.9 Reservierte Adressen und 10-Bit Adressierung... 323 23.10 Programmierung einer I²C Datenübertragung... 324 23.11 I²C Beispielprojekt Temperaturmessung mit dem LM75... 325 23.12 I²C Beispielprojekt Lichtmessung mit dem ISL29020... 330 24 Ansteuerung einer 7-Segmentanzeige im Multiplexbetrieb... 336 25 Ansteuerung eines LC-Displays... 340 25.1 Programmierung der LCD-Routinen... 347 26 Zufallszahlen mit rand() erzeugen... 355 27 LED Punktmatrix Display ansteuern... 356 28 Anhang... 359 28.1 Nützliche Links... 359 28.2 ASCII-Tabelle... 360 28.3 Stichwortverzeichnis... 361 9

1 Einführung Gewöhnlich wird in der Literatur zur Mikrocontrollertechnik der Mikrocontroller als Baustein selbst eingehend und ausführlich beschrieben. Die Funktionsweise von Registern, Speicher, Rechenwerk, Schnittstellen usw. wird in Form von Blockdiagrammen auf vielen Seiten dargestellt bevor eine einzige Programmzeile geschrieben wird um beispielsweise eine LED blinken zu lassen. Die Erfahrung zeigt aber, dass diese Vorgehensweise für den Einsteiger nur sehr schwer zu verstehen ist, da der praktische Bezug am Anfang fehlt. In diesem Buch steht die praktische Anwendung im Vordergrund. Alle Projekte werden schrittweise entwickelt um das Verständnis zu fördern und dem Lernenden das nötige Know-how zu vermitteln um selbständig eigene Projekte realisieren zu können. Dennoch sind gewisse Grundlagen nötig und werden teilweise auch vorweg genommen. Vermutlich werden Sie am Anfang einige Dinge auch noch nicht verstehen. Arbeiten Sie das Buch aber trotzdem weiter durch, denn vieles erklärt sich in weiterer Folge von selbst. Der Markt für Mikrocontroller hat sich im Laufe der letzten Jahrzehnte ständig erweitert und führte so zu einer schier unüberschaubaren Vielzahl von Mikrocontrollertypen verschiedener Hersteller. Bekannte Controller sind z.b. der 8051 von Intel und der 80C535 von Infineon welche heute aber kaum mehr im Einsatz sind und auch nicht mehr produziert werden. Aktuelle Vertreter sind z.b. die Mikrocontroller MSP12- oder MSP430-Serie von Texas Instruments, die Mikrocontrollerfamilien PIC10, PIC12, PIC16 und PIC18 von Microchip und die ATMEL-AVR-Produktfamilie. Vor allem die ATMEL-AVR-Controller haben sich im Hobbybereich durchgesetzt. Diese Controller sind aber auch in vielen industriellen Anwendungen zu finden, da sie ein sehr interessantes Preis-Leistungsverhältnis aufweisen. Um den passenden Mikrocontroller für eine Anwendung auszuwählen, müssen Sie einige Dinge im Vorfeld in Betracht ziehen wie zum Beispiel: 8-, 16- oder 32Bit Mikrocontroller? Anzahl der benötigten I/O-Pins? Speichergrößen (FLASH, SRAM, EEPROM)? Energieverbrauch (Standby-Betrieb) z.b. für Batterieanwendungen? Gehäuseform (Package) DIL, QFP, SSOP, SOIC etc.? Längerfristige Verfügbarkeit des Mikrocontrollers? Preis bei größeren Stückzahlen? Preis für die notwendige Entwicklungsumgebung? 10

1.1 Die AVR-Produktfamilie von ATMEL Für alle Projekte in diesem Buch werden die AVR-Mikrocontroller ATmega88 und ATtiny44 von ATMEL verwenden. Die Controller sind preiswert, leistungsfähig und es gibt sie von klein bis groß für eine Vielzahl von Anwendungen. Vor allem ist aber auch die Entwicklungsumgebung (Das ist die Software mit der der Programmcode geschrieben wird) kostenlos. Die AVR-Serie gehört zu den 8-Bit-RISC-Prozessoren und verfügt über eine Harvard- Architektur. Der Vorteil dieser Architektur ist, dass Programm- und Datenspeicher über getrennte Busse angesteuert werden und somit auf Daten- und Programmspeicher gleichzeitig zugegriffen werden kann. Hier ein Überblick über beliebte Modelle aus der Atmel Familie: ATtiny Die ATtiny-Serie ist die kleinste und preiswerteste Serie mit wenigen Ein- und Ausgängen, einem kleinem Speicher, geringer Spannungsversorgung und sehr geringem Stromverbrauch. Diese Serie eignet sich gut für Kleinstanwendungen wo geringe Rechenpower, kleinste Abmessungen und geringer Energieverbrauch (Batterieanwendungen) gefordert sind. ATtiny4 ATtiny44 ATtiny2313 ATmega Diese Serie ist wohl die attraktivste für den Bastler und Hobbyelektroniker da sich diese Controller auch schon für etwas größere Projekte eignen. ATmega88 ATmega32 ATmega128 ATXMega Das ist die neueste Serie von 8/16-Bit AVR-Controllern. Ausgestattet mit vielen Schnittstellen und I/O-Pins, großem Speicher, hoher Taktrate gibt es diese Mikrocontroller in 44- bis 100-poligen SMD Gehäuse. Dieser Typ eignet sich für größere und komplexe Anwendungen. 11

ATXMega32 ATXMega128 Sonstige Für verschiedene Einsatzbereiche wie Automotive, Lightnig, Building Automation, Home Entertainment uvm. gibt es einige spezielle AVR-Controller wie z.b. AT90PWM316, AT90CAN128 und in der derzeit aktuellsten Variante ARM Cortex Controller. AT90PWM316 im SOIC und QFN-Gehäuse 1.2 Die Entwicklungsumgebung Für die Entwicklung einer Anwendung muss zuerst ein Programmcode in einem Editor geschrieben und in den Programmspeicher des Mikrocontrollers übertragen werden. Hierfür gibt es Software, welche nicht nur einen Editor sondern auch einen Compiler, Linker, Debugger und Simulator enthält und dadurch das Leben eines Programmierers erheblich einfacher gestaltet. Hier hat sich die Entwicklungsumgebung Atmel Studio etabliert, welche von ATMEL kostenlos zum Download angeboten wird. Atmel-Studio ist eine kostenlose Entwicklungsumgebung (abgekürzt IDE, engl. integrated development environment) für AVR- und ARM-Controller bestehend aus einem Editor, Simulator, Debugger, Assembler und GNU C-Compiler sowie einer Projektverwaltung und einigen anderen Werkzeugen. Mit dieser Entwicklungsumgebung kann der Mikrocontroller in C bzw. C++ wie auch in Assembler programmiert werden. 12

Die derzeit (Oktober 2015) aktuellste Version ist Atmel Studio 7. Alle Projekte in diesem Buch wurden aber noch mit Atmel Studio 6.2 entwickelt. Atmel Studio können Sie direkt unter http://www.atmel.com/atmelstudio herunter laden. Auch unter Linux können Sie Software für AVR-Controller entwickeln. Dafür gibt es spezielle Tools wie z.b. GNU BinUtils, AVRDUDE oder UISP. Weiterführende Informationen und Literatur finden Sie im Internet. 1.3 Das Programmiergerät Ein Programmiergerät (Programmer) ist die Schnittstelle zwischen dem Mikrocontroller (Target) und dem PC und wird benötigt um den Programmcode in den Mikrocontroller einzuspielen. Neben VCC und GND für die Stromversorgung werden zur Kommunikation vier Leitungen (/RESET, CLK, MISO, MOSI) zwischen dem Programmiergerät und dem Mikrocontroller benötigt. Auf die Bedeutung dieser Anschlüsse wird im Verlauf dieses Buches noch genauer eingegangen. AVR DRAGON Reset MISO MOSI CLK Programmiergerät Mikrocontroller Abb.1.1: Verbindung von PC, Programmiergerät und Mikrocontroller Die Ansteuerung des Programmiergerätes muss vom Atmel-Studio unterstützt werden. Damit wir also unsere am PC geschriebene Software in den Speicher des Mikrokontrollers übertragen können, benötigen wir einen ISP-Programmer. 13

ISP (In-System-Programming) bedeutet, einen Mikrocontroller oder anderen programmierbaren Baustein im eingebauten Zustand zu programmieren. Dazu muss der Mikrocontroller entsprechend verschaltet sein. Das bedeutet, die benötigten Anschlüsse am Mikrocontroller (/RESET, SCK, MISO, MOSI) müssen zugänglich sein und dürfen nicht anderweitig benutzt werden, beziehungsweise nur im zulässigen Rahmen. Wenn bei einem Mikrocontroller alternative SPI-Pins vorhanden sind, sind diese standardmäßig für die SPI-Datenübertragung eingestellt. In diesem Fall muss auch der ISP- Programmieranschluss mit den alternativen SPI-Pins MOSI_A, MISO_A, SCK_A und SS_A verbunden werden. Es gibt eine ganze Reihe verschiedener Programmiergeräte wie zum Beispiel ATMEL AVR- ISP, ATMEL AVR DRAGON, USBisp, usbprog, mysmartusb uvm. am Markt. Abb.1.2: ISP-Programmer mysmart USB light Bei der Auswahl des geeigneten Programmiergerätes sollten Sie darauf achten, dass das Programmiergerät die passende Schnittstelle zu ihrem PC (meist USB) aufweist und mit ihrer Entwicklungsumgebung kompatibel ist. Abb.1.3: Programmer AVR-ISP von ATMEL Abb.1.4: Programmer JTAG ICE 3 von ATMEL 14

Weiters sollte das Programmiergerät eines Softwareentwicklers debugging unterstützen. Ein Debugger ist ein Werkzeug zum schrittweisen Auffinden von Programmfehlern (engl. bugs). Hier hat sich zum Beispiel Atmels original AVR Dragon etabliert. Abb.1.5: AVR-Dragon Programmer von ATMEL Der AVR Dragon ist ein sehr leistungsfähiges und preiswertes Programmiergerät. Die großen Vorteile des Dragons sind, dass er alle Programmiermodi beherrscht, inklusive High- Voltage Parallel Programming ("verfuste" AVRs retten), dass er ein natives USB-Interface hat, von AVR-Studio unterstützt wird, und sogar JTAG und debugwire ICE / Debugging unterstützt (bei den AVRs die dies können). Zu den größten bekannten Nachteilen gehören, dass der Dragon ohne Gehäuse, ohne USB-Kabel und ohne Programmierkabel geliefert wird. Daneben wird aufgrund der Stromversorgung ein USB-Hub mit Netzteil empfohlen. 1.4 Das Entwicklerboard Am Markt gibt es eine Vielzahl verschiedener Entwicklerboards mit unterschiedlicher Peripherie. Bevor Sie sich aber ein fertig aufgebautes Board anschaffen, sollten Sie die ersten Projekte mit einem Steckbrett (Breadboard) aufbauen. Diese Vorgehensweise ist besonders für den Anfang sehr zu empfehlen, da ein Entwicklerboard mit seiner fertig bestückten Peripherie für den Einsteiger oft zu komplex und daher sehr verwirrend sein kann. Der Aufbau auf dem Breadboard ist rasch erledigt und Fehler können schnell korrigiert werden. Der Nachteil eines Breadboards ist, dass man bei größeren Schaltungsaufbauten schnell die Übersicht verlieren kann. Sollten Sie kein Breadboard zur Verfügung haben, können Sie die Projekte auch auf einer Lochrasterplatine aufbauen. Wenn möglich sollten Sie hier dem Mikrocontroller aber einen Sockel spendieren um ihn bei Bedarf einfach und rasch tauschen zu können. 15

Abb.1.6: Schaltungsaufbau auf dem Breadboard mit angeschlossenem AVR Dragon Eine weitere Möglichkeit ist es, sich ein Entwicklerboard selbst zu bauen. Dazu zeichnen Sie sich den Schaltplan und das Layout z.b. mit dem CAD-Programm EAGLE und lassen die Platine von einem Anbieter für Leiterplatten fertigen. Wenn Sie etwas Erfahrung mit dem Ätzen von Platinen haben, können Sie die Leiterplatte natürlich auch selbst fertigen. Hier sollten Sie darauf achten, dass das Gehäuse des Mikrocontrollers nicht zu klein ist, damit Sie den Controller noch per Hand auflöten können. Die folgende Abbildung zeigt ein selbst entworfenes Board mit einem AT90PWM316, 4 Tastern, 8 LEDs, einer RGB-LED, einem 6-poligen Programmierstecker und einem 3,3V Linearregler für die Stromversorgung. Alle Pins des Mikrocontrollers wurden hier auf Buchsenleisten ausgeführt. Damit können Sie ganz einfach und schnell eine Schaltung mit Drahtbrücken aufbauen. So ein Board können Sie natürlich auch auf einer Lochrasterplatine mit bedrahteten Bauteilen aufbauen. 16

Abb.1.7: Entwicklerboard im Eigenentwurf mit einem AT90PWM316-Controller Sollten Sie sich für den Kauf eines Entwicklerboards entscheiden, gibt es eine Vielzahl an Angeboten. Ein paar Boards werden hier kurz vorgestellt. myavr Board MK2 / MK3 Das myavr Board MK2 ist ein modernes Entwicklerboard mit USB-Anschluss für ATMEL Mikrocontroller (ATmega8 / 48 / 88 / 168 / 328) und ist ausgestattet mit Taster, Potis, Temperatursensor usw. Die Programmierung und Kommunikation erfolgt über das USB- Interface. Das myavr Board MK3 ist ein sehr leistungsfähiges Entwicklerboard und verfügt über zahlreiche Hardware-Komponenten und Anschlussmöglichkeiten. Abb.1.8: myavr Board MK2 Abb.1.9: myavr Board MK3 17

AT-Mini Board Das AT-MINI Board von Mikro Elektronika ist ein sehr kleines Entwicklerboard speziell für den ATmega328. Das Board gibt es in einer 3,3V- und einer 5V Version und wird mit einem Bootloader vorprogrammiert ausgeliefert. Die Controllerpins sind auf Stiftleisten im DIP 28-pin Format ausgeführt. Abb.1.10: AT-Mini board von Mikro Elektronika AT-Mini features: ATmega328 Controller mit 32K Flash und 2K RAM Vorprogrammierter AVRdude Bootloader USB-UART on board (FTDI) 8Mhz Oszillator (3.3V Version), 16MHz Oszillator (5V Version) AVR ATxmega256A3BU microcontroller board Abb.1.11: XMEGA-A3BU Xplained evaluation kit 18

Das XMEGA-A3BU Xplained Board beinhaltet neben dem ATXMega256A3BU Mikrocontroller noch einen QTouch button sensor, 3 Taster, 2 LEDs, 3 analoge Sensoren, ein USB Port, ein battery backup system und ein 128x32 pixel FSTN LC-Display. Über die ausgeführten Stiftleisten ist ein einfacher Zugriff auf die I/O Pins des Mikrocontrollers gewährleistet. Das Board wird über ein USB Kabel direkt an den PC (ein USB-Hub mit externer Stromversorgung wird unbedingt empfohlen) angeschlossen. Das Board kann über den bereits aufgespielten Bootloader oder mit einem externen Programmiergerät (z.b. AVR Dragon) über die ausgeführte 10-Pin JTAG-Schnittstelle programmiert werden. Eine Übersicht zu den verschiedenen Entwicklerboards (Atmel Xplaind Boards) finden Sie u.a. auch direkt auf der Webseite von Atmel. 1.5 Der Mikrocontroller Zum Unterschied eines Mikroprozessors besteht ein Mikrocontroller nicht nur aus einem Prozessorkern sondern aus einer Vielzahl an Komponenten wie zum Beispiel SRAM, EEPROM, Timer / Counter, DAC- und ADC, Interrupt Controller, USB-Interface, UART- Interface, SPI-Interface uvm. Der Prozessor (Core) ist nur das Herzstück eines Mikrocontrollers und beinhaltet die Recheneinheit. Je nachdem wie viele Bit ein Mikrocontroller mit einem Rechenschritt auf einmal verarbeiten kann, spricht man von einem 8-, 16-, oder 32-Bit Mikrocontroller. Jeder Rechenschritt eines Mikrocontrollers wird mit einem Taktimpuls eingeleitet. Dieser Takt wird von einer externen (externer Quarz / Oszillator) oder internen (interner Oszillator) Taktquelle generiert und bestimmt zu einem Großteil die Geschwindigkeit mit der ein Mikrocontroller eine Rechenoperation ausführt. Ein Mikrocontroller verarbeitet ausschließlich Daten in digitaler Form, welche aus Nullen und Einsen bestehen. Ein 8-Bit Controller kann zum Beispiel mit einem Takt eine Folge von 8 Bits (z.b. 10011101) verarbeiten. Bei einer Taktfrequenz von 8MHz (8 Millionen Taktimpulse pro Sekunde) kann der Mikrocontroller demnach einen vorliegenden 8-Bit Datensatz 8 Millionen Mal pro Sekunde verarbeiten. 1 Ein 32-Bit Mikrocontroller könnte hier einen Datensatz mit einer Breite von 32-Bit 8 Millionen Mal pro Sekunde verarbeiten. 1 1 Da nicht jeder Befehl in einem einzigen Taktzyklus ausgeführt wird (einige Befehle können bis zu 4 Taktzyklen in Anspruch nehmen) ist diese Rechnung nur eine grobe Schätzung und soll auch nur zum Grundverständnis zur Funktionsweise eines Mikrocontrollers beitragen. 32-Bit Mikrocontroller können zwar die vierfache Datenmenge gleichzeitig verarbeiten, sind aber bei gleichem Takt aufgrund verschiedener Faktoren nicht viermal so schnell wie ein 8-Bit Mikrocontroller. 19

1.6 Der Aufbau eines Mikrocontrollers Den genauen Aufbau eines Mikrocontrollers zu beschreiben kann Bücher füllen! Das soll hier aber vermieden werden, denn wir wollen ja rasch an die praktische Umsetzung und Anwendung eines Mikrocontrollers kommen. Dennoch sind ein paar Grundkenntnisse über den Aufbau erforderlich. Der Rest wird schrittweise im Zuge der Programmierung erklärt. Heißt es nun Mikroprozessor oder Mikrocontroller? Ein Mikroprozessor besteht aus einer zentralen Prozess-Einheit CPU. Diese CPU ist über ein Bussystem (das sind Leitungen z.b. 8 parallele Leitungen bei 8 Bit) mit anderen Baugruppen (z.b. RAM, ROM, serielle und parallele Ports) verbunden. Ein Mikrocontroller hingegen beinhaltet bereits auf einem Chip die CPU, RAM-Speicher, ROM-Speicher sowie parallele und serielle Ein- und Ausgabeports. Abb.1.12: Aufbau eines Bussystems mit verschiedenen Baugruppen Das Bussystem, über welches die CPU mit den angeschlossenen Baugruppen kommuniziert besteht aus dem Datenbus (z.b. 8 Bit) Adressbus (z.b. 16 Bit) Steuerbus Abb.1.13: CPU Buszugriff 20