Dienstag, 19. Mai 2015

Mikrocontroller mit Arduino Programmieren

Mittlerweile haben wir schon einiges darüber gelernt wie man einen Arduino programmiert. Doch für viele Projekte ist es notwendig mehrere Arduinos zu programmieren. Da man aber nicht immer zwei Arduinos zur Hand hat, kann man sich auch einfach den Kern des Arduino kaufen und programmieren, einen Mikrochip.


Die Modelle

Es gibt viele verschieden Firmen und Modelle von Mikrocontrollern. Eine weit verbreiteter Hersteller ist die Firma Atmel. Sie produziert auch die Mikrocontroller der verschiedenen Arduino Varianten. Sie hat insgesamt drei Reihen die ATtiny, die ATmega und die ATxmega Serien. Die ATtiny sind wie der Name schon sagt sehr klein und beginnen schon unter 2€, haben jedoch auch nur wenige Pins(~12). Die ATmega Serie beinhaltet die großen Mikrochips wie den ATmega328 des Arduino. Die ATxmega Serie sollte eine Verbesserung der ATmega Serie werden wobei sie sich immer mehr als Flopp erweist. Jeder Mikrochip hat einen gewissen Namen der die Baureihe und die Flashspeichergröße angibt. Für eine genaue Übersicht aller verfügbaren Modelle schau doch mal bei mikrocontroller.net / vorbei. Wichtige Größen die beim Kauf beachtet werden sollten sind die benötigten Pins(also Pinanzahl und Art) sowie die benötigte Spannung, der Prozessor Takt, die Flashspeicherkapazität und die Größe des Arbeitsspeichers(RAM).
Da ich einen Arduino Uno habe und mit seine Leistung und der Anzahl der Pins zufrieden war habe ich mir den Kern des Arduino Uno, den ATmega 328  gekauft. Noch ein Hinweis am Rande: Ich würde immer empfehlen nicht nur einen Mikrochip zu bestellen sondern zwei oder drei, da man dann immer die Gewissheit hat und überprüfen kann ob der Controller kaputt ist. Außerdem muss man dann nicht immer nachkaufen. :)

Die Verkabelung und das Hochladen

Das ist meiner Meinung nach der schwierigste Teil überhaupt und auch ich saß 4 Tagen lang und habe es ausprobiert bis ich es geschafft habe, also lass den Kopf nicht hängen:). Um eine Mikrocontroller zu programmieren gibt es verschiedene Möglichkeiten. Eine Gängige ist sich einen ISP(In System Programmer) zu kaufen. Eine Andere einen Bootloader aufzuspielen und per USB to Serial  Adapter zu programmieren. Da ich bereits einen Arduino besitze verwende ich meinen Arduino als ISP für meine Mikrocontroller. Das geht relativ gut, wenn man einige Dinge unbedingt beachtet. Die Pins eines Mikrochips werden genauso wie die eines anderen Teils gezählt. Wenn links der Halbkreis am Rand ist, ist Pin 1 links unten und Pin 28 links oben. Da ein Mikrocontroller Strom braucht wird er an Pin 7 und 20 mit den 5V Spannung versorgt. Pin 8 und 22 werden mit dem Ground verbunden. Zur Datenübertragung mit dem Arduino wird Pin eins des Mikrochips mit Pin 10 des Arduino verbunden sowie Pin 17 mit Pin 11, Pin 18 mit Pin 12 und Pin 19 mit Pin 13.Das sieht dann so aus:
Wenn man nun ein Programm hochladen will kann man nicht einfach auf hochladen klicken, da sonst der Sketch auf dem Arduino landet und wir den Arduino ja als ISP verwenden möchten. Dazu müssen wir erst einmal ein Programm auf den Arduino laden, das ihn in einen ISP für den Computer verwandelt. Diese findet ihr unter Datei > Beispiele > ArduinoISP. Wenn das hochgeladen ist, ist der Arduino fertig konfiguriert. Vielleicht erinnert ihr euch ja noch, dass ihr als ihr die Arduino Software installiert habt, ihr euren Arduino als Zielplattform unter Werkzeuge > Platine auswählen musstet. Nun wollen wir jedoch nicht einen Arduino programmieren sondern den ATmega328 alleine. Deshalb müssen wir erst ihn als Zielplattform auswählen. Da seine Daten jedoch nicht vorinstalliert sind müssen wir das nachholen. Dazu müsst ihr unter http://arduino.cc/en/uploads/Tutorial/Breadboard1-5-x.zip die Datei herunterladen und in eurem Arduino Ordner einen Unterordner namens "Hardware" erstellen und dorthin entpacken. Dann solltet ihr nach einem Neustart eurer Arduino IDE unter Werkzeuge > Platine das Folgende sehen:
Wählt nun ATmega328 on a breadbord(8 Mhz internal clock) aus und wählt unter Werkzeuge > Programmer den Punkt Arduino as ISP aus. Nun könnt ihr als Test einen Bootloader auf eueren Mikrocontroller spielen. Wählt dazu Werkzeuge > Bootloader brennen. Nun sollten die TX und RX LEDs des Arduino leuchten und nach einigen Minuten die Meldung "Bootloader erfolgreich gebrannt erscheinen". Wenn ihr auch ein Programm hochladen wollt, so öffnet ihr dieses ganz normal müsst dann jedoch für den Upload auf Datei > Hochladen mit Programmer drücken. Ganz wichtig ist, dass ihr immer, bevor ihr Sketche auf den externen Mikrocontroller ladet, den ISP Sketch auf den Arduino spielt sowie ATmega 328 on a breadbord und Arduino as ISP auswählt.

Ein Programm

Wenn wir einmal unser allererstes Programm (die leuchtende LED) auf den Mikrocontroller spielen merken wir dass Pin 13 des Mikrocontrollers ungleich Pin 13 des Arduino ist, da die LED an Pin 13 nicht leuchtet. Die "Übersetzung" sieht so aus:
Beispielsweise wäre also Pin 13 des Arduino Pin 19 des Mikrocontrollers und Pin 13 des Mikrocontrollers Pin 7 des Arduino. In einem Sketch werden immer die Arduino Pins gewählt, wobei dann bei einem Mikrocontroller auf dem Breadbord "umrechnen" muss. Sobald ein Programm hochgeladen ist kann man die Datenleitungen zum Arduino unterbrechen, nur die Stromversorgung muss bleiben. Das Ergebnis ist dann eine, von einem eigenständigen Mikrocontroller gesteuerte, LED.
Ich hoffe ich habe alles verständlich erklären können. :) Schreibt doch mal in die Kommentare, ob es bei euch geklappt hat.

Kommentare:

  1. Hallo,

    Dein Tutorial ist wirklich sehr hilfreich.
    Ich versuche das gerade mit einem Arduino Due nachzumachen aber ich bekomme den bootloader nicht auf den AtMega382P.
    Als Fehlermeldung bekomme ich :
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x03

    das geht dann weiter bis 10 of 10.

    Übersehe ich da was?

    AntwortenLöschen
    Antworten
    1. In diesem Fall solltest du alle Kabelverbindung nochmal überprüfen, auch die Stromversorgung des Mikrocontrollers, und darauf unbedingt darauf achten, dass auf dem Arduino der ISP Sketch ist, in der IDE die passende Zielplattform (dein ATmega328P) eingestellt ist, du auf AVR as ISP geschaltet hast, und du auf Upload mit Programmer drückst.

      Normalerweise führt die Missachtung einer dieser Punkte zu deiner Fehlermeldung.

      Löschen