Arduino "Stand-alone"

Atmel ATMega328P-PU

Vor allem bei batteriebetrieben Projekte ist ein vollständiges Arduino-Uno-Board ein oft viel zu hoher Stromverbraucher. Jedoch kann man ein paar Einschränkungen auch einen Stand-alone Arduino, d.h. einen einzelnen ATMega328-Chip verwenden, um dieselbe Peripherie anzusprechen. Es gibt auch anderen Konfigurationen, z.B. mit externen Quarze, die hier aber nicht besprochen werden.

ATmega328P-PU

In diesem Beitrag habe ich einen ATmega328P-PU verwendet, dies ist eine von verschiedenen ATmega-Varianten. PU bedeutet hier, dass die Bauform 28 PDIP entspricht; dies ist von Vorteil, wenn man ein Breadboard verwenden will. Wählt man eine SMD-Bauform, so müsste man sich einen Adapter kaufen/bauen. P steht für Picopower, d.h. es handelt sich sowohl um eine Variante mit verbessertem Powermanagement. Es wird an einigen Stellen beschrieben, dass andere Varianten als der ATmega328P-PU nicht mit der Arduino-IDE beim Hochladen von Sketches bzw. Brennen des Bootloaders zurecht kommen. Da ich bisher keinen anderen Chip verwendet habe, kann ich dies nicht nachprüfen.

Technische Daten (laut Hersteller)

Betriebsspannung: 2,7V bis 5,5V
Taktfrequenzen: <=8MHz bei 2,7V bis 5,5V
<=16MHz bei 4,5V bis 5,5V
Stromverbrauch: Aktiv: 1,5mA (3V; 4MHz)
Power-Down: 1μA (3V)

Verwendete Bauteile

Aufbau & Anschlüsse

Schaltplan für die Programmierung mit Arduino Uno

Wie in obigem Schaltplan gezeigt werden die Anschlüsse des Arduino-Uno-Boards mit dem ATmega328 folgendermaßen verbunden:

Arduino Uno ATmega328
D13 Pin #19
D12 Pin #18
D11 Pin #17
D10 Pin #1 (RESET)
GND Pin #8 (GND)
5V Pin #7 (VCC)
- Pin #7 (VCC) zu Pin #20 (AVCC)

Programmierung mit Arduino-Uno-Board

Da der ATmega328 über keine direkte Schnittstelle zur Programmierung über den PC besteht, muss eine Schnittstelle geschaffen werden.

Zunächst wird der Arduino Uno von allen Verbindungen an seinen GPIOs gelöst und per USB mit dem PC verbunden. Nun lädt man in der Arduino-IDE über den Menüpunkt Datei » Beispiele » 11.ArduinoISP den Sketch ArduinoISP. Dieser wird kompiliert und auf den Arduino hochgeladen. (Darauf achten, dass im Menüpunkt Werkzeuge » Programmer "AVRISP mkII" ausgwählt ist
Den Sketch gibt es hier auch noch alternativ zum Herunterladen:

ArduinoISP.ino [8 kB]

Nun werden die Anschlüsse mit dem ATmega328 so verdraht, wie oben angegeben.

Zunächst muss die Hardware-Erweiterung für den ATmega328P in die Arduino-IDE geladen werden. Dazu lädt man sich zunächst die Folgende Datei herunter und entpackt sie.

Hardware-Erweiterung für ATmega328P [4 kB]

Nun navigiert man zu dem Sketchbook-Speicherort auf dem PC, auf dem die Einstellungen für die Arduino-IDE gespeichert sind. Diese findet man im Menupunkt Datei » Voreinstellungen.

Sketchbook-Speicherort auf dem PC
Abb.: Sketchbook-Speicherort der Arduino-IDE auf dem PC

In diesem Ordner sollte ein Unterordner "hardware" liegen. Falls nicht, dann wird dieser einfach manuell erstellt. Dorthin wird nun der Ordner "breadboard" aus dem entpackten ZIP-Archiv gelegt und die Arduino-IDE neugestartet.
Es sollte nun im Menupunkt Werkzeuge » Board » ... ein neuer Punkt mit "ATMega 8MHz" o.ä. auftauchen. Diese wird nun ausgewählt.

ATmega328P als neue Hardware in der Arduino-IDE
Abb.: ATmega328P als neue Hardware in der Arduino-IDE

Nun wird im Menüpunkt Werkzeuge » Programmer noch von "AVRISP mkII" zu "Arduino as ISP" umgeschaltet, damit nicht der Arduino selbst beschrieben wird, sondern der ATmega328P-Chip.

Nun muss der Bootloader noch mit dem Aufruf des Menüpunktes Werkzeuge » Bootloader brennen auf den ATmega328P gebrannt werden.

Sketch

#define PIN_LED 11 // any PWM-capable pin

void setup()
{
    pinMode(PIN_LED, OUTPUT);
}

void loop()
{
    for(byte i=0; i<20; i++) {
        digitalWrite(PIN_LED, !digitalRead(PIN_LED));
        delay(100);
    }

    for(byte i=0; i<4; i++) {
        digitalWrite(PIN_LED, !digitalRead(PIN_LED));
        delay(1000);
    }

    for(byte i=0; i<255; i++) {
        analogWrite(PIN_LED, i);
        delay(30);
    }

    digitalWrite(PIN_LED, LOW);
    delay(5000);
}

Test-Schaltung

Nach dem Hochladen des kompilierten Sketches werden die Verbindungen zum Arduino-Board gelöst und der ATmega328P mit einer 5V-Spannungsquelle sowie einer LED+Vorwiderstand folgendermaßen verdrahtet:

Schaltplan für den Test des ATmega328P

Als Resultat sollte nun die LED einige Male schnell dann langsam blinken und dann über eine gewisse Zeit langsam ihre Leuchtintensität erhöhen.

ATmega328P steuert eine LED
Abb.: ATmega328P steuert eine LED (Spannungsquelle ist ein 18650-Li-Akku mit 5V Output)
zurück