Sie sind hier
E-Book

AVR-Mikrocontroller-Kochbuch

Entwurf und Programmierung praktischer Anwendungen

AutorIrmtraud Meister, Lukas Salzburger
VerlagFranzis
Erscheinungsjahr2013
Seitenanzahl333 Seiten
ISBN9783645251266
FormatPDF/ePUB
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis29,99 EUR
Rezept auswählen, Zutaten zusammenstellen - und genießen. Nach genau diesem Konzept finden Sie in diesem Buch alles, um Ihr 'Mikrocontroller-Süppchen' zu kochen: Von den ersten Programmierschritten über Messungen unterschiedlichster Größen bis zum Erzeugen von Signalen und zur Kommunikation über diverse Schnittstellen. Entdecken Sie die schier endlosen Möglichkeiten der Mikrocontroller! Mit nur wenig Programmieraufwand verwirklichen Sie im Handumdrehen Ihre Ideen. Schritt für Schritt begleitet dieses Buch Sie von den allgemeinen Grundlagen zur praktischen Umsetzung und erleichtert so auch komplexe Programmierungen. Am Beispiel des AVR®-Mikrocontrollers von Atmel® lernen Sie das Potenzial von Mikrocontrollern kennen und können sich dadurch auch leicht in 'fremde' Mikrocontroller einarbeiten. Für Einsteiger bietet das Buch auch Hinweise zur Programmierung von Bitoperationen und einfache Codegerüste - so bleiben keine Fragen offen. Die Rezepte aus dem AVR Mikrocontroller-Kochbuch: *Mikrocontroller-Grundlagen *Programmierung und Implementierung *Digitale Ein- und Ausgänge *Spannungsmessung *Spannungen ausgeben *Widerstandsmessung *Strommessung *Zeit- und Frequenzmessung *Kapazitäts- und Induktivitätsmessung *Temperaturmessung *Kommunikation mit Menschen *Daten speichern

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

2Programmierung und Implementierung

2.1Allgemeines zur Programmierung

Verständlicherweise können wir an dieser Stelle keine umfassende Einführung in die Programmiersprache C geben. Doch dazu gibt es sehr viele andere Quellen. Es soll daher hier nur auf die für die Programmierung von Mikrocontrollern22 relevanten Punkte und Eigenheiten eingegangen werden.

An dieser Stelle sollten wir darauf hinweisen, dass wir in diesem Buch nicht das von Atmel® propagierte AVR® Framework benutzen, sondern die freie AVR Libc. Diese erlaubt mehr Einstellungen und damit größere Freiheiten in der Programmierung. Als Compiler verwenden wir den GCC, beim aktuellen Atmel® Studio werden beide Komponenten mitinstalliert.

Hinweis:

Während im Text Fließkommazahlen in der im deutschsprachigen Raum üblichen Schreibweise mit dem Komma als Dezimaltrennzeichen angegeben werden (»2,3«), muss im C-Code stattdessen die englische Schreibweise mit einem Punkt (»2.3«) verwendet werden.

Die Programmbeispiele sind, soweit nicht anders angegeben, für die ATmegax8-Serie (ATmega48, 88, 168 und 328) in ihren verschiedenen Ausführungen (»normal«, Revision A und PicoPower®-Variante P) geschrieben. Diese Controllerbaureihe ist modern, günstig und weit verbreitet (unter Anderem durch ihren Einsatz auf vielen »Arduino«Boards). Zudem verfügen sie über die »neuen« Registerbezeichnungen und Registereinteilungen, sodass eine Portierung auf viele aktuelle Modelle problemlos möglich ist. Die verwendeten Pins müssen natürlich angepasst werden. Es empfiehlt sich aber prinzipiell, einen Blick in den jeweiligen Abschnitt des Datenblatts des letztendlich verwendeten Controllers zu werfen.

Bei den Programmbeispielen wird bei den Initialisierungen der Register schrittweise vorgegangen. Der erste Befehl setzt dabei alle Bits außer dem gewünschten auf 0, während bei den nachfolgenden Befehlen eine OR-Verknüpfung durchgeführt wird, sodass nur das jeweilige Bit gesetzt wird (siehe Abschnitt 2.4 Bitoperationen). Die Befehle, um die Bits in einem Register zu setzen, können natürlich auch zu einer einzigen Anweisung zusammengefasst werden, was in den erweiterten Beispielen auch gemacht wird. Globale Einstellungen wie z. B. die Taktrate werden nicht bei jedem Beispiel nochmals gezeigt.

Es werden bewusst keine realen externen ICs angesteuert. Das würde aufgrund der sehr hohen Anzahl an existierenden Bauteilen nur für Verwirrung sorgen. Daher werden »generische« Bauteile verwendet und die verschiedenen alternativen Methoden angesprochen. Manchmal werden auch ICs mit einem standardisierten Protokoll (»Industriestandard«) angesteuert, ohne den konkreten Typ zu spezifizieren.

Bei den Beispielen werden zur Verbesserung der Übersichtlichkeit nur die gerade für das Beispiel relevanten Anschlüsse gezeigt. Andere Anschlüsse und die Spannungsversorgungen wurden nicht notwendigerweise mitgezeichnet, müssen aber natürlich ebenfalls angeschlossen werden. Falls es nicht explizit so gekennzeichnet wurde, sind die grafischen Darstellungen nicht als Pinbelegungen zu verstehen, sondern dienen dazu, den Sachverhalt zu erklären.

Hinweis:

Zum besseren Verständnis der internen Funktionsweise der jeweils genutzten AVR®-Peripherie oder Funktionalität ist es sehr hilfreich, den entsprechenden Abschnitt im Datenblatt oder die zugehörigen Application Notes des Herstellers durchzulesen. Die Datenblätter sind in der Regel sehr ausführlich und erklären genau, warum und zu welchem Zweck welche Bits wie zu setzen sind, um das gewünschte Verhalten zu erreichen. Auch die Application Notes können sehr gut sein, es gibt bei ihnen aber große Qualitätsunterschiede.

2.1.1Eigenheiten der Mikrocontrollerprogrammierung

Hinweis:

Die folgenden Kapitel 2.1.x sind insbesondere für diejenigen Leser gedacht, die bereits versiert im Umgang mit der Programmiersprache C sind. Programmier-Einsteiger sollten sich nicht davon abschrecken lassen, wenn sie mit dem einen oder anderen Begriff oder Schlüsselwort noch nichts anfangen können. Bei den jeweiligen Beispielimplementierungen werden wir noch genauer erklären, was warum auf welche Art gelöst wird.

Bei der Programmierung von AVRs (aber auch bei anderen Mikrocontrollern) benötigt man nur einen kleinen Teil des Sprachumfangs von C. C hat darüber hinaus die Besonderheit, dass sehr viele Funktionen in die »C standard library« ausgelagert wurden. Aus Speichergründen muss diese auf Mikrocontrollern »etwas schlanker«, also einfacher, ausfallen.

So darf man – außer in Ausnahmefällen und wenn man ganz sicher ist, was man tut – auf Mikrocontrollern keine dynamische Speicherverwaltung verwenden. Malloc, free und andere »Gemeinheiten«, die C-Programmierer auf dem PC beschäftigen und für viele Fehler und Bugs mitverantwortlich sind, kommen also schlicht nicht vor. Ebenso ist die Benutzung von Pointern (Zeigern) nur beschränkt sinnvoll und somit kaum gebräuchlich. Das stimmt zwar nicht ganz, da z. B. Register intern natürlich über Adresszeiger gehandhabt werden, aber der Programmierer kommt damit im Normalfall nicht in Berührung. Der Rat der Autoren lautet daher auch, auf »Tricks« mit Zeigern tendenziell zu verzichten.

2.1.2Schlüsselwörter

volatile

Besonders wichtig bei der Mikrocontrollerprogrammierung ist das Schlüsselwort »volatile«. Es wird bei der Variablendeklaration angegeben. Also beispielsweise:

volatile int MeineVariable;

Zur Erklärung nehmen wir an, dass wir eine globale Variable MeineVariable haben. Das Hauptprogramm »wartet« in diesem einfachen Beispiel in einer Schleife darauf, dass eine Interruptroutine diese Variable ändert. Der Compiler »kennt« aber keine Interruptroutinen – er »sieht« gewissermaßen nur die Variable und das Hauptprogramm, in dem sich die Variable nicht ändern kann. Daher entfernt er während der Optimierung die entsprechende, aus seiner Logik heraus sinnlose Schleife. Dadurch entsteht ein Problem für uns, da sich das Programm ja nun anders verhält als erwartet.

Das Schlüsselwort volatile sagt dem Compiler aber nun, dass er bei dieser Variable auf sämtliche Optimierungen verzichten und ihren Wert bei jedem Zugriff darauf neu lesen muss.

Also kurz gesagt: Eine Variable muss mit volatile deklariert werden, wenn sie sowohl in einer Interruptroutine, als auch an einer anderen Stelle (im Hauptprogramm oder in anderen Interruptroutinen) verwendet wird.

Die Zugriffsvariablen auf die Register sind im Headerfile des Controllers übrigens ebenfalls als volatile deklariert, da sich ihre Werte ja ebenfalls ohne »Wissen« des Compilers ändern können und er ansonsten beispielsweise eine Warteschleife, in der auf die Änderung eines Pinzustandes gewartet wird, einfach wegoptimieren würde.

#define

Besonders vorsichtig muss man bei der Verwendung von #define sein. Das ist eine auf Mikrocontrollern sehr gerne verwendete Möglichkeit, um etwa Konfigurationseinstellungen übersichtlich am Anfang des Programms zusammenzufassen, beispielsweise

#define BAUDRATE 9600;

Zu beachten ist dabei, dass mit #define nur eine reine Textersetzung vor dem Kompilieren durchgeführt wird.

Man kann natürlich auch mathematische Ausdrücke mit #define angeben. Die alles umschließende Klammer darf dabei aber niemals vergessen werden, da es bei der Textersetzung ansonsten zu einer unvorhersehbaren Ausführungsreihenfolge kommen würde, wenn der Compiler die Ausdrücke auswertet (Punktrechnung vor Strichrechnung etc.).

Da vor dem endgültigen Kompiliervorgang alle auswertbaren Ausdrücke, also vereinfacht gesagt alle Berechnungen mit bereits bekannten Werten, berechnet werden, führen mathematische Ausdrücke mit konstanten Werten zu keinerlei Performancenachteil im kompilierten Code und sollten daher nach Möglichkeit verwendet werden.

Also besser, da übersichtlicher:

#define SEKUNDEN_PRO_TAG (60UL * 60UL * 24UL)

anstatt direkt:

#define SEKUNDEN_PRO_TAG 86400UL

Wenn der C-Compiler auf Zahlenwerte im Quellcode trifft, muss er für diese einen geeigneten Datentyp annehmen. Er nimmt dabei automatisch den kleinstmöglichen Datentyp, der die Zahl aufnehmen kann. Standardmäßig wird aber von Signed-Werten ausgegangen, sodass man bei Bedarf durch ein angehängtes U den Compiler darauf hinweisen muss, dass er den Wert als Unsigned zu behandeln hat. UL zeigt ein Unsigned Long an.

Gibt es Nachkommastellen, wird automatisch Double angenommen. Bei einem angehängten F wird Float statt Double verwendet, allerdings hat Float auf dem AVR®...

Blick ins Buch

Weitere E-Books zum Thema: Elektronik - Elektrotechnik - Telekommunikation

Logikbausteine

E-Book Logikbausteine
Format: PDF

Aus Sicht der Bausteinarchitekturen werden die grundsätzlichen Einsatzmöglichkeiten feldprogrammierbarer Bausteine beschrieben:- Grundlegende Modelle, Elemente und Programmierverfahren- I/O-…

Logikbausteine

E-Book Logikbausteine
Format: PDF

Aus Sicht der Bausteinarchitekturen werden die grundsätzlichen Einsatzmöglichkeiten feldprogrammierbarer Bausteine beschrieben:- Grundlegende Modelle, Elemente und Programmierverfahren- I/O-…

Mechatronik 1

E-Book Mechatronik 1
Format: PDF

Die Mechatronik vereint Elemente des Maschinenbaus, der Elektrotechnik/Elektronik und der Informatik. Das zweibändige Werk, das sich in erster Linie an Studenten von Fachhochschulen und…

Mechatronik 1

E-Book Mechatronik 1
Format: PDF

Die Mechatronik vereint Elemente des Maschinenbaus, der Elektrotechnik/Elektronik und der Informatik. Das zweibändige Werk, das sich in erster Linie an Studenten von Fachhochschulen und…

Lehr- und Übungsbuch Elektronik

E-Book Lehr- und Übungsbuch Elektronik
Analog- und Digitalelektronik Format: PDF

Das Lehrbuch führt die Studenten im Grundstudium in die Elektroniklehrveranstaltungen Bauelemente, Schaltungs- sowie Analog- und Digitaltechnik ein. Die durchgängige Systematik erleichtert die…

Lehr- und Übungsbuch Elektronik

E-Book Lehr- und Übungsbuch Elektronik
Analog- und Digitalelektronik Format: PDF

Das Lehrbuch führt die Studenten im Grundstudium in die Elektroniklehrveranstaltungen Bauelemente, Schaltungs- sowie Analog- und Digitaltechnik ein. Die durchgängige Systematik erleichtert die…

Weitere Zeitschriften

Bibel für heute

Bibel für heute

BIBEL FÜR HEUTE ist die Bibellese für alle, die die tägliche Routine durchbrechen wollen: Um sich intensiver mit einem Bibeltext zu beschäftigen. Um beim Bibel lesen Einblicke in Gottes ...

Card-Forum

Card-Forum

Card-Forum ist das marktführende Magazin im Themenbereich der kartengestützten Systeme für Zahlung und Identifikation, Telekommunikation und Kundenbindung sowie der damit verwandten und ...

care konkret

care konkret

care konkret ist die Wochenzeitung für Entscheider in der Pflege. Ambulant wie stationär. Sie fasst topaktuelle Informationen und Hintergründe aus der Pflegebranche kompakt und kompetent für Sie ...

crescendo

crescendo

Die Zeitschrift für Blas- und Spielleutemusik in NRW - Informationen aus dem Volksmusikerbund NRW - Berichte aus 23 Kreisverbänden mit über 1000 Blasorchestern, Spielmanns- und Fanfarenzügen - ...

die horen

die horen

Zeitschrift für Literatur, Kunst und Kritik."...weil sie mit großer Aufmerksamkeit die internationale Literatur beobachtet und vorstellt; weil sie in der deutschen Literatur nicht nur das Neueste ...

elektrobörse handel

elektrobörse handel

elektrobörse handel gibt einen facettenreichen Überblick über den Elektrogerätemarkt: Produktneuheiten und -trends, Branchennachrichten, Interviews, Messeberichte uvm.. In den monatlichen ...

filmdienst#de

filmdienst#de

filmdienst.de führt die Tradition der 1947 gegründeten Zeitschrift FILMDIENST im digitalen Zeitalter fort. Wir begleiten seit 1947 Filme in allen ihren Ausprägungen und Erscheinungsformen.  ...