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

BEHINDERTEPÄDAGOGIK

BEHINDERTEPÄDAGOGIK

Für diese Fachzeitschrift arbeiten namhafte Persönlichkeiten aus den verschiedenen Fotschungs-, Lehr- und Praxisbereichen zusammen. Zu ihren Aufgaben gehören Prävention, Früherkennung, ...

DHS

DHS

Die Flugzeuge der NVA Neben unser F-40 Reihe, soll mit der DHS die Geschichte der "anderen" deutschen Luftwaffe, den Luftstreitkräften der Nationalen Volksarmee (NVA-LSK) der ehemaligen DDR ...

Die Versicherungspraxis

Die Versicherungspraxis

Behandlung versicherungsrelevanter Themen. Erfahren Sie mehr über den DVS. Der DVS Deutscher Versicherungs-Schutzverband e.V, Bonn, ist der Interessenvertreter der versicherungsnehmenden Wirtschaft. ...

Euro am Sonntag

Euro am Sonntag

Deutschlands aktuelleste Finanz-Wochenzeitung Jede Woche neu bietet €uro am Sonntag Antworten auf die wichtigsten Fragen zu den Themen Geldanlage und Vermögensaufbau. Auch komplexe Sachverhalte ...