Zum schnellen Debuggen von Controllerprojekten habe ich auf o.g. Entwicklungsbrett vor einiger Zeit mal eine Anwendung programmiert, um über ein serielles Protokoll (1 Leitung und Masse) verschiedenste Daten während der Programmerstellung oder für Tests sichtbar machen zu können. Hierbei können selbst kleinste Controller mit kleinem Programmspeicher und wenig oder gar keinem RAM (ATTiny13, ATTiny10…) ohne viel Aufwand an einem beliebigen I/O-Pin Daten senden und das XMINILAB macht diese auf seinem OLED sichtbar. Die Routinen zur Ausgabe sind beispielsweise in diesem Projekt enthalten:
Infos über das XMINILAB gibt es hier:
http://www.gabotronics.com/development-boards/xmeg…
Die Einspeisung des Signal findet an Pin „EXT“ des XMINILAB statt, der gegenüber Masse positiv sein muss.
Auf dem Foto ist eine Beispielausgabe zu sehen.
Die Datenübergabe kann HEX, DEZIMAL und ASCII sein, außerdem kann man auf die UART des XMINILAB routen und den Bargraf am rechten Rand mit 8 Bit füllen, um schnelle Signale eines einzelnen Bytes zu sehen. Vielleicht hat jemand Lust, sich das Ganze auf sein angestaubtes XMINILAB zu spielen… 😉
Ich benutze den Sniffer so gut wie jeden Tag, beruflich und auch privat.
Hier die Spezifikation zur Erzeugung des Datensignals beim sendenden Controller:
1. Displaypin Spezifikation:
– 0->1->0->1 – Pulsbreite: jeweils >=1µs bis maximal 30µs, symmetrisch!
– Startbit: 3 Flankenwechsel -> Pause
– Logisch 1: 2 Flankenwechsel -> Pause
– Logisch 0: 1 Flankenwechsel -> Pause
Pause zwischen Bits: >=5µs, jedoch mindestens 2,5-fache Pulsbreite
Pause zwischen Bytes: >=30µs
Die Pulse eines Bits dürfen nicht wesentlich jittern.
Pausen zwischen den Bits sind unkritisch und können vom Sender gestreckt werden. Gleiches gilt für Pausen zwischen Bytes.
Laufzeit für ein komplettes Zeichen inklusive Header und Adresse bei Minimal-Timing: ~180µs
Die Polarität der Daten ist irrelevant.
Der Pegel bleibt auf dem letzten Pegel eines Datenframes stehen, bis ein neuer Frame kommt.
Man kann hier wunderbar die Pin-Toggle-Funktion nutzen, die viele Controller von Haus aus bieten.
2. Datenformat:
2.1. Header
0000 LCD, HEX Daten
0001 LCD, DEZ Daten
0010 LCD, ASC Daten
0011 reserviert
0100 LED
0101 reserviert
0110 reserviert
0111 reserviert
1000 RS232, HEX Daten
1001 RS232, DEZ Daten
1010 RS232, ASC Daten
1011 reserviert
1100 reserviert
1101 reserviert
1110 reserviert
1111 reserviert
2.2. Adresse
xxxx xxxx absolute Position auf dem LCD oder in der UART-Zeile
2.3. Datenbyte
xxxx xxxx Nutzdaten, die dargestellt werden sollen
2.4. Aufbau Datenframe
LCD: Startbit, Header (4Bit), Adresse (8Bit, 0x00-0xFF), Datenbyte (8Bit)
RS232: Startbit, Header (4Bit), Adresse (8Bit, 0x00-0x27), Datenbyte (8Bit)
LED: Startbit, Header (4Bit), Adresse (8Bit, 0x00), DatenByte (8Bit, LLLLLLLL, 1 Bit pro LED)
Download:
Firmware für das XMINILAB: