Nehmen wir uns mal einen Arduino Pro Mini in der Variante mit 3.3V vor, um ihn zu programmieren.
Wie auch schon im Blog zum programmieren eines ATtiny-Mikrocontrollers [1] zeige ich Euch wie Ihr entweder mit einem Arduino (Uno) oder einem USB-Programmer einen Pro Mini mit einem Sketch versehen könnt. Dort beschreibe ich auch ausführlich den USB-Programmer samt Kabelanschluss.
Ganz wichtig!!! Ihr braucht unbedingt eine Stromversorgung die konstant nicht mehr als 3.3 Volt liefert, sonst könnte es sein, dass Ihr Euren Pro Mini schrottet. Die USB-Buchse Eures Computers liefert je nach USB-Port eine Spannung, die darüber liegt.
Benutzt Ihr die 5V-Variante, könnt Ihr sie ohne Spannungswandler direkt mit dem Strom aus der USB-Buchse versorgen.
Folgende Übersicht zeigt Euch die Spannung und die Stromstärke an, die Euer USB-Port bereitstellt.
- 4,40 V bis 5,50 V an einem Low Powered Port (100 mA)
- 4,75 V bis 5,50 V an einem High Powered Port (500 mA)
- 4,45 V bis 5,50 V an einem USB 3.0-Port (900 mA)
Ihr könnt nun entweder zwei AA(A)-Batterien als Stromquelle nehmen, dann habt Ihr eine Spannung von rund 3 Volt, oder Ihr baut Euch einen kleinen Spannungsregler auf einem Breadbord auf, oder lötet gleich einen auf eine Lochrasterplatine (üben, üben, üben 🙂 ), wenn Ihr regelmäßig 3.3 V Mikroprozessoren auf dem Breadboard programmieren möchtet.
Schaut Euch hierzu die folgenden zwei Seiten an. Dort findet Ihr einen Spannungsregler von 9V->5V->3.3V und einen kleinen, den man wunderbar für den USB-Port verwenden kann, da er die rund 5V des USB-Anschlusses ohne großen Verlust in 3.3V wandelt.
![]() |
Spannungsregler 9V [2] |
![]() |
Spannungsregler 5V [3] |
Programmieren mit dem USBasp-Programmer
Schauen wir uns zuerst einmal die Pinbelegung an, um die Leitungen zu finden, die wir zum programmieren benötigen:
Somit ergibt sich folgende Belegung:
Programmer | Arduino Pro Mini | |
MOSI Pin 1 | <-> | Pin 11 |
RESET Pin 5 | <-> | RST |
SCK Pin 7 | <-> | Pin 13 |
MISO Pin 9 | <-> | Pin 12 |
VCC Pin 2 | <-> | VCC |
GND Pin 4 | <-> | GND |
Los gehts. Verkabeln wir nun unseren Pro Mini nach der ermittelten Pinbelegung.
Die vier benötigten Datenleitungen sind mit den roten Kabeln auf dem Breadboard verkabelt. +5V und GND laufen vom Programmer direkt in den Spannungswandler und regeln sie auf konstante 3.3 V herunter. Von dort aus geht es mit +3.3V und GND an die entsprechenden Pins des Pro Minis.
Jetzt verbinden wir den Programmer mit unserem USB-Anschluss und laden unsere Arduino-IDE.
In der IDE gehen wir auf “Werkzeuge” und wählen als “Board” das “Arduino Pro or Pro Mini” aus.
Als “Processor” den “ATMega328 (3.3 V, 8 MHz)”
Dort könnt Ihr auch einen grundlegenden Unterschied zur 5 Volt Variante erkennen, denn die 3.3V-Variante hat auf Grund ihrer geringeren Spannungsaufnahme nur einen 8Mhz-Quarz.
Der “Port” ist egal, aber bei “Programmer” müssen wir “USBasp” auswählen.
Im Anschluss laden wir einen kleinen Testsketch hoch. Da es sich ja um einen ATMega328 handelt, ist die Pinbelegung wie auf unserem Uno nahezu gleich. Daher können wir auch das Beispielsketch aus “Datei” -> “Beispiele” -> “01. Basics” -> “Blink” unverändert übernehmen. Auf dem Board ist auch eine SMD-LED auf Pin 13.
Hier ist aber der Sketch noch einmal:
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } |
Wenn der Prozessor unter “Werkzeuge” und der Programmer korrekt festgelegt wurden, können wir unseren Sketch auf den Pro Mini schieben.
Achtung: Wenn Ihr nur auf “Sketch” -> “Hochladen” oder den Rechtspfeil anklickt, wird folgende Fehlermeldung ausgegeben:
avrdude: ser_open(): can’t open device “\\.\COMx”: Das System kann die angegebene Datei nicht finden.
Das ist völlig normal, denn am COMx-Port hängt ja derzeit kein Gerät. Wir müssen entweder “Sketch” -> “Hochladen mit Programmer” oder die Großschreibtaste gedrückt halten und mit der Maus den Rechtspfeil auswählen, damit unser Sketch über den Programmer auf den Pro Mini kopiert wird.
Wenn der Sketch fehlerfrei kompiliert und übertragen wurde, fängt unsere eingebaute rote LED an zu blinken und wir haben unseren ersten Pro Mini 3.3 V mit einem Programmer programmiert.
Programmieren mit dem Arduino Uno als Programmer
Vom Grundprinzip zum programmieren mit einem USB-Programmer ist das hier nicht viel anders. Im Internet gibt es so viele Anleitungen die alle darauf abzielen, dass man auf seinem Uno den Prozessor runtermacht – so fern man wie ich einen mit DIP-Sockel hat und den man im Gegensatz zu den SMD-Versionen auch runtermachen kann, aber das ist irgendwie gar nicht nötig. Wir gehen genau so vor, als würden wir einen ATtiny programmieren mit einem Uno und reißen ihm nicht seinen Prozessor von der Platine.
Als erstes müssen wir jetzt wissen, wo auf unserem Uno die entsprechenden Datenleitungen sind die wir benötigen. Das wären MOSI, RESET, SCK und MISO. So wie natürlich +3.3 V und GND.
Parallel wieder das Pinout zum Pro Mini:
[4]
Somit ergibt sich folgende Belegung:
Arduino Uno | Arduino Pro Mini 3.3 V | |
MOSI Pin 11 | <-> | Pin 11 |
RESET Pin 10 | <-> | RST |
SCK Pin 13 | <-> | Pin 13 |
MISO Pin 12 | <-> | Pin 12 |
3.3V | <-> | VCC |
GND | <-> | GND |
Haben wir auf unserem Uno noch kein ArduinoISP-Programmer-Sketch aus den Beispielen hochgeladen, so müssen wir das als Erstes tun.
Hierzu öffnen wir den Sketch unter “Datei” -> “Beispiele” ->”11.ArduinoISP” -> “ArduinoISP” und übertragen ihn wie gewohnt per USB auf unseren Uno.
Jetzt ist er bereit und kann weitere Chips programmieren.
Jetzt können wir unser Breadboard mit dem Pro Mini drauf mit dem Uno verbinden. Achtet darauf, dass Ihr 3.3 V und nicht 5 V nehmt.
Hier brauchen wie definitiv einen Elektrolyt-Kondensator mit einem Wert von rund 10 µF den wir zwischen GND und dem Reset-Pin des Arduinos setzen. Unbedingt auf Polarität achten! GND = Minus, Reset = Plus.
Als ich die Schaltung ohne ELKO verwenden wollte, kam es beim Hochladen eines Sketches immer zu folgender Fehlermeldung:
Problem beim Hochladen auf das Board. Hilfestellung dazu […]
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x70
Abschließend verbinden wir unseren Arduino mit dem USB-Kabel mit dem Computer und laden das Standard-Blink-Sketch wie hier aufgeführt:
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(100); // wait } |
Ich habe ein Delay von 100 ms eingefügt, da wir im vorherigen Versuch mit dem USBasp-Programmer ein Delay von 1000 hatten. Somit blinkt jetzt unsere LED viel schneller.
[6]Bevor wir unser Sketch auf den Pro Mini hochladen können, müssen wir in der IDE “Werkzeuge” anklicken und wählen als “Board” das “Arduino Pro or Pro Mini” aus.
Als “Processor” den “ATMega328 (3.3 V, 8 MHz)”
Der “Port” ist egal, aber bei “Programmer” müssen wir “Arduino as ISP” auswählen.
Nun laden wir unseren Sketch hoch, verwenden dafür aber entweder unter “Sketch” den Menüpunkt “Hochladen mit Programmer“, oder halten unsere Großschreibtaste gedrückt und klicken den “Hochladen”-Pfeil an. Es erscheint dann auch nicht wie gewohnt der Text “Hochladen”, sondern “Hochladen mit einem Programmer”.
Wenn alles fehlerfrei kompiliert und hochgeladen wurde, stellen wir etwas ungewöhnliches fest: Auf dem Uno und auf dem Pro Mini blinken die LED synchron.
Das liegt aber nur daran, dass ja beide Prozessoren mit dem Pin 13 verbunden sind. Euer Sketch ist nicht auf dem Uno gelandet, sondern auf dem Pro Mini.
Abschließend trennen wir nun den Uno vom Pro Mini und versorgen diesen mit einer externen Stromquelle. Ich habe hierzu wieder meinen Spannungswandler genommen, an dem ich eine 9 V-Blockbatterie dranhängen habe. Diese werden für den Pro Mini auf 3.3 V umgewandelt und wir sehen, dass unser Blink-LED-Sketch auch ohne angeschlossenen Arduino Uno als Programmer wieder läuft.
So, das waren zwei der Wege wie man weitere Prozessoren programmieren kann. Man braucht immer einen Programmer, wenn man “nackte” Prozessoren programmieren will. Dabei ist es gleich, ob wir den Arduino verwenden und ihn mit einem Sketch zu einem Programmer umfunktionieren, oder beispielsweise den USBasp-Programmer verwenden, der ja ebenfalls auf seinem verbauten ATtiny ein Programm installiert hat, was ihn auch zu einem Programmer macht.