ATtiny Standalone debuggen
Um ein auf einem Arduino Uno laufendes Programm zu debuggen verwendet man Anweisungen wie zum Beispiel:
int i = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.println(i);
}
Dabei schickt der Prozessor des Uno (der ATmega328P) über seine in Hardware ausgebildete serielle Schnittstelle den Befehl weiter an den ebenfalls auf dem Arduino Uno Board platzierten Prozessor ATmega16U2 der das ganze dann über USB an den PC weiter leitet.

Arduino IDE ↔ USB (Serial) ↔ Uno

Durch einen Klick auf den „Serial monitor“ in der Arduino IDE sieht man dann die Ausgaben vom Uno. Um nun auch, nur mit Hilfe eines Uno, einen mit ATFlash programmierten Chip wie den ATtiny85 debuggen zu können habe ich eine "Serial Bridge" in das Programm ISP_N_SerialBridge_V2_1.ino eingebaut. Diese reicht die vom ATtiny85 versendeten seriellen Botschaften an die serielle Konsole der Arduino IDE weiter.

Arduino IDE ↔ USB (Serial) ↔ Uno ↔ Serial Bridge ↔ ATtiny85

Nun gibt es zwei Arten, wie die ATtiny Prozessoren in die Lage versetzt werden, überhaupt serielle Botschaften zu senden: Die erste Möglichkeit ist die bei Arduino mitgelieferte und recht universelle SoftSerial. Diese ist auch in der Lage Daten zu empfangen und Sende- und Empfangspin sind frei wählbar. Der Debugbefehl im ATtiny85 sieht dann so aus:
#include <SoftwareSerial.h>

#define RX 4
#define TX 3

SoftwareSerial SoftSerial(RX, TX);
int i = 0;

void setup() {
 SoftSerial.begin(9600);
}

void loop() {
 SoftSerial.println(i);
}
Eine weitere Möglichkeit habe ich dem Paket ATFlash beigelegt. Diese unterstützt nur das Senden und ist in hocheffizientem Assembler geschrieben. Der Sendepin ist für die beiden Tinys bereits vorgegeben und dem zentralen PDF der Hauptseite zu entnehmen.
#include <TinyDebugSerial.h>

TinyDebugSerial TinySerial = TinyDebugSerial();
int i = 0;

void setup() {
 TinySerial.begin(9600);
}

void loop() {
 TinySerial.println(i);
}
Vergleicht man die drei oben aufgeführten Quelltexte von Ihrem Flash- und Rambedarf wird offensichtlich, warum auf den Tinys (8 kB Flash & 512 kB Ram) die TinyDebug Library eine gute Wahl ist:
ProgrammFlash[Bytes]Ram[Bytes]
Serial2132202
SoftSerial2714144
TinyDebug150699
Nichts (außer Setup & Loop)2969
Schaltungsaufbau einfach
Im einfachsten Fall wird nur die TX-Leitung des Standalone Chip mit der Softserial-RX-Leitung des Uno und natürlich eine gemeinsame Masse verbunden. Wenn der Standalone Chip alleine auf einer anderen Spannung laufen soll, empfiehlt sich ein Spannungsteiler von dem höheren Potential zum niedrigeren auf zu bauen, da generell sehr viele Chips empfindlich reagieren oder zerstört werden, wenn man an Eingangspins eine höhere Spannung als die Versorgungsspannung des Chips selber anlegt. Im folgenden Bild habe ich das sichere Spannungsteilerprinzip an einem Beispiel verdeutlicht. Legt man Akkus in die 3 Batteriefächer ergibt sich eine Spannung von rund 3,6 V am ATtiny85. Durch den Spannungsteiler wird aus der 5 V Ausgangsspannung des Arduino TX rund 3,3 V nach folgender Formel:

5 V * (10 kOhm / 15 kOhm) = 3,33 V

Für eine sichere Erkennung des Eingangspegels "HIGH" am Uno RX sind 0,6 * VCC, also 3 V nötig. Das erfüllt der TX Ausgang des ATtiny85 in dieser Schaltung. Sollten die Spannungen weiter aus einander liegen, empfehle ich fertig bestückte bi-direktionale Spannungswandlerplatinen, die es für rund 1 € zu kaufen gibt, wie zum Beispiel diesen 4 kanaligen. Damit nach dem Aufbau des abgebildeten Schaltplanes etwas im seriellen Fenster von der Arduino IDE erscheint ist folgender Ablauf nötig:

- SoftSerialBridgeSimple normal auf den Uno hoch laden.

- Die serielle Konsole auf Geschwindigkeit 19200 Baud stellen.

- Auf dem ATtiny85 läuft zum Beispiel das SoftwareSerial oder TinyDebugSerial Beispiel vom Anfang dieser Seite.
Schaltungsaufbau in Kombination mit ISP Flashen
Wenn ein selbst geschriebenes Programm auf dem Standalone Prozessor noch nicht ausgereift ist, muss man häufig zwischen Flash- und Debug-Betrieb wechseln. Hierbei ist das Wechseln des Uno Programmes und Umverkabelung sehr lästig. Ich empfehle daher die schon auf der Hauptseite von ATFlash aufgeführte Schaltung auf zu bauen und das dort gezeigte ISP_N_SerialBridge_V2_1 auf den Uno zu laden. Außer dem Drücken eines Tasters und umstecken der Versorgungsleitung bei Benutzung einer anderen Spannungslage entsteht kein Aufwand mehr. Dies kann folgenderweise geschehen:

- Falls gerade noch gesteckt - den Kondensator and der Resetleitung ausstecken.

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

- Die serielle Konsole auf 19200 Baud stellen.

- Den Standalone Zielchip wählen und "Arduino as ISP" wählen (siehe Hauptseite).

- Die Pins 10, 11, 12, 13 wie auf der Hauptseite gezeigt, verbinden. Zur besseren Lesbarkeit des folgenden Schaltplanes sind diese hier weggelassen.

- Nun unbedingt den 10 µF Kondensator an die Reset Leitung des Uno ergänzen und auch den Rest der folgenden Schaltung aufbauen:
Wechseln zwischen ISP Flashen und Debug
Nach dem etwas größeren Aufwand des Aufbaues, der sich durch die ISP Adapter teilweise fast komplett erledigt, ist nun die Benutzung recht einfach.

- Die LED zeigt mit dem "Heartbeat" an, das der Uno bereit ist zu flashen.

- Sicher stellen, das die Spannungversorgung des Standalone Chips nicht an den Batterien sondern an den 5 V des Uno hängt.

- Ein Programm hoch laden.

- Den Uno "Reset" Taster drücken.

Und so wird der Debug Modus gestartet:

- Sicher stellen, das die Spannungversorgung des Standalone Chips an den Batterien hängt.

- Die serielle Konsole öffnen.

- Den Knopf auf dem Steckbrett kurz drücken. Der "Heartbeat" stoppt und die LED erlischt.

- Die Ausgaben des Standalone Chip erscheinen.

- Nach dem Debuggen und vor dem nächsten Flashen muß erneut Reset auf dem Uno gedrückt werden.
Einschränkungen des Uno als "Bridge" & TSB Empfehlung
Die beiden vorgestellten Möglichkeiten nutzen den Uno als Serial Bridge. Da nur eine serielle Schnittstelle als Hardware ausgebildet ist und die andere als SoftSerial ist die Übertragung großer Datenmengen nicht möglich, denn dafür reichen die knapp bemessenen Zeichenpuffer nicht aus. Spielt man Beispielsweise das Programm "AsciiTable" auf den Standalone Chip, so laufen die ersten Zeilen noch ganz gut, doch danach kommt es zum "verschlucken" von Zeichen. Um dem entgegen zu wirken hilft es, kurze Pausen mit dem Befehl "delay" ein zu bauen.
Generell sei aber an dieser Stelle auf das in ATFlash integrierte TSB verwiesen. Sowohl für das Flashen als auch das Debuggen sind nach dem einmaligen bespielen mit einem Bootloader ausschließlich 3 Leitungen nötig: RX, TX, GND. Selbst das Umstecken der Versorgungsspannung entfällt!