ATFlash: AVR Controller flashen
Wenn man einige Zeit mit Arduino „gearbeitet“ bzw. gespielt hat, kommt oft die Lust eine fertige Leiterplatte auf zu bauen und nicht für jedes Projekt ein neuen Arduino zu kaufen. Hier bietet es sich an, die Atmel Prozessoren alleine laufen zu lassen. Am Ende dieses Tutorials sollte man in der Lage sein, die folgende Schaltung zu realisieren: Wobei in allen Fällen folgendes Programm auf den Prozessoren läuft: Grundsätzlich unterstützt das von mir zusammengestellte Arduino "Plugin" die folgenden Controller:
FlashRAMPinsPreis
ATmega328P32 kB2 kB281,80 €
ATtiny84A8 kB512 Byte141,00 €
ATtiny858 kB512 Byte80,80 €
Der ATmega328P ist der Standard Arduino Uno und Nano Prozessor.

Für das Aufbauen der Flash-Verkabelung empfehle ich, die folgende Datei aus zu drucken. Es beinhaltet eine Übersicht der Verbindungen zu den Chips und die Namen der Pins in der Arduino Umgebung (in rot):

PDF

Es ist eine Collage aus folgenden Quellen:
Datasheets von Atmel, Guloshop.de
Von der farblichen Zuordnung müssen beim Flashen per ISP die Leitungen:
Weiß, Blau, Grün und Gelb und Schwarz und eventuell Rot angeschlossen werden. Doch dazu später mehr.
Installation ATFlash
Nun installiert man das von mir zusammengestellte Paket ATFlash in der Arduino IDE. Um die ATtinys per ISP zu flashen kann auch das Original von David Mellis und das Original für Arduino on Breadboard installiert werden, aber letzteres ist umständlich und meiner Meinung nach fehlerhaft.

- Arduino 1.6.5 starten (es sollte mit allen 1.6er Versionen gehen)

- Unter Datei - Einstellungen - das Häkchen bei Hochladen setzen und die Board Manager URL:
https://mesom.de/atflash/package_atflash_index.json
eintragen. - Unter Werkzeuge - Platine - Boards Manager - nach "atflash" suchen und auf "Install" klicken

- Unter Werkzeuge - Platine - sind nun neue Einträge vorhanden:
Standalone ISP Flashen
Vereinfacht gesagt läuft das normalen Flashen von der Arduino IDE zum Arduino Uno von der Kommunikationskette so ab:

Arduino IDE → USB (AVRISP mkII) → Uno

Das "AVRISP mkII" Protokoll kommuniziert dabei per RX/TX Leitungen über den ATmega16U2 mit dem ATmega328P. Bei der Flash Art "Arduino as ISP" dienen die beiden Prozessoren nur zum Weiterreichen der eigentlichen Prgrammierbefehle:

Arduino IDE → USB → Uno → Arduino as ISP → ATtiny85

Bei dieser Programmierung läuft das eigentliche Programm (z.B. LED Blink) später nicht auf dem normalen Arduino Board sondern auf einem eigenen Prozessor, der völlig unabhängig Arduino Board ist. Im Detail ist dazu folgendes zu tun:

- ISP_N_SerialBridge_V2_1 normal auf den Uno spielen (seriellen Port wählen; Programmer ist "AVRISP mkII")

- Danach folgende Schaltung aufbauen - unbedingt den 10 µF Kondensator an die Reset Leitung des Uno ergänzen (siehe Bild)

- LED und Widerstand an Digital 9 des Uno hinzufügen (siehe .ino Datei; der Schritt ist optional)

- Unter Werkzeuge - Platine - "ATtiny85 (ISP)" Chip auswählen

- Unter Werkzeuge - Clock - "Internal 8 MHz" auswählen

- Unter Werkzeuge - Programmer - "Arduino as ISP"

- Unter Werkzeuge - Bootloader brennen (dieser Schritt setzt einmalig die korrekten "Fuses" und muss nicht noch einmal wiederholt werden)

- Das eigentliche Programm (zum Beispiel Blink_N_Hello_World) mit gedrückter Shift Taste Uploaden. Die gedrückte Shift Taste ist nur für ATmega328P erforderlich - sonst optional.
Bekannte Probleme
- Beim Benutzen des Uno am Mac (bei Windows nicht) gibt es scheinbar einen Fehler im Gerätetreiber: Nach dem Flashen (was korrekt verläuft) geht der Uno nicht zurück in den Flash Modus (die LED Anzeige bleibt „hängen“); zudem ist das Schalten in den Serial Bridge Modus per Knopfdruck nicht möglich; über die Hochohmig Schaltung der Leitungen zu dem zu flashenden Chip kann ich keine Aussage machen; Sicherheitshalber, und damit alles wieder normal läuft, sollte nach dem fertigen Flashvorgang der Reset Taster des Uno gedrückt werden. Boards, die auf dem FTDI basieren (wie z.B.: der Nano) haben das Problem nicht.

- Eine Fehlermeldung mit „...PAGEL...“ kann ignoriert werden.

- Andere Probleme haben meiner Erfahrung nach immer mit falscher Verkabelung, falscher Baudrate, falsch ausgewähltem Zielchip sowie dem fehlenden 10 µF Kondensator zu tun.