Den ATMEGA168 mit der Arduino IDE programmieren kann eine Ausweg sein, um Arduino-basierte Projekt umsetzen zu können. Mit der Corona Krise wurde es für Projekte, die auf den Microcontroller ATMEGA328P (das ist der aus dem Arduino Uno) setzten, schwer. Der ATMREGA328P ist quasi seit zwei Jahren nicht lieferbar. Viele Anwendungen kommen mit etwas weniger Ressourcen aus, so dass der ATMEGA168 eine Alternative darstellt. Die Programmierung hat jedoch ein paar Hürden. Der Beitrag zeigt, wie man den Microcontroller ATMEGA168 mit der Arduino IDE programmieren kann.
Siehe auch:
Raspberry Pico W im WLAN mit Python – eine Einführung
Bodenfeuchtesensor webbasiert mit dem ESP8266
11.03.2023
Motivation
In manchen Projekten führt kein Weg an den AVR-Prozessoren vorbei, sei es, wenn ein augeklügeltes Energiemanagment erforderlich ist, oder es schlicht nut Bibliotheken für bestimmte Anwendungsfälle gibt. Soll z. B. wie im Projekt Biene40 ein Gateway für 433 MHz aufgebaut werden, das Daten über SofwareSerial oder Manchester Code entgegennimmt, ist man auf AVR-Prozessoren angewiesen. Außerdem weist keine andere Prozessorfamilie eine so beachtlich Stabilität im Feld auf. Das hatte zur Folge, dass insbesondere Automobilhersteller zu Beginn der Coriona-Krise alle diese Microcontroller aufgekauft hatten. Viele Projekte sind z,B. mit ESP8266 umsetzbar, in manchen Fällen ist ein ATMEGA328P praktischer.
Der Microcontroller ATMEGA168P kann in vielen Projekten eine Alternative sein. Sein großer Vorteil: Man kann ihn kaufen (z.B. bei Reichelt, 5,90€ Ende Februar 2023)
Rahmenbedingungen
Rahmenbedingungen sind:
- Bereits entwickelte Programme für den ATMEGA328P sollen möglichst ohne Änderung verwendet werden
- Zum Programmieren wird die Arduoino IDE eingesetzt.
- Vorbereitete Platinen sollen genutzt werden (es ist also eine Pinkompatibilität zum ATMEGA328P erforderlich)
- Als Programmiergerät soll ein Arduino Nano eingesetzt werden
Vorgehen
Im weiteren ist das Vorgehen beschrieben, wie ein ATMEGA168 mit der Arduino IDE programmiert werden kann. Dabei werden auch Fehlschläge und Aspekte, die (noch) nicht funktionieren genannt werden, um bei eigenen Arbeiten Hilfestellung zunleisten.
Materialien
Es werden folgende Materialien benötigt:
- ATMEGA168PA-PU (1)
- Arduino Nano (2)
- 10 muF Elektrolytkondensator (3)
- Ein großes Breadboard
- Kabelstücke oder Jumper-Kabel
- Widerstand 1kOhm und eine LED (4)
Anmerkungen:
zu (1): Das „P“ hinter 168 ist wichtig, weil dieser Microcontroler Energiesparmodi unterstützt und die gefundenen Bibliotheken diesen Typ voraussetzen.
zu (2): Es fuktioniert genauso gut mit einem Arduino Uno. Der Nano ist praktischer, da er ein Standard Mini-USB-Kabel verwendet und er auf das Breadboard passt.
zu (3): Der Kondensator ist für den automatischen Reset erforderlich
zu (4): Das Beispiel- und Testprogramm dient dazu herauszubekommen, ob der Microcontroller mit der richtigen Taktfrequenz läuft. Das gelingt, wenn eine LED im Sekundentakt blinkt.
Aufbau der Programmier-Schaltung
Für die Programmierung wird der Arduino Nano als Programmierer verwendet. Er versorgt den ATMEGA168 auch mit Spannung. Im Grundsatz sind folgende Verbindungen erforderlich:
Arduino Pin ATMega Pin
D10 Reset (Pin 1)
D11 MOSI (Pin 17
D12 MISO (Pin 18)
D13 SCK (Pin 19)
GND GND
+ VCC , AVCC
Der Aufbau ist identisch zur Programmierung des ATMEGA328P-PU. Hierzu gibt es gute Tutorials, z.B.
https://wolles-elektronikkiste.de/atmega328p-standalone-betreiben
Die LED wird über Vorwiderstand an Pin 14 / D10 / PB0 angeschlossen.
Abb. 1 Pinout des ATmega168P (identisch mit ATmega328P)
Abb. 2: Aufbau auf dem Bradboard. Die Verkabelung ist so vorbereitet, dass ATmega8xx und ATtiny-Microcontroller programmiert werden können.
Es hat sich als praktisch herausgestellt, die Pinbezeichnungen auf den ATmega zu kleben (UHU). Eine Vorlage gibt es hier:
Verwendung der Arduino IDE
Die richtige Version
Die Versuche, die neue Version 2.0.4 eizusetzen, sind bislang gescheitert. Hier wird die „legacy“ Version 1.8.19 eingesetzt. Die Software kann man sich herunterladen unter https://www.arduino.cc/en/software. Die Version 1.8.19 hat ein kreisrundes Icon, die neue Version 2.0.4 hat ein rechteckiges Icon.
Vorbereitungen / Bibliotheken
Es werden zusätzliche Boardverwalter benötigt. Wie so oft sind es engagierte Einzelpersonen, die diese zur Verfügung stellen.
Unter „Arduino | Preferences“ findet sich der Punkt „zusätzliche Boardverwalter Urls“. Mit Kluck auf das Ordner-Symbol erscheint die Möglichkeit, eigene Zeilen hinzuzufügen. Hier ist einzutragen
https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_atmega8_series_index.json
Unter „Werkzeuge | Board | Boardverwalter“ kann die Installation von „DIY ATmega8, ATmega46, ATmega88, ATmega168,ATmega328“ installiert werden.
Nach Abschlluss der Installation stehen unter „Werkzeuge | Board“ die neuen „DIY…“ Boards zur Auswahl zur Verfügung.
Einstellungen
Mit den folgenden Einstellungen hat das Flashen des Programms funktioniert. Zu beachten ist, das die Arduino IDE nicht direkt auf den ATmega168 schreibt, sondern den Arduino Nano als Programmiergerät nutzt (Arduino as ISP, nicht Arduino ISP)
Abb. 3 Einstellungen zum Flashen
Testprogramm
Das Testprogramm lässt die LED im einer Endlosschleife zeimal kurz Blitzen und dann eine Sekunde lan leuchten.
/* * LedBlitza * Testprogramm für ATMega328p-PU * Claus Brell 12.12.2021 * angepasst für ATMEGA168PA 10.03.2023 * * Loop: * kurzer Doppelblitz, * 1 Sekunde Pause, * LED an * 1 Sekunde Pause * * */ // Pin 14, D8 , PB0 als Ausgang // mit LED über 1k Ohm int led = 8; void setup(){ pinMode(led, OUTPUT); } void loop(){ // kurzer Doppel-Blitz genügt digitalWrite(led, HIGH); delay(32); digitalWrite(led,LOW); delay(128); digitalWrite(led, HIGH); delay(32); digitalWrite(led,LOW); delay(1000); // es folgt 1 Sekunde, damit wird getestet, ob der Controller auf der richtigen Frequenz läuft digitalWrite(led, HIGH); delay(1000); digitalWrite(led,LOW); delay(1000); }
Flashen des Testtprogramms
Es ist zum Kompilieren und flashen auszuwählen:
„Sketch | Hochladen mit Programmer“.
Bootloader brennen
Das ist insgesamt nicht gelungen.
Bequem ist es, den Arduino Bootloader zu brennen und dann den ATmega mit einem Seriellen Adapter FTDI 232 direkt zu programmieren. Man hat so quasi einen „Ein-Chip-Arduino“ auf dem Breadboard.
Mit dem ATmega328P-PU funktioniert das hervorrragend einfach. Beim ATmega168 nicht.
Es hat funktioniert, den Bootloader auf den ATmega168 zu brennen, zumindest war die Arduino IDE der Meinung, dass das erfolgreich war.
Allerdings ist es dann mit zwei unterschiedlichen FTDI 232 Adaptern nicht gelungen, den Blink-Sketch hochzuladen. Alle Versuche, dem Fehler (SYNC…) auf die Spur zu kommen, waren bislang nicht erfolgreich.
Noch zu prüfen
Es ist zu prüfen, ob die Programmierung mit einer neueren Version der Arduino IDE gelingen wird (ab 2.1…)
Glossar
Der „große Bruder“ ATmega328P-PU
Der ATmega328P-PU ist ein sogenannter Mikrocontroller, der von der Firma Microchip Technology hergestellt wird. Ein Mikrocontroller ist im Wesentlichen ein kleiner Computer, der speziell für die Steuerung elektronischer Geräte und Systeme entwickelt wurde.
Der ATmega328P-PU ist einer der beliebtesten Mikrocontroller auf dem Markt und wird in vielen verschiedenen Anwendungen eingesetzt. Er hat eine 8-Bit-Architektur und eine Taktfrequenz von bis zu 20 MHz. Der Mikrocontroller verfügt über 32KB Flash-Speicher für Programmcode, 2KB SRAM für Daten und 1KB EEPROM für nichtflüchtige Daten.
Der ATmega328P-PU bietet viele integrierte Funktionen, die es Entwicklern ermöglichen, komplexe Anwendungen zu erstellen. Dazu gehören verschiedene Timer, ein Analog-Digital-Wandler, serielle Schnittstellen wie UART, SPI und I2C sowie verschiedene GPIO-Pins für die Ein- und Ausgabe von Signalen.
Ein weiterer Vorteil des ATmega328P-PU ist, dass er auf der Arduino-Plattform weit verbreitet ist und daher einfach mit der Arduino-Entwicklungsumgebung programmiert werden kann. Dies macht ihn besonders attraktiv für Hobbyprojekte und schnelle Prototypen.
ATmega168P – der Unterschied
Der ATmega168P ist ein Mikrocontroller, der auch von Microchip Technology hergestellt wird und in der gleichen Familie wie der ATmega328P-PU liegt. Im Vergleich zum ATmega328P-PU verfügt der ATmega168P über eine etwas geringere Speicherkapazität und weniger Peripheriefunktionen.
Konkret hat der ATmega168P einen Flash-Speicher von 16KB, 1KB SRAM und 512 Bytes EEPROM. Im Vergleich dazu hat der ATmega328P-PU 32KB Flash-Speicher, 2KB SRAM und 1KB EEPROM. Der ATmega168P ist Pinkompatibel zum ATmega328P-PU mit insgesamt 28 Pins.
Allerdings bietet der ATmega168P auch einige Vorteile gegenüber dem ATmega328P-PU. Er hat eine geringere Stromaufnahme und ist dadurch besonders für batteriebetriebene Anwendungen geeignet. Auch ist der ATmega168P in der Regel etwas günstiger als der ATmega328P-PU.
In der Arduino-Welt ist der ATmega168P vor allem als der Mikrocontroller des älteren Arduino-Boards „Diecimila“ bekannt, während der ATmega328P-PU auf den – im vergleich – neueren „Uno“-Boards eingesetzt wird.
Arduino IDE
Es gibt verschiedene Möglichkeiten, die ATmegas zu programmieren. Hier sind drei der gebräuchlichsten Methoden:
- Arduino-Entwicklungsumgebung: Die Arduino-Plattform unterstützt die AVR-Prozessoren und es gibt viele Tutorials und Beispiele, die die Verwendung des ATmega328P-PU mit der Arduino-Entwicklungsumgebung zeigen. Sie können ein Arduino-Board mit einem ATmega328P-PU verwenden, um Ihr Programm zu entwickeln und zu testen, bevor Sie den Mikrocontroller in Ihre eigene Schaltung einbauen.
- ISP-Programmer: ISP steht für „In-System-Programming“ und ist eine Methode, Mikrocontroller direkt in der Schaltung zu programmieren. Dazu benötigt man einen ISP-Programmer wie z.B. den USBasp oder den AVRISP mkII und eine Software wie z.B. AVR Studio oder die Arduino-IDE. Der ISP-Programmer wird mit den entsprechenden Pins des ATmega328P-PU verbunden, um das Programm zu übertragen. Auch einen Arduino können Sie als ISP verwenden.
- Bootloader: Der ATmega328P-PU kann auch über einen Bootloader programmiert werden, der es ermöglicht, das Programm über eine serielle Verbindung (UART) hochzuladen, anstatt einen ISP-Programmer zu verwenden. Eine Möglichkeit, den Bootloader auf den ATmega328P-PU zu laden, ist die Verwendung der Arduino-Entwicklungsumgebung und eines Arduino-Boards als ISP.