Arduino Pro Mini: Pinout und Programmierung mit seriellem Adapter


Der Arduino Pro Mini ist der von den Abmessungen kleinste Vertreter der Arduino-Familie mit einem ATmega 328P-Chip. Er ist noch kleiner als der Arduino Nano.

Die Platzersparnis des Arduino Pro Mini bringt mit ein paar Einbußen gegenüber dem Arduino Nano mit:

Der Arduino Pro Mini hat keinen USB-Port, das heißt, man kann ihn nicht direkt an den PC zum Programmieren anschließen, sondern braucht einen seriellen Adapter, z. B. einen mit FTDI Chip, wie wir ihn schon zur Programmierung der STM32 BluePill benutzt haben. Der serielle Chip fehlt nämlich auf der Platine.

Weiterer Nachteil: die Pins sind nicht 100%ig für den Einsatz in einem Breadboard geeignet. Wenn man die Lötösen mit Header-Pins bestückt (also anlötet) und ihn in ein Breadboard steckt, sind eigentlich nicht alle Pins über das Breadboard erreichbar. A4 und A5 liegen in zweiter Reihe zwischen den Pins (bei A2 und A3). Und A6 und A7 liegen auf der Seite im 90° Winkel. Hier kann man bei Breadboard-Verwendung keine Header einlöten, weil sie nicht ins Brett passen würden bzw. einen Kurzschluss verursachen würden.

A4 und A5 sind aber wichtig für den I2C-Bus. Man kann sich damit behelfen, hier noch oben zeigende (also auf der Unterseite verlötete) Header einzulöten und dann Female-Male-Jumper-Kabel zu verwenden.

Ein Reset-Taster und ein Spannungswandler sind aber vorhanden. Die Stromversorgung erfolgt nicht über die USB-Buchse (die ist ja nicht vorhanden) sondern über den RAW-Pin. Hier kann man eine Spannung von 6 bis 12 Volt anlegen, die dann zur Versorgungsspannung umgewandelt wird.

Die restlichen Pins sind alle auf der Platine beschriftet (ansonsten siehe das Foto rechts) und sollten soweit bekannt sein, so dass ich sie hier nicht noch einmal erklären muss.

Version des Pro Mini feststellen

Es gibt übrigens Versionen des Arduino Pro Mini mit 3.3 Volt oder mit 5 Volt Betriebsspannung. Und es gibt Versionen mit 8 oder 16 Mhz Taktfrequenz. Um möglichst kompatibel zum Arduino Uno und NANO zu bleiben, empfiehlt sich die 5V Version mit 16 Mhz, wie es auch der Uno und Nano haben. Aber wenn es einer anderen Variante bedarf, hat man die Auswahl.

Auf der Rückseite der Platine sollte eigentlich angekreuzt sein, um welche Version es sich handelt. Fehlt diese Angabe, so muss man vorher feststellen, welche Version man hat, nicht dass man sie mit zuviel Spannung versorgt und etwas kaputt macht.

Dazu legt man eine Spannung zwischen 6 und 12 V an RAW an, etwa vom Labor-Netzteil und misst mit einem Multimeter am Pin VCC (und natürlich GND). Dann sieht man, ob als Ausgangsspannung 3.3V oder 5V generiert werden und welche Version man hat.

Ich zeige das Vorgehen zur Identifikation in diesem Video:



Programmierung des Pro Mini mit einem seriellen Adapter


Da der Arduino Pro Mini keinen seriellen Chip und keine USB-Buchse an Bord hat, müssen wir einen externen bemühen. Entweder benutzen wir einen FTDI-Adapter mit Mini-USB-Eingang, wie schon bei der STM32 BluePill geschehen, oder wie ich heute einen externen seriellen Adapter mit einem seriellen Chip CH340, den wir ja schon von den vielen Arduino-Clones kennen, dort ist er praktisch Standard.

Der externe Adapter hat den Vorteil, dass er ein Gehäuse hat und wir ihn direkt in den USB-Port unseres PCs stecken können. Am anderen Ende des Adapters werden dann Female-to-Male-Jumperkabel eingesteckt und wie folgt verbunden:

Das RX (Read, lesen) und TX (Transmit, schreiben) geht und umgekehrt ist richtig. Denn was der eine schreibt, soll der andere ja lesen. Wir haben hier also im Prinzip ein über kruez verbundenes Nullmodemkabel, falls das noch jemand kennt.

Bitte keine 5V auf ein 3.3V-Modell, falls ihr das habt. Das könnte den Pro Mini erstören.

Ich habe zur Programmierung wieder Visual Studio Code mit Platform IO (Artikel dazu) gewählt, weil das einfach komfortabler ist als die Arduino IDE. Aber mit der funtkioniert das natürlich ganz ähnlich.

Zuerst wählen wir die richtige Arduino Pro Mini-Variante aus, in meinem Fall 5V/16Mhz:



Das führt zu folgender platformio.ini, in der wir auch gleich den richtigen Port für den seriellen Adapter angeben. Den finden wir im Geräte-Manager unter Windows. [env:pro16MHzatmega328] platform = atmelavr board = pro16MHzatmega328 framework = arduino upload_port = COM21 monitor_port = COM21 monitor_speed = 115200 Und schon können wir unseren Code hochladen. Eventuell muss der Reset-Taster vor dem Upload gedrückt und gehalten werden, bis die Meldung Uploading .pio\build\pro16MHzatmega328\firmware.hex erscheint (erst dann loslassen), damit die neue Firmware geschrieben wird.
Processing pro16MHzatmega328 (platform: atmelavr; board: pro16MHzatmega328; framework: arduino) ----------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/pro16MHzatmega328.html PLATFORM: Atmel AVR 2.2.0 > Arduino Pro or Pro Mini ATmega328 (5V, 16 MHz) HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 30KB Flash DEBUG: Current (simavr) On-board (simavr) PACKAGES: - framework-arduino-avr 5.0.0 - tool-avrdude 1.60300.200527 (6.3.0) - toolchain-atmelavr 1.50400.190710 (5.4.0) LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 10 compatible libraries Scanning dependencies... No dependencies Building in release mode Checking size .pio\build\pro16MHzatmega328\firmware.elf Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" RAM: [ ] 0.4% (used 9 bytes from 2048 bytes) Flash: [ ] 3.2% (used 970 bytes from 30720 bytes) Configuring upload protocol... AVAILABLE: arduino CURRENT: upload_protocol = arduino Looking for upload port... Use manually specified: COM21 Uploading .pio\build\pro16MHzatmega328\firmware.hex avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x53 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x53 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: reading input file ".pio\build\pro16MHzatmega328\firmware.hex" avrdude: writing flash (970 bytes): Writing | ################################################## | 100% 0.29s avrdude: 970 bytes of flash written avrdude: verifying flash memory against .pio\build\pro16MHzatmega328\firmware.hex: avrdude: load data flash data from input file .pio\build\pro16MHzatmega328\firmware.hex: avrdude: input file .pio\build\pro16MHzatmega328\firmware.hex contains 970 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.22s avrdude: verifying ... avrdude: 970 bytes of flash verified avrdude: safemode: Fuses OK (E:00, H:00, L:00) avrdude done. Thank you.

Ich habe das folgende, kurze Programm zum Testen benutzt: #include <Arduino.h> void setup() { pinMode(10,OUTPUT); pinMode(LED_BUILTIN,OUTPUT); digitalWrite(10,HIGH); } void loop() { digitalWrite(LED_BUILTIN,HIGH); delay(500); digitalWrite(LED_BUILTIN,LOW); delay(500); } Durch das LED-Blinken kann ich gleich erkennen, dass der Upload der Firmware funktioniert hat. Außerdem wollte ich einen Pin auf High setzen, um zu sehen, welche Spannung der Arduino Pro Mini dann liefert.

Meine Messung mit dem Multimeter ergeben +5V. Keine 3.3V, die ich für mein Display brauche. Dann werde ich nicht umhin kommen, dafür einen Spannungsteiler auf dem eh schon enge Board zu bauen. Aber das ist ein anderes Thema.

Wenn man das Board aus Fernost hat, sollte man nicht unbedingt darauf vertrauen, was auf der Rückseite angekreuzt ist, also ob 3.3V oder 5V-Version. Wenn überhaupt ein Kreuz vorhanden ist. Besser ist immer, bevor man irgendwelche 3.3V-Hardware anschließt, selbst durchzumessen. Denn allzuleicht kann hier etwas durcheinandergeraten und man möchte doch nicht seine 3.3V-Sensoren oder Displays mit 5V zerschießen.