36

Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

Embed Size (px)

Citation preview

Page 1: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten
Page 2: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 2

Build your own Arduino

Nun ist es so weit, dass wir uns einem sehr interessanten Thema widmen. Dasbedeutet im Umkehrschluss natürlich nicht, dass die vorangegangenen Hacksweniger interessant sind. Dennoch hat mir die Umsetzung besonders viel Spaßbereitet. Du wirst ein eigenes Arduino-Board bauen und dieses zu Beginn mit derbekannten Arduino-IDE programmieren. Um die Sache noch weiter zu verfeinern,zeige ich dir, wie du sehr einfach das frei verfügbare Atmel-Studio zurProgrammierung deines Boards nutzen kannst. Diese Entwicklungsumgebung spieltin einer anderen Liga und gehört zu den absolut professionellen Tools, wenn es um dieProgrammierung von Mikrocontrollern geht. Ich kenne einige Entwickler, die denUmstieg auf diese Plattform vollzogen haben und damit sehr glücklich sind. Es wirdalso sicherlich sehr spannend.

Ein Arduino-Board im EigenbauIn diesem Hack möchte ich dir zeigen, wie du ein eigenes Arduino-Board herzustellenkannst. Du wirst sehen, dass das gar nicht so schwierig ist. Du lernst dabei eineMenge über den Mikrocontroller ATmega328 und seine externe Beschaltung, wie maneinen Bootloader auf einen frischen Mikrocontroller überträgt, die ISP-Schnittstelleund einiges mehr. Natürlich kannst du die Schaltung auf einem Breadboardaufbauen, doch eine eigene Platine ist in meinen Augen professioneller und bereitetauch mehr Spaß. Worauf ich hinaus möchte, zeige ich dir am besten wieder einmalganz zu Beginn, denn wenn du weißt, worum es geht, kann der Geist anfangen zuarbeiten und neue Ideen entwickeln.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 3: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

3 |

Abbildung: Das Ardu-BoardDie einzelnen Komponenten des Boards habe ich in der Abbildung beschrieben undwir sollten uns jetzt ein wenig über den Mikrocontroller ATmega328 unterhalten undsehen, was für Anschluss-Pins er besitzt.

Abbildung: Der Mikrocontroller ATmega328Der Mikrocontroller in der Abbildung 2 liegt im so genannten DIL28-Gehäuse (DIL =Dual In-Line) vor. Daneben gibt es noch eine Gehäuseform in einer SMD-Variante,jedoch bevorzuge ich als Bastler eindeutig den Chip im DIL-Format, denn er super ist

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 4: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 4austauschbar – er kann recht einfach auf eine eigene Platine mit entsprechendemSockel aufgesteckt werden.

Wenn ich mir diese Pin-Belegung so anschaue, dannverwirrt mich das schon massiv! Da sind viele Pinsvorhanden, die mehrere Bezeichnungen besitzen, diefarblich voneinander getrennt sind. Die Farbengefallen mir gut und mir wûrde es noch bessergefallen, wûrde ich es verstehen.

Stimmt Ardus, das verwirrt auf den ersten Blick. DieMehrfachbezeichnung der gezeigten Pins bedeutet, dassdiese Pins je nach Programmierung Alternativ-funktionen besitzen, von denen aber immer nur eineaktiv sein kann. Viele der Bezeichnungen sind recht

kryptisch und du wirst sicherlich ohne eine entsprechende Erläuterung – so wie icham Anfang natürlich auch - recht hilflos da stehen. Ich gehe dabei nicht Pin für Pindurch, sondern bespreche die logisch zusammenhängenden Pingruppen.

Die Spannungsversorgung

Die Pins Vcc und GND sind für die Spannungsversorgung zuständig, wobei dieSpannung zwischen 4,5V und 5,5V betragen darf.

Der Port B

Der Port B ist ein sogenannter bidirektionaler I/O Port mit 8 Bits, der in beidenRichtungen arbeiten kann. Die einzelnen Bits von Port B erstrecken sich von PB0 bisPB7. Jedes einzelne Bit besitzt einen Pullup-Widerstand, der – du hast das schonkennengelernt – an- und abgeschaltet werden kann. Je nach Programmierung derFuses – es handelt sich um einzelne Bits im Mikrocontroller, die für die Konfigurationdesselben verwendet werden und durch das laufende Programm nicht geändertwerden können – können PB6 und PB7 für den Anschluss eines externen Quarzeskonfiguriert werden. Beim ATmega328 ist es ein Quarz mit 16MHz.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 5: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

5 |

Der Port C

Auch Port C ist ein bidirektionaler I/O Port mit 7 Bits, der sich von PC0 bis PC6erstreckt. Dieser Port besitzt ebenfalls pro Bit einen Pullup-Widerstand, der an- undabgeschaltet werden kann. Hinsichtlich der Analog/Digital-Wandlung kommt dieserPort ins Spiel, denn die Pins PC0 bis PC5 werden dafür verwendet. Ich führe dieseFunktion später separat auf. Der Pin PC6 besitzt eine Sonderfunktion und kann jenach Fuse-Programmierung (RSTDISBL) als normaler I/O-Pin oder als Reset-Pinverwendet werden.

Der Port D

Der Port D ist wiederum ein bidirektionaler I/O-Port mit 8 Bits, der sich von PD0 bisPD7 erstreckt. Auch hier finden sich die schon erwähnten Pullup-Widerstände mit dergenannten Funktion wieder.

AVCC

Dieser Pin ist für die separate Spannungsversorgung des ADC (A/D-Converters)zuständig. Dieser Pin wird in der Regel mit der Versorgungsspannung Vcc verbundenund sollte auch bei der Nichtnutzung des ADC so verschaltet sein.

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 6: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 6

ARef

Ist die analoge Referenzspannung für den ADC.

Der ADC

Die Pins ADC0 bis ADC5 (sie sind Teil von Port C) sind die analogen Eingänge miteiner 10-Bit-Auflösung.

Der I²C-Bus

Die beiden Pins des I²C-Busses werden über Port C zur Verfügung gestellt. Es handeltsich um SDA (PC4) und SCL (PC5).

Der SPI-Bus

Die vier Pins des SPI-Busses werden über Port B zur Verfügung gestellt. Es handeltsich um SS für Slave-Select (PB2), MOSI für Master-Out-Slave-In (PB3), MISO fürMaster-In-Slave-Out (PB4) und SCK für Serial-Clock (PB5).

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 7: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

7 |

LinkDetaillierte Informationen zu diesem Thema der einzelnen Pins findensich natürlich im Datenblatt des ATmega328 wieder und ich empfehle,dort einen Blick hineinzuwerfen (Seite 17 und 18). Doch ich muss dichvorwarnen, denn das ist alles in Englisch beschrieben und auf mehr als400 Seiten findest du vieles, was dich quasi erschlagen wird. Hier die

Internetadresse

http://www.atmel.com/Images/Atmel‐42735‐8‐bit‐AVR‐Microcontroller‐ATmega328‐328P_Datasheet.pdf

Das sollte erst einmal für den Anfang genügen. Bevor wir jedoch daran gehen, denMikrocontroller auf eine Lochrasterplatine unterzubringen, gibt es noch einiges zubedenken. Wenn du dir das Arduino-Board anschaust, dann befinden sich neben demATmega328 noch weitere wichtige Komponenten auf der Platine. Um mit demMikrocontroller über die USB-Schnittstelle kommunizieren zu können, benötigen wirja einen USB-Zu-Seriell-Wandler. Ältere Boards besaßen einen FTDI-Adapter unddas aktuelle Arduino-Uno Board besitzt dafür ja einen eigenen Mikrocontroller, dersich ATmega16u2 nennt.

LinkNähere Informationen ATmega16u2 findest du unter der Internetadressehttp://www.atmel.com/images/doc7799.pdf

Zur Umsetzung unseres Hacks nutzen wir einen FTDI-Adapter, die es in denunterschiedlichsten Ausführungen gibt. Du solltest jedoch darauf achten, dass es für+5V ausgelegt ist. Es gibt Varianten, die nur für 3,3V geeignet sind und andere, dieeinen Umschalter zwischen 3,3V und 5V besitzen. Diese sind natürlich am

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 8: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 8flexibelsten. Mein Modell hat diese Eigenschaft und ist von Funduino, doch esfunktioniert mit nahezu jedem FTDI-Adapter. Dazu später mehr. Wenn du jetzt nochzusätzlich zum FTDI-Adapter den externen Quarz und ein paar Kondensatorenanschließt, funktioniert die ganze Sache schon. Schauen wir doch mal, was du für dasArdu-Board benötigst, denn ich habe ja noch ein paar weitere nützliche Komponentenuntergebracht.

Was wir benötigenFür diesen Hack benötigen wir die folgenden Bauteile:

Lochrasterplatine 100mm x90mm 1x

Mikrocontroller ATmega3281x

DIL-Fassung 28-polig 1x

Schwingquarz 16MHz 1x undKeramikkondensator 22pF 2x

Keramikkondensator 100nF1x

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 9: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

9 |

Tabelle: Bauteilliste

Der SchaltplanDa du jetzt die etwas umfangreichere Bauteilliste kennt, sollten wir uns nun demSchaltplan zuwenden.

FTDI-Adapter 5V 1x

64-polig, gerade, RM 2,54mm1xLED grün, rot, gelb, blau je 1x

Widerstand 10KΩ 1x

Widerstand 330Ω 4x

Mikrotaster 4x

Trimmer 10KΩ 1x

Mini-Breadboard 1x

Schablone für ATmega328(optional) – Mit einemLamminiergerät habe ich diezuvor ausgedruckte Schabloneeingescheißt und mit einem1mm-Bohrer die erforderlichenLöcher gebohrt

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 10: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 10

Abbildung: Der Schaltplan für das Ardu-Board

HinweisDie auf dem Ardu-Board befindlichen Mikrotaster 1 bis 3 besitzen indiesem Fall weder Pullup- noch Pulldown-Widerstände, so dass sie beiBenutzung auf die internen Pullup-Widerstände des Mikrocontrollersangewiesen sind.

Der hier gezeigte Schaltplan stellt quasi eine Minimalkonfiguration dar, mit der derMikrocontroller betrieben werden kann. Die Spannungsversorgung erfolgt in diesemFall alleine über den FTDI-Adapter, wobei ich dir gleich aber noch eine andereVariante zeigen werde. Auf der folgenden Abbildung erkennst du die Pins, die mit derVersorgungsspannung und Masse verbunden werden müssen:

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 11: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

11 |

Auf der rechten Seite befinden sich die Anschlüsse für den Analog/Digital-Wandlerund auch die ARef, also die analoge Referenzspannung, sollte mit dem Pluspolverbunden werden. Damit der Mikrocontroller in einen definierten Ausgangszustandgesetzt werden kann, ist ein Reset-Eingang vorhanden. Dieser Eingang ist LOW-Aktiv, was bedeutet, dass der Reset bei einem LOW-Pegel (Masse) ausgeführt wird.Man kennzeichnet einen derartigen LOW-Aktiven Eingang im Schaltplan mit einemkleinen Kreis. Dieser Eingang ist über einen Pullup-Widerstand (10KΩ) mit derVersorgungsspannung +5V verbunden, so dass im Normalbetrieb kein Reset ausgelöstwird.

Ich frage mich, warum du einen Widerstand dafûrverschwendest und den Eingang nicht direkt mit +5Vverbindest.

Nun Ardus, das ist sicherlich eine berechtigte Frage.Wenn du dir aber den Schaltplan einmal genaueranschaust, dann wirst du bemerken, dass der Reset-Eingang noch an zwei andere Stellen geleitet wird. Zumeinen gibt es da einen Reset-Taster, den du auch vomArduino-Board kennst. Würde der Pullup-Widerstandfehlen und du würdest den Taster drücken, dann gäbe es

einen Kurzschluss, den wir sicherlich nicht wollen. Und auch der FTDI-Adapterbekommt den Reset-Eingang über einen 100nF Kondensator zugeführt, so dass auchdieser einen Reset auslösen kann.

Kommen wir zur Taktung des Mikrocontrollers, denn dieser benötigt für seineArbeitszyklen einen Anstoß, der ihm sagt: „Jetzt geht’s los!“ Das muss inregelmäßigen Abständen erfolgen und aus diesem Grund wird von außen einSchwingquarz angestoßen, der elektrische Impulse an den Controller übermittelt. DerMikrocontroller verfügt auch über einen internen Taktgeber, der jedoch über dieinterne Konfiguration deaktiviert ist. Die Standardverschaltung für einen

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 12: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 12Schwingquarz an einem Mikrocontroller schaut – wie auch im Schaltplan zu sehen ist– wie folgt aus:

Wenn doch ein Quarz fûr die Schwingungser-zeugung zuständig ist, warum werden dann noch diebeiden Kondensatoren benötigt?

Gute Frage, Ardus! Der Quarz schwingt von ganzalleine, doch er benötigt zum sauberen Anschwingeneben diese beiden Kondensatoren. Es könnte auch ohnefunktionieren, doch die Frequenz wäre dann nichtstabil und würde wohl ein wenig drüber oder unterhalbder gewünschten Frequenz liegen. Wenn du dir dieSchaltung aufbaust, dann achte unbedingt darauf,dass der Quarz und die beiden Kondensatoren so dichtwie möglich am Mikrocontroller platziert sind. Ebenso

sollten die Anschlussbeinchen sehr kurz gehalten werden. Andernfalls wirkt dieSchaltung wie auch die Drähte als Funkantenne mit abgestrahlten Hochfrequenz-signalen.

Kommen wir nun zur versprochenen separaten Spannungsversorgung. Dafür sindwenige zusätzliche Bauteile erforderlich.

9V Batterieclip

9V Blockbatterie

Elektrolytkondensator 1µF

Elektrolytkondensator 100µF

Spannungsregler 7805

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 13: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

13 |

Abbildung: Die zusätzlichen Bauteile für die separate SpannungsversorgungSehen wir uns dazu den Schaltplan an.

Abbildung: Die Schaltung mit dem Spannungsregler 7805Bei der Verwendung der Elektrolytkondensatoren musst du unbedingt auf diekorrekte Polung achten, denn sonst nehmen sie Schaden oder können sogarexplodieren. Die Pin-Belegung des Spannungsreglers 7805 ist die gleiche Reihenfolge,wie im Schaltplan gezeigt. Also von links nach rechts IN, GND und OUT:

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 14: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 14

Mit dieser kleinen einfachen +5V-Stabilisierungsschaltung kannst du dein Ardu-Board nach dem Upload der Firmware und des Sketches ohne einen Anschluss mittelsFTDI-Adapter und dem erforderlichen USB-Kabel betreiben. Natürlich ist auch derEinsatz eines kleinen +5V-Netzteils für einen Dauerbetrieb denkbar.

Wie findet ein Sketch den Weg in den ATMega328Was wäre, wenn es keinen Bootloader gäbe, auf den ich natürlich gleich noch einmalzu sprechen komme? In diesem Fall musst du über einen sogenannten AVR-Programmer verfügen, der einen kompilierten Sketch auf den Mikrocontroller brennt.Es handelt sich dabei also um Hardware. Wenn ich hier von brennen rede, dannhandelt es sich um das spezielle Programmieren beziehungsweise Übertragen derFirmware in den Speicher des Mikrocontrollers. Dazu wird die SPI-Schnittstelle desMikrocontrollers benötigt.

Diese vier Pins SCK, MISO, MOSI und SS haben eine ähnliche Funktion – jedoch mitanderem Protokoll - wie die der seriellen Schnittstelle, so dass eine bidirektionaleVerbindung aufgebaut werden kann, um einerseits Daten in den Mikrokontroller zubrennen und andererseits auch wieder auszulesen.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 15: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

15 |

Und wenn ich keinen derartigen AVR-Programmer besitze.Muss ich mir den also auch noch zulegen?

Keine Panik, Ardus! Diese Geräte sind sehr klein und kostennicht so viel. Ich zeige dir später, welche Programmer recht gutsind und wie man damit umgeht. Was würdest du sagen, wennich dir zeige, wie du deinen Arduino-Uno als ISP-Programmer -das ist eine andere Bezeichnung für diese Schnittstelle - nutzenkönntest. Aber eins nach dem anderen. Zuerst wollte ich dir jazeigen, wie ein Sketch den Weg in den Speicher desMikrocontrollers findet und wir gehen davon aus, dass ein

Bootloader installiert wurde.

Der Build-ProzessWenn du einen Sketch programmierst, so machst du das in der Arduino-IDE mit derProgrammiersprache C beziehungsweise C++. Das ist sicherlich keine Neuigkeit fürdich. Um daraus nun eine für den Mikrocontroller lesbare beziehungsweiseverständliche Sprache - Maschinensprache genannt - zu machen, muss ein Compilerquasi als Übersetzer die Arbeit übernehmen. Im Falle der Arduino-IDE ist das deravr-gcc. Ein Zwischenprodukt ist der Object-Code, der auf dem Weg zumMaschinencode noch mit diversen Arduino Standard-Bibliotheken zusammengeführtwird generiert wird, uns aber nicht weiter interessieren soll. Das Endergebnis desProzesses ist eine einzige Hex-Datei, die den Maschinencode für den Mikrocontrollerrepräsentiert und in den Speicher geladen und ausgeführt wird.

Übertragung der Firmware mithilfe eines BootloadersWenn nun die besagte Hex-Datei vorliegt, dann muss sie auf den Mikrocontrollerübertragen werden. Wenn du über einen Arduino-Uno verfügst, dann ist auf demATmega328 schon ein Bootloader vorinstalliert. Der Bootloader ist ein kleinesvorinstalliertes Programm in einem geschützten Bereich des Speichers, welchesimmer dann ausgeführt wird, wenn der Mikrocontroller mit Spannung versorgt oderein Reset ausgelöst wird. Es schaut dann nach, ob du versuchst, ein neuesMaschinenprogramm zu laden. Ist das der Fall, wird dieses in einem bestimmtenSpeicherbereich im Flash-Memory geschrieben, so dass der Bootloader keinenSchaden davon trägt und nicht unbeabsichtigt überschrieben wird. Erfolgt keinHochladen einer neuen Software, wird das vorhandene Programm auf demMikrocontroller ausgeführt. Du siehst, dass hierfür kein ISP-Programmer erforderlichist und das macht die ganze Sache so schön einfach. Natürlich belegt der Bootloaderauch einen bestimmten Speicherbereich, was auf Kosten des frei zur Verfügung

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 16: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 16stehenden Platzes geht, doch das ist für unsere Belange beziehungsweise für dieGröße der Sketche, die wir schreiben, erst einmal zweitrangig. Bei größeren Projektenmuss man sich sicherlich Gedanken über jedes einzelne Byte machen und dass derSpeicher knapp werden kann.

Damit eine erstellte Hex-Datei nun aber auf den Mikrocontroller übertragen werdenkann, wird ein spezielles Programm benötigt, das sich avrdude nennt und Teil derArduino-IDE ist. Dieses kleine konsolenbasierte Programm erwartet beim Aufruf eineMenge an Parametern. Wir werden den Aufruf über die Arduino-IDE einmal genauerverfolgen. Dazu musst du in der Arduino-IDE folgende Anpassung vornehmen, diedadurch etwas auskunftsfreudiger wird. Öffne über den MenüpunktDatei|Voreinstellungen das Fenster zum Anpassen einiger wichtigerKonfigurationspunkte und mache ein Häkchen für die ausführliche Ausgabe vonInformationen während des Hochladens eines Sketches beziehungsweise der Hex-Datei:

Nun laden wir den Blink-Beispiel-Sketch in der Arduino-IDE(Datei|Beispiele|01.Basics|Blink) , wobei das auch mit jedem anderen Sketchfunktioniert. Ich möchte lediglich den Aufruf des avrdude-Programms zur Anzeigebringen. Hast du das gemacht, führe den Upload auf den Arduino-Uno durch undbeobachte das Output-Fenster der Arduino-IDE. Nach diesem Prozess findet sich ganzoben eine Zeile, die wie folgt ausschaut und recht lang ist. Bei mir lautet sie:

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM17 -b115200 -D -Uflash:w:C:\Users\ebartman\AppData\Local\Temp\arduino_build_762038/Blink.ino.hex:i

Wir wollen einmal sehen, was das alles zu bedeuten hat, denn später nutzen wir dieselange Zeichenkette für das Atmel Studio, um damit den Mikrocontroller mit neuerFirmware zu versorgen. Dieser lange Sermon besteht im Grunde genommen aus zweiTeilen. Der erste Teil besteht aus dem Aufruf des avrdude-Programms mit der Zeile

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe

wobei ich an das Programm noch die eigentlich nicht erforderliche Extension .exeangehängt habe. Diese Zeile sorgt also für das Speichern der Hex-Datei. Aber ohnenähere Informationen über den verwendeten Mikrocontroller, den notwendigen COM-Port, die Übertragungsrate und den Pfad der kompilierten Hex-Datei würde avrdudeziemlich orientierungslos dastehen. Der zweite Teil liefert avrdude eben dieseInformationen. Zusätzlich wird noch die avrdude Konfigurationsdatei avrdude.confmit ihrem absoluten Pfad angegeben:

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 17: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

17 |

-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM17 -b115200 -D -Uflash:w:C:\Users\ebartman\AppData\Local\Temp\arduino_build_762038/Blink.ino.hex:i

Die eigentliche Hex-Datei ist die Blink.ino.hex. Diese wird mithilfe von avrdude aufden Mikrocontroller geladen. Auch hier muss natürlich wieder der absolute Pfadangegeben werden, der sich in einem tempörären Verzeichnis befindet, denn nachdem Upload wird diese Datei eigentlich nicht mehr benötigt und kann bei Bedarfimmer wieder neu generiert werden. Wolltest du diese Zeichenkette in derKommandozeile ausführen, müsstest du noch einige doppelte Hochkommata (hierfarblich markiert) setzen, da ansonsten die absoluten Pfade nicht korrekt erkanntwürden. Das Ganze würde dann wie folgt ausschauen:

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe" -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM17 -b115200 -D -Uflash:w:

"C:\Users\ebartman\AppData\Local\Temp\arduino_build_762038/Blink.ino.hex":i

Sehen wir einmal, was die einzelnen Parameter zu bedeuten haben.

-C: Hier wird der Pfad zur Konfigurationsdatei angegeben.

-v: Verbose-Output wird eingeschaltet, was bedeutet, dass Meldungen ausgegeben werden.

-p: Damit avrdude weiß, um welchen Mikocontroller es sich handelt, wird über p für partnumber der Typ angegeben. In unserem Fall natürlich atmega328p.

-c: Über die sogenannte Programmer-id wird avrdude mitgeteilt, welcher Programmierer verwendet wird. Bei uns ist das der Arduino.

-P: Um den korrekten COM-Port anzusprechen, an dem sich der Arduino befindet, müssen wir diese Angabe ebenfalls machen. In meinem Fall ist es COM17.

-b: Wenn der COM-Port im Spiel ist, dann ist die Übertragungsrate nicht weit und muss angegeben werden. Sie beträt hier 115200 Baud.

-D: Dieser Schalter deaktiviert das sogenannte Auto-Erase beim Flashvorgang, also das vorherige Löschen des Speichers. Es ist nicht erforderlich, denn durch den Schalter –U, siehe unten, wird dieser Vorgang implizit durchgeführt.

-U: Hier wird eine Memory-Aktion, also ein Speicherzugriff vorgenommen, wobei noch weitere Parameter erforderlich sind, die Aufschluss über die genaue Vorgehensweiseliefern. flash besagt, dass der Zugriff auf den Flash-Speicher eingeleitet wird. wteilt avrdude mit, dass die angegebene Hex-Datei aus dem Dateisystem gelesen und inden Speicher geschrieben werden soll. Das kleine i am Ende ist ein Hinweis auf einIntel-Hex-Format der Hex-Datei.

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 18: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 18

LinkFür das Vertiefen dieses Themas rate ich einen Blick auf die folgendeInternetseite zu werfen:

http://www.nongnu.org/avrdude/user-manual/avrdude_4.html

Lass‘ dich durch diese Fülle an Informationen hinsichtlich der verschiedenen Schalternicht verunsichern. Gehe der Reihe nach durch und realisiere, warum sie benötigtwerden. Dann ist es halb so wild.

Übertragung der Firmware ohne BootloaderDie Überschrift ist nicht ganz korrekt, denn ich möchte eigentlich die Hex-Datei nurübertragen, wenn ein Bootloader vorhanden ist. Was also tun, wenn du über einenfrischen Mikrocontroller verfügst, der ohne Bootloader geliefert wurde? Fangen wirdoch damit an, dein Arduino-Board als ISP-Programmer einzusetzen. Ja, das istmöglich und bedarf nur einiger weniger Kabel und die Auswahl der richtigenSetzungen in der Arduino-IDE. Folgende Pins werden für die Programmierung desBootloaders auf dem Ziel-Mikrocontroller benötigt:

Der Schaltplan zur Ansteuerung des noch ohne Bootloader dahinlebendenMikrocontrollers schaut wie folgt aus.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 19: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

19 |

Abbildung: Die Schaltung zum Brennen des Bootloaders mit einem Arduino-Uno BoardDu siehst, dass hierfür der SPI-Bus mit den Pins SCK, MISO und MOSI verwendetwerden. Zusätzlich bedarf es noch einer Verschaltung des Reset-Pins. Die folgendenPins des Arduino-Uno werden benötigt:

Tabelle: Die Pinszuordnung

Arduino-Pin Mikrocontroller-Pin10 1 (Reset)

11 17 (MOSI)

12 18 (MISO)

13 19 (SCK)

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 20: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 20Auf einem Breadboard kannst du dir recht einfach und schnell die Verkabelungrealisieren.

Abbildung: Die Schaltung zum Brennen des Bootloaders auf einem BreadboardKommen wir jetzt zu den erforderlichen Maßnahmen für die Arduino-IDE, so dass derBootloader seinen Weg in den noch leeren Mikrocontroller findet.

Öffnen des ArduinoISP-Sketches

Öffne über den Menüpunkt Datei|Beispiele|ArduinoISP den gleichnamigenArduinoISP-Sketch und lade ihn in die Arduino-IDE.

Hochladen des Sketches auf das Arduino-Uno-Board

Kompiliere diesen Sketch und lade ihn auf das Arduino-Board. Wähle dazu vorher dasArduino-Uno-Board über den Menüpunkt Werkzeuge|Board aus, was ja sicherlichschon der Fall sein sollte. Der zur brennende Mikrocontroller erhält über diesenVorgang noch nicht den Bootloader.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 21: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

21 |

Wählen des Ziel-Mikrocontrollers

Da du mit der Arduino-IDE verschiedene Bootloader für unterschiedlicheMikrocontroller brennen kannst, ist jetzt der Zeitpunkt gekommen, das gegebenfallsanzupassen. Das erfolgt ebenfalls über den genannten Menüpunkt Werkzeuge|Board.Da in unserem Fall jedoch das Zielsystem ebenfalls der ATmega328 ist, brauchst duhier nichts anzupassen.

Wählen des Programmers

Nun musst du den Arduino als ISP-Programmer über den MenüpunktWerkzeuge|Programmer auswählen. Merke dir aber, was du vorher dort alsEinstellung hattest, damit du sie später darauf zurückstellen kannst.

Brennen des Bootloaders

Nun kannst du letztendlich den Bootloader über den MenüpunktWerkzeuge|Bootloader brennen auf den Mikrocontroller übertragen.

Wo bekommen wir eigentlich den Bootloader her, der jaauf den Mikrocontroller gebrannt wird?

Eine berechtige Frage, Ardus! Die Arduino-IDE bringtdiesen Bootloader und so manch anderen von Hause ausschon mit. Wenn du die Gesprächigkeit der Arduino-IDEüber die Voreinstellungen noch beibehalten hast, dannbeobachte doch die Nachrichten im Ausgabe-Fenster. Dorterscheinen unter anderem die folgenden Zeilen.

avrdude: Device signature = 0x1e950f (probably m328p)avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option.avrdude: erasing chip

avrdude: reading input file "C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex"avrdude: writing flash (32768 bytes):Writing | ################################################## | 100% 0.00s

Ich habe die betreffende Zeile farblich markiert und wenn du im Dateisystemnachschaust, wirst du sehen, dass dort noch mehr Bootloader für dieunterschiedlichsten Mikrocontroller vorhanden sind.

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 22: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 22

Übertragung der Firmware mithilfe eines ISP-ProgrammersEine weitere Möglichkeit den Bootloader auf einen Mikrocontroller zu brennen, ist dieVerwendung eines speziellen ISP-Programmers. Ich möchte dir an dieser Stelle einigevorstellen. Sie werden über die USB-Schnittstelle angesprochen und mit einementsprechenden Kabel mit dem ICSP-Header des Arduino-Uno Boards verbunden.Dort immer auf die richtige Polung achten, denn die Buchse an dem Flachbandkabelbeziehungsweise die Pins des ICSP-Headers sind nicht verpolungssicher ausgelegt.

Der AVR Pocket-Programmer

Der AVR Pocket-Programmer ist ein kostengünstiger Programmer, der wunderbarmit avrdude und allen von ihm unterstützen Mikrocontrollern zusammenarbeitet.

Abbildung: Der AVR-ProgrammerDie Ausgabe zum Mikrocontroller wird gepuffert und er kann den angeschlossenenChip mit Spannung (Power Target) versorgen. Er liefert eine 6-Pin beziehungsweise10-Pin Unterstützung, ein entsprechendes Kabel liegt bei.

LinksDetailinformationen zum Programmer sind beispielsweise unter derfolgenden Internetadresse zu finden:

https://learn.sparkfun.com/tutorials/pocket-avr-programmer-hookup-guide

Ein AVR Pocket-Programmer ist beispielsweise bei Antratek erhältlich, dieunter der folgenden Internetadresse zu finden sind:-

http://www.antratek.de/

An dieser Stelle vielen Dank an Antratek ür die Unterstützung.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 23: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

23 |

Der DIAMEX-AVR

Ein weiterer interessanter Programmer ist der DIAMEX-AVR. Er befindet sich quasiin einem USB-Stick mit einem 6-Pin-Anschlusskabel. Auch er wird gut von avrdudeunterstützt und liefert die Spannungsversorgung für den zu programmierendenMikrocontroller:

Abbildung: Der Programmer AVR-DIAMEX

LinkWeitere Informationen sind unter der folgenden Internetadresse zufinden:

http://www.diamex.de/dxshop/DIAMEX-USB-ISP-Programmer-Stick-fuer-AVR

An dieser Stelle vielen Dank an Diamex für die Unterstützung.

Kommen wir abschließend in diesem umfangreichen Hack zum angekündigten AtmelStudio.

Die Programmierung mit Atmel StudioWer sich mit dem Arduino und seiner Plattform auskennt, der wird zurProgrammierung sicherlich die Arduino-Entwicklungsumgebung nutzen. Diese bietetalles, was man zur Umsetzung seiner Projekte beziehungsweise Sketche benötigt undich habe noch nie einen wirklichen Grund gesehen, etwas anderes zu nutzen. Dochseit dem ich das Atmel Studio gesehen habe, hat mich diese Entwicklungsumgebung

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 24: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 24sehr fasziniert. Das liegt vielleicht auch daran, dass ich schon seit längerer Zeit mitder Entwicklungsumgebung Visual Studio von Microsoft arbeite, denn Atmel Studiobaut darauf auf.

Normalerweise – das meint ohne installierten Bootloader - wird zur Programmierungeines Mikrocontrollers die ISP-Schnittstelle verwendet. Das hat den Vorteil, dass derChip zur Programmierung nicht aus der Schaltung ausgebaut werden muss unddadurch dieser Prozess erheblich schneller abläuft. Die durch das Kompilieren desQuellcodes generierte HEX-Datei wird – das ist sicherlich nichts Neues für dich -dadurch auf den Chip übertragen. Das alles ist nicht unbedingt benutzerfreundlichund wenn jedes Mal zur Programmierung ein externes Programmiergerät an dasMikrocontrollerboard angeschlossen werden muss, dann ist das auf Dauer rechtumständlich. Wenn es in diesem Buch um die Programmierung des Arduino-Unogeht, dann bedeutet das nicht, dass wir auch unbedingt und ausnahmslos dieArduino-IDE verwenden müssen. Aus diesem Grund zeige ich dir eine einfacheMethode, wie du mit dem Atmel Studio und einem vorhandenen Arduino-Bootloaderund der zuvor installierten Arduino-IDE wunderbar programmieren kannst. DieArduino-IDE wird lediglich dazu missbraucht, das avrdude-Programm für denFirmware-Upload zu nutzen, was aber auch bei Bedarf separat heruntergeladenwerden könnte. Die Details dazu haben wir bereits besprochen.

LinkNatürlich müssen wir zuerst das Atmel Studio installieren. Die Softwareist unter der folgenden Internetadresse zu bekommen und ist freiverfügbar:

http://www.atmel.com/Microsite/atmel-studio/

Die Installation geht recht einfach von der Hand und ich werde deshalb nicht daraufeingehen. Falls sich dennoch Probleme ergeben sollten, finden sich zahlreiche Hilfenim Internet. Bevor wir jedoch ans Programmieren mit Atmel Studio gehen, müssenwir das Programm avrdude als externes Tool einbinden und konfigurieren. Das gehtnach dem Öffnen von Atmel Studio über den Menüpunkt Tools|External Tools, wiedas auf der folgenden Abbildung zu sehen ist.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 25: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

25 |

Abbildung: Der Aufruf der External ToolsEs öffnet sich ein Dialog, der wie folgt ausschaut und der mit ein paar wichtigenInformationen versehen werden muss.

Abbildung: Das Anlegen eines neues External ToolsAls External Tool möchte ich an dieser Stelle avrdude als Upload-Tool in Atmel Studioeinbinden. Da die Zeilen etwas länger ausfallen, schreibe ich sie nicht direkt in dasDialog-Fenster, sondern separat auf.

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 26: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 26

Titel

Der Titel ist ein frei zu vergebender Name, der später im Menü Tools zur Auswahlerscheint. Ich habe mich für den Namen ArduinoUpload entschieden.

Command

In dem Textfeld Command muss der Pfad des auszuführenden Programms eingetragen werden, wasin unserem Fall ja avrdude ist. Der Pfad zum avrdude-Programm ist aus dem Arduino-Ausgabefenster - wir hatten das schon zu Beginn des Hacks besprochen - zu entnehmen und lautetin meinem Fall

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe"

Beachte hier die doppelten Anführungszeichen.

Arguments

Die Argumente von avrdude lauten bei mir:

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude.exe" -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM17 -b115200 -D -Uflash:w:

"C:\Users\ebartman\AppData\Local\Temp\arduino_build_762038/Blink.ino.hex":i

Beachte, dass ich auch hier wieder die Anführungszeichen setzen musste, damit diePfade auch korrekt erkannt werden. Doch Stopp! Die hier gezeigten Pfade sind die derArduino-IDE und dessen Verwaltungsstruktur und Atmel Studio nutzt sicherlich eineganz andere. Was also tun, damit Atmel Studio nach dem Kompilieren den Uploadauch ohne Probleme bewerkstelligen kann? Zum Glück verwendet Atmel Studion fürrelevante Pfade interne Variablen. Der folgende Teilbereich der Argumenten-Zeichenkette muss also angepasst werden:

Im Endergebnis lautet die Zeichenkette für die Argumente wie folgt:

-C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino –PCOM17 -b115200 -D -

Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 27: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

27 |

HinweisDer Anschluss für den COM-Port ist hier immer COM17. Bei etwaigenÄnderungen musst du das erneut anpassen!

Nachdem du das alles in das Dialog-Fenster eingetragen und bestätigt hast, erscheintim Tools-Menü der eben vergebene Name.

Abbildung: Der neue Eintrag „ArduinoUpload“ in den External ToolsDann sehen wir mal, was man in Atmel Studio so programmieren kann. Lege dazu einneues Projekt über den Menüpunkt File|New|Project an. Der folgende Dialog öffnetsich:

Abbildung: Ein neues Atmel Studio Projekt anlegen

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 28: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 28Wähle hier GCC C++ Executable Project und schließe diesen Vorgang im nächstenFenster mit der Wahl des richtigen Mikrocontrollers ab.

Abbildung: Die Wahl des richtigen MikrocontrollersGib nun den folgenden Quellcode in den Editor ein. Was wird dieser Code wohl bew

Abbildung: Der Quellcode in Atmel StudioSehen wir uns das im Detail an.

Zeile 1: In der ersten Zeile wird eine symbolische Konstante mit dem Namen F_CPUdefiniert und ihr der Wert 16000000UL zugewiesen. Es handelt sich um dieTaktfrequenz unseres ATmega328 mit 16MHz. Das Kürzel UL bedeutet UnsignedLong und beschreibt eine vorzeichenlose Zahl den Datentyps long.

Zeile 2 und 3: Über die beiden Zeilen werden Header-Dateien eingebunden, die zurAusführung des Programms erforderlich sind. In der Datei avr/io.h sind die Register-Definitionen wie DDRB, PORTB, und weitere festgelegt. Die Datei util/delay.h istbeispielsweise erforderlich, weil du später die Funktion _delay_ms (Delay inMillisekunden) aufrufst.

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 29: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

29 |

Zeile 5 bzw. 14: In der Programmiersprache C/C++ ist die Funktion main zwingenderforderlich und dient als Einstiegspunkt für die Ausführung eines Programms.

Zeile 7: Hier wird das Data-Direction-Register für Port B konfiguriert:

Es wird eine 1 an die Position geschrieben, die für Pin 13 des Arduino-Boardsverantwortlich ist. Das bedeutet, dass der Pin als Ausgang konfiguriert wird.

Zeile 8: Durch die while-Schleife, die mit dem Wert 1 eine Endlosschleife darstellt,werden alle in ihr enthaltenen Befehle der Zeilen 9 bis 12 kontinuierlich ausgeführt.

Zeile 9 und 10: Über die Zeile

PORTB |= 0B00100000;

wird mithilfe der ODER-Verknüpfung das Bit an Position 5 gesetzt und der Pin miteinem HIGH-Pegel versehen. Die angeschlossene LED beginnt zu leuchten. Über dieanschließende Zeile

_delay_ms(100);

wird eine Pause von 100ms eingelegt.

Zeile 11 und 12: Über die Zeile

PORTB &=~(1 << PB5);

wird das Bit wieder auf 0 zurückgesetzt und die angeschlossene LED verlischt überden vorherrschenden LOW-Pegel. Dann folgt wieder die 100ms-Pause in Zeile 12.

Um Himmels Willen, was ist denn das fûr ein Befehl inZeile 11. Das ist ja vollkommen kryptisch.

Du hast Recht, Ardus! Das ist auf den ersten Blick vielleichtetwas gewöhnungsbedürftig, aber ein geschultes Auge, sowie du das bald haben wirst, erkennt das sofort. Wenn duein Bit setzen möchtest, dann ist das über eine ODER-Verknüpfung zu realisieren. Das hast du in Zeile 9 gesehen.Die folgende Tabelle zeigt dir die Zusammenhänge ,

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 30: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 30:

Tabelle: Wahrheitstabelle für bitweise Oder-Verknüpfung

Damit das Ergebnis 1 sein soll, muss einer von beiden Operanden eine 1 besitzen unddarüber kann dann ein Bit im Endeffekt gesetzt werden. Um nur ein einzelnes Bit zusetzen und alle anderen unberührt zu lassen, gibt es die unterschiedlichsten Ansätze.Du hast dazu die Schreibweise

PORTB |= 0B00100000;

genutzt, was eine ODER-Verknüpfung mit sich selbst bedeutet, also dieKurzschreibweise für

PORTB = PORTB | 0B00100000;

ist. Eine weitere Möglichkeit besteht in der Verschiebung einer 1 an die betreffendeStelle über die Syntax

PORTB |=(1 << PB5);

Vielleicht kommt dir das PB5 etwas kryptisch vor, doch es ist eine Definitionbeziehungsweise Konstante in der Datei avr/io.h vorhanden, die den Wert 5 besitztund die Bitposition angibt. Die Schiebeaktion läuft wie folgt ab:

Nun kannst du aber durch eine ODER-Verknüpfung kein Bit löschen und du musstdazu eine UND-Verknüpfung anwenden. Zur Erinnerung hier noch einmal dieWahrheitstabelle.

A B A|B0 0 0

0 1 1

1 0 1

1 1 1

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 31: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

31 |

Tabelle: Wahrheitstabelle für bitweise Und-Verknüpfung

Nur, wenn beide Operanden eine 1 besitzen, ist auch das Ergebnis 1. Mit einer 0kannst du also eine bestehende 1 löschen und zur 0 machen, was über die ODER-Verknüpfung nicht zu realisieren war. Du möchtest also die LED an Pin 13 nunwieder zum Erlöschen bringen. Dafür wäre die folgende Bitkombination erforderlich,wobei ich alle anderen mit einem X gekennzeichnet habe, denn sie interessieren imMoment nicht.

Über die Zeile

PORTB &=~(1 << PB5);

wird eine 1 an die betreffende Position (Pin 13) geschoben und über die NOT-Operator(~) in sein Gegenteil verkehrt und Port B erneut zugewiesen. Alle anderen Bitsbleiben von dieser Aktion unberührt. Nun ist es an der Zeit, den Code zu Kompilieren.Das machst du über den Menüpunkt Build|Build Solution oder du drückst dirFunktionstaste F7. Beobachte dabei den Ausgabebereich mit den Meldungen überdiesen Vorgang. In der letzten Zeile sollte dann stehen:

Build succeeded.========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Jetzt kannst du über den Menüpunkt Tools|ArduinoUpload den Upload-Vorgang aufden Mikrocontroller starten. Sehen wir uns zum Abschluss noch die einfacheVerkabelung des Boards an.

A B A&B

0 0 0

0 1 0

1 0 0

1 1 1

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 32: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 32

Abbildung: Das verkabelte Ardu-Board

Ein Hack im HackNun sind wir in diesem Hack so weit gekommen, dass ich nicht umhin kann, einenMini-Hack im großen Hack vorzustellen, denn das passt hier wunderbar hinein. Duhast gesehen, wie wir zum Brennen des Bootloaders eine Schaltung auf demBreadboard aufgebaut haben. Das ist schön und gut, doch auf Dauer möchtest dusicherlich eine derart brauchbare Schaltung nicht auf einem instabilen Breadboardbelassen. Was hältst du von der folgenden kleinen Platine, die wunderbar oben aufden Arduino-Uno als Mini-Shield aufgesteckt werden kann?

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 33: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

33 |

Abbildung: Der Ardu-Bootloader BurnerWie du siehst, sind nicht viele Bauteile dafür erforderlich und ich habe das Ganze inungefähr einer Stunde so zusammengebaut und mit Labels versehen. Welche Bauteilebenötigst du dafür?

Abbildung: Die Bauteile für den Ardu-Bootloader BurnerEs handelt sich nahezu um die gleichen Bauteile, die du schon verwendet hast und ichliste sie hier noch einmal auf. Es sind lediglich ein Vorwiderstand und eine LED zurAnzeige der Spannungsversorgung hinzugekommen.

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 34: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 34Platinenstück (23mm x 53mm) 1xStiftleiste 1xQuarz 16 MHz 1xKeramikkondensator 22pF 2xLED 3mmWiderstand 330ΩWiderstand 10KΩDIL-Fassung 28-polig 1x

Wenn du dir das Platinenstück zurechtschneidet, pass‘ auf, dass es genau über dieHeader des Arduino-Uno passt. Es liegt also über der digitalen Pinleiste Pin 8 bis 13(10-polig) und der Spannunsgversorgungsleiste (6-polig). Stecke am besten diezurechtgeschnittenen Stiftleisten in die genannten Header und lege dasPlatinenstück darüber, so dass die Stifte in die Löcher der Platine passen. Markieredann die Schnittkanten und passe die Größe an. Ich zeige dir das kleine Shield hiereinmal von unten, wobei auch die Verkabelung zu erkennen ist.

Abbildung: Das Ardu-Bootloader Burner-Shield von der Lötseite gesehenDie Verdrahtung entspricht dem des Aufbaus auf dem Breadboard und ich führe siehier nicht noch einmal auf. Beim Anbringen der beiden Stiftleisten musst du diese vonunten verlöten, wie das auf der folgenden Abbildung zu erkennen ist. Lasse zwischender Platine und der Stiftleiste ca. 2mm Platz, so dass du dort die Lötpunkte setzenkannst:

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken

Page 35: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

35 |

Abbildung: Die Lötstellen der Stiftleisten

Was haben wir gelernt?In diesem recht umfangreichen Hack hast du einiges über das Herstellen von eigenenSchaltungen auf selbst angefertigten Platinen gelernt. Du hast dir dein eigenesArduino-Board gebastelt und die Grundlagen des Mikrocontrollers ATmega328 mitdessen Ansteuerung kennengelernt. Wir haben die Funktion des Bootloadersbesprochen und wie es möglich ist, einen Sketch auf den Mikrocontroller zuübertragen beziehungsweise zu brennen. Das Programm avrdude leistet dabei guteDienste und ist in diesem Bereich weit verbreitet. Du hast gesehen, wie man miteinem Arduino-Board sehr einfach einen Bootloader auf einen Mikrocontrollerübertragen kann, und dass dazu kein separater Programmer erforderlich ist. Fallsdennoch einmal der Einsatz eines ISP-Programmers non Nöten sein sollte, hast duzwei unterschiedliche und kostengünstige Programmer kennengelernt, die je unter20€ kosten. Du hast gesehen, wie einfach es ist, die Entwicklungsumgebung AtmelStudio für das Programmieren des Arduino-Uno zu nutzen und damit ein richtigprofessionelles Tool zu haben. Abschließend haben wir unser eigenes Mini-Shield –den Ardu-Bootloader Burner - für das Brennen eines Bootloaders auf den ATmega328gebaut.

(Copyright Erik Bartmann)

| Der Arduino-Bestseller von Erik Bartmann in Neuauflage

Page 36: Mikrocontroller neu - erik-bartmann.de · | 2 978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken Build your own Arduino Nun ist es so weit, dass wir uns einem sehr interessanten

| 36

978-3-946496-00-7 |Mit Arduino die elektronische Welt entdecken