Vorwort und »Gebrauchsanweisung«
Ein gutes Kochbuch erkennt man an zwei Dingen: Zum einen verfügt es über einen allgemeinen Teil, der nützliche grundlegende Tipps und Anweisungen rund ums Kochen enthält, ohne deren Kenntnis das tollste Rezept nicht gelingt. Darunter fallen beispielsweise die korrekte Zubereitung der verschiedenen Fleischsorten, die Lagerung von Gemüse oder einige einfache Saucen. Zum anderen sollen die Rezepte selbst von einer Qualität sein, die es erlaubt, aus möglichst einfachen Zutaten ohne großen Aufwand ein möglichst schmackhaftes Ergebnis zu zaubern. Idealerweise gefolgt von möglichen Variationen, falls eine Zutat gerade nicht zur Hand ist.
Die Grundlagen sind zwar vielleicht für erfahrene Hobbyköche eher uninteressant. Aber wenn sie nicht vorhanden sind – und der eine oder andere Hinweis ist mit an Sicherheit grenzender Wahrscheinlichkeit für jemanden neu – so können neue Versuche an Kleinigkeiten scheitern und rasch macht sich Frustration breit.
Nach dieser Logik haben wir den ersten Teil des Buches gestaltet. Die Grundlagen sollen eine gemeinsame Basis schaffen und Einsteigern Konzepte vermitteln, auf denen alles Weitere aufbaut. Auf diese folgen einfache Anwendungen, in welchen die Umsetzung der theoretischen Konzepte an einfachen praktischen Beispielen demonstriert wird.
Den Einstieg bilden also Mikrocontroller-Grundlegenden (Kapitel 1), gefolgt von Allgemeinem zur Programmierung und Implementierung (Kapitel 2), von Bitoperationen bis zu einfachen Codegerüsten, die den Brückenschlag zwischen den theoretischen Grundlagen und der realen Umsetzung bilden sollen. Letzteres geht auf Erste Schritte (Kapitel 2.5) mit einem Mikrocontroller ein, den Allgemeinen Programmaufbau (Kapitel 2.6) sowie detailliert auf die allgemeine Implementierung der einzelnen Peripherieeinheiten und Grundbausteine (Kapitel 2.7).
Schließlich kommen wir zu den eigentlichen »Rezepten« (Kapitel 3 bis 12), anhand derer wir unsere Mikrocontroller-»Süppchen« nach Lust und Laune kochen können. Hier finden sich Beispiele zum Schalten von LEDs und anderen Lasten, zur Messung verschiedener Größen (Strom, Spannung, Kapazität, Temperatur, Frequenz, ...), zum Erzeugen von Signalen oder zur Kommunikation über diverse Schnittstellen – um einige zu nennen.
Wir haben versucht, eventuell auftretende Unklarheiten an Ort und Stelle etwa durch angeführte Beispiele im Text zu beseitigen. Für den Fall, dass trotzdem welche auftreten, bildet ein Anhang mit verschiedenen Hinweisen und Tabellen den Abschluss (Kapitel 13).
Die Autoren möchten sich bei all jenen bedanken, die bei der Entstehung dieses Buches mitgewirkt und es dadurch erst ermöglicht haben.
Abschließend bleibt uns nur noch, dem Leser viel Freude und Erfolg auf dem spannenden Gebiet der Mikrocontrollerprogrammierung zu wünschen, und wir hoffen, mit diesem Buch dazu beizutragen.
Sicherheitshinweis:
Unfälle mit Strom können schmerzhaft oder sogar tödlich sein, daher ist besondere Vorsicht geboten. Bestehende Normen und Sicherheitsrichtlinien zum Umgang mit dem elektrischen Strom sind unbedingt zu konsultieren und zu beachten, folgende Hinweise gelten nur als Richtlinie.
Niedrige Spannungen unter 25 V Wechselspannung beziehungsweise 60 V Gleichspannung gelten als ungefährlich. Unter außerordentlichen Bedingungen kann aber auch eine geringe Wechselspannung unter Anderem den Herzrhythmus stören. Vor allem Mischspannungen (Gleichstrom mit Wechselstromanteil) sind gefährlich.
Zudem gelten viele in der Elektronik eingesetzte Chemikalien als gesundheitsschädigend, insbesondere Blei und Kadmium in Lötzinn. Daher sind diesbezüglich ebenfalls Vorsichtsmaßnahmen zu treffen.
Atmel®, Atmel logo and combinations thereof, AVR®, PicoPower® and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries.
Einführung
Mikrocontroller können als kleine Computer verstanden werden, die im Gegensatz zu ihren großen Verwandten gezielt für spezielle, mehr oder weniger komplexe Aufgaben eingesetzt werden. Sie bilden den Kern von vielen Eingebetteten Systemen (Embedded Systems), welche für die Funktion der meisten modernen elektronischen und mechatronischen Systeme verantwortlich sind, die inzwischen so selbstverständlich zum alltäglichen Leben gehören.
Die möglichen Einsatzszenarien sind so vielseitig, dass es womöglich einfacher wäre, jene modernen technischen Geräte herauszupicken, in denen ausnahmsweise kein Mikrocontroller steckt.1 Von MP3-Playern und Handys über Haushaltsgeräte und Kraftfahrzeugkomponenten bis hin zu Kraftwerken und Industrie-Großanlagen – Mikrocontroller übernehmen eine kaum überschaubare Vielzahl unterschiedlichster Aufgaben. Allein in einem modernen Personenkraftwagen können über 100 Mikrocontroller verbaut sein.
Ein Mikrocontroller ist insofern mit einem Personal Computer vergleichbar, als er aus ähnlichen Komponenten aufgebaut ist: Ein Prozessor bildet sein Herzstück, es gibt einen Arbeits- und einen dauerhaften Programmspeicher sowie Zusatzperipherie wie beispielsweise Ein- und Ausgabeeinheiten. Man spricht allerdings erst von einem Mikrocontroller, wenn all diese Bausteine auf einem einzelnen Chip integriert sind.2 Im Laufe des folgenden Abschnitts Grundlegende Konzepte wird genauer auf die Bestandteile und Charakteristiken eingegangen, die für das Verständnis der Funktionsweise, der Möglichkeiten und Grenzen eines Mikrocontrollers essenziell sind.
Zur Erläuterung wurden AVR®-Mikrocontroller von Atmel® gewählt, da sie weit verbreitet und leicht erhältlich sind. Auch ist der Umgang mit ihnen einfach zu erlernen, da sie einen eleganten und vergleichsweise einfachen Aufbau haben. Die Codebeispiele wurden in der Programmiersprache C geschrieben, um dem Industriestandard gerecht zu werden. Die Grundlagen und Beispiele gelten aber auch für Mikrocontroller anderer Hersteller beziehungsweise sind, mit geringen Abweichungen, auf jene übertragbar. Gerade dieses erste Kapitel ist so ausgelegt, dass es den Leser befähigen soll, sich rasch auch in »fremde« Mikrocontroller einzuarbeiten sowie deren Besonderheiten zu erkennen.
Falls der Leser bereits einen Blick in einschlägige Internetforen geworfen hat, werden ihm womöglich die beinahe religiös anmutenden Diskussionen rund um die Frage auffallen: »Welche Mikrocontroller sind die besten?« Generell kann man diesen Punkt – wie bei den meisten ähnlich lautenden Fragen – nur beantworten mit: »Es kommt darauf an«.
Mikrocontroller werden je nach Anwendung bezüglich Architektur, Speicher und Zusatzfunktionen sowie Kosten, Leistungsverbrauch und Verfügbarkeit ausgewählt (nach Abschluss des Grundlagenkapitels wird das verständlicher). Üblicherweise hat jeder große Hersteller eine Vielzahl vergleichbarer Lösungen parat, wodurch es letztendlich nicht selten auf persönliche Präferenzen hinausläuft, ob man nun einen Mikrocontroller von Atmel®, Freescale™, Microchip, NXP, Renesas, Texas Instruments oder einem anderen »Global Player« wählt.
Dieses Buch setzt Basiskenntnisse in der Programmiersprache C voraus. Zum Erlernen sei auf entsprechende Fachbücher und Online-Tutorials verwiesen. Die Grundlagen werden jedoch auch in einem eigenen Abschnitt kurz wiederholt und um mikrocontrollerspezifische Details erweitert.
Hinweis:
Wir haben viele generell für Mikrocontrolleranwendungen wichtige Maßnahmen an der Stelle beschrieben, an der sie das erste Mal auftauchen beziehungsweise von elementarer Bedeutung sind. Das bedeutet nicht, dass sie nicht auch für andere Anwendungen zu beachten sind – wir benutzen daher viele Querverweise und haben uns bemüht, ein möglichst umfangreiches Stichwortverzeichnis zu pflegen, damit jeder Hinweis und jede Erklärung auffindbar sind.
____________________
1 Neben Mikrocontrollern gibt es beispielsweise noch ASICs, FPGAs und DSPs, welche eine vergleichbare beziehungsweise spezialisiertere Rolle übernehmen können und je nach Anwendung vorzuziehen sind.
2 Hier gibt es auch Ausnahmen, etwa ältere oder besonders leistungsstarke Mikrocontroller, bei welchen der Speicher auch extern angeschlossen werden kann. Die genannte Definition ist auch nur eine der möglichen.
Inhaltsverzeichnis
1Mikrocontroller-Grundlagen
1.1Was ist ein Mikrocontroller?
1.2Grundlegende Konzepte
1.2.1Die Prozessorarchitektur
1.2.2Gehäuse (Package)
1.2.3Datenblätter, Manuals und Errata
1.2.4Versorgungsspannung und Signalpegel
1.2.5Speicher
1.2.6Takt und Taktgenerierung
1.2.7Interrupts
1.2.8Timer (Zähler)
1.2.9Register
2Programmierung und Implementierung
2.1Allgemeines zur Programmierung
2.1.1Eigenheiten der Mikrocontrollerprogrammierung
2.1.2Schlüsselwörter
2.1.3Portierbarkeit von Code
2.1.4Codeoptimierung
2.1.5Compilereinstellungen
2.2Programmierung des Mikrocontrollers
2.2.1Programmierumgebung
2.2.2Programmieradapter
2.2.3ISP
2.2.4Fuses
2.2.5Bootloader
2.3Debugging
2.3.1Printf-Debugging
2.3.2Software-Emulator
2.3.3JTAG und DebugWIRE
2.3.4Hardware-Debugging
2.4Bitoperationen
2.4.1Bitoperatoren
2.4.2Bits setzen, löschen und toggeln
2.4.3Bits prüFen
2.5Erste Schritte – ein einführendes Programm
2.5.1Schaltungsaufbau
2.5.2Programmcode
2.5.3Programmierung des Controllers
2.6Allgemeiner Programmaufbau
2.6.1Außerhalb der Hauptroutine
2.6.2Hauptroutine
2.7Grundbausteine – Funktionsweise und Implementierung
2.7.1Interrupts
2.7.2Timer
2.7.3Delay
2.7.4IO-Pins (GPIOs)
2.7.5AD-Wandler
2.7.6DA-Wandler
2.7.7Komparator
2.7.8PWM
2.7.9UART/USART
2.7.10SPI / Microwire
2.7.11I2 C / TWI / 2-Wire
2.7.12CAN
2.7.13USB
2.7.14Zustandsautomat (State Machine)
2.7.15Watchdog
2.7.16Brownout-Detektor
2.7.17Low Power und Schlafzustände
2.7.18General Purpose I/O Register und Fehlerbehandlung
3Digitale Ein- und Ausgänge
3.1Pegelwandler
3.2Pinerweiterung mit I/O-Bausteinen
3.2.1SPI-Schieberegister: die 74xx595-Familie
3.3Schalten großer Lasten
3.3.1Schalten mit MOSFETs
3.3.2Schalten mit Bipolartransistoren
3.3.3Ausgangstreiber
3.3.4Relais
3.3.5Wechselspannungen schalten
3.4Schutzschaltungen
4Spannungsmessung
4.1Anpassung des Eingangsspannungsbereichs
4.2AD-Wandlungsergebnis berechnen
4.3Referenzspannung
4.3.1Interne Referenzspannungsquelle
4.3.2Externe Referenzspannungsquelle
4.4Interner AD-Wandler
4.4.1Konfiguration
4.5Externer AD-Wandler
4.5.1ADC Mit I2C-Schnittstelle
4.5.2ADC Mit SPI-Schnittstelle
4.5.3Parallel angeschlossene ADCs
4.6Verifizieren der Messung
4.6.1Referenz- und Versorgungsspannung
4.6.2Das Histogramm
4.6.3Für Fortgeschrittene: Zufall und Korrelation
4.7Messen von Wechselspannungen
4.7.1Parameter einer Wechselspannung
4.7.2Effektivwertmessung (RMS)
4.7.3Spitzenwertmessung
5Spannungen Ausgeben
5.1Interner DA-Wandler
5.2Externer DA-Wandler
5.3Analogspannung Mit PWM Generieren
5.3.1Analogspannung Mit Fast-PWM
5.3.2Für Fortgeschrittene: Filterauslegung
5.4Software-PWM
5.4.1Software-PWM mit Compare Match
5.4.2Software-PWM mit Timer Overflow
6Widerstandsmessung
6.1Spannungsteiler
6.2Messung mit Konstantstrom
6.3Ratiometrische Messung
7Strommessung
7.1Messung mit Shuntwiderstand
7.1.1Current Shunt Monitor
7.2Transimpedanzverstärker
7.3Hallsensor
7.4Stromwandler
7.5Strommessung mit Einem Kondensator
8Zeit- und Frequenzmessung
8.1Periodendauermessung
8.1.1Beispiel Messung der Periodendauer mit Timer und analogem Komparator
8.2Zählen der Nulldurchgänge
9Kapazitäts- und Induktivitätsmessung
9.1Ladekurve
9.2Schwingkreis
9.3RC-Oszillator
10Temperaturmessung
10.1Widerstandstemperatursensoren
10.1.1Ptxxx (Pt100, Pt1000, ...)
10.1.2KTY-Serie
10.1.3PTC
10.1.4NTC
10.2Halbleitertemperatursensoren
10.2.1AVR®-interner Temperatursensor
10.2.2Externe Temperatursensoren mit Spannungs-/Stromausgang
10.3Thermoelement
10.4Digitale Temperatursensoren
10.4.1Beispiel LM75-kompatibler I2C-Temperatursensor
11Kommunikation mit Menschen
11.1Eigenes »Printf()«
11.2LEDs und 7-Segment-Anzeigen
11.2.1LEDs
11.2.27-Segment-Anzeige
11.2.3RGB-LED mit PWM
11.3Taster und Keypads
11.3.1Matrixtastatur
12Daten Speichern
12.1Internes EEPROM
12.2Interner Flash-Speicher
12.2.1Lookup-Tabelle Im Flash
12.3Externe Speicher
12.3.1SPI-Flash
13Anhang
13.1Elektrotechnische Grundgleichungen
13.1.1Das Ohm’sche Gesetz
13.1.2Serien- und Parallelschaltung R, C, L
13.1.3Spannungsteiler
13.1.4Grenz- und Resonanzfrequenz
13.1.5Bandbreite eines Rechtecksignals
13.2Darstellung von Bauteilwerten
13.3E-Reihe
13.4Temperaturbereiche
13.5LED-Vorwiderstand
13.5.1Berechnung
13.6Dezibel (dB)
13.6.1Signal-Rausch-Verhältnis SNR
13.7Kalibrierung
13.7.1Kalibrieren, Justieren und Eichen
13.7.2Grundprinzip der Kalibrierung
13.7.3Ein-Punkt-Kalibrierung
13.7.4Zwei-Punkt-Kalibrierung
13.8Linearisierung
13.8.1Vorgehensweise
13.9Lookup-Tabellen
13.10Steckbrett, Loch- und Streifenrasterplatinen
13.11Dualsystem
13.12Zweierkomplement
Stichwortverzeichnis