Debugger für Arduino UNO

Selbst entwickelte Geräte, Umbauten, Modifikationen, usw.
Antworten
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

​Hallo allerseits,

hat jemand Interesse an einen solchen Debugger? Der besteht aus zwei Rechnern. In dem einen kann man sein Programm testen. Dazu kann man beliebig viele Haltepunkte setzen. Bei jedem Haltepunkt kann man bis zu 4 beliebige Parameter darstellen. Wird ein Haltepunkt erreicht, wird das Programm gestoppt und die Parameter an einem zweiten Rechner (UNO) übergeben. Wenn man sich die Parameter angesehen hat, gibt der Haltepunkt das zu untersuchende Programm wieder frei.

Der zweite Rechner stellt die Parameter auf einer 4-Stelligen Anzeige nacheinander dar. Durch Tastendruck wechselt die Anzeige.

Zur Datenübertragung wird nur ein Digitaler Port benötigt.

M.f.G.

Hans-Ulrich
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

Nicht dass das missverstanden wird. Ich will das nicht verkaufen, sondern bei Interesse stelle ich die Programme und die Bauanleitung ein.

M.f.G.

Hans-Ulrich
Benutzeravatar
Daniel
. . . .
. . . .
Beiträge: 390
Registriert: 11.03.2017, 08:23
Wohnort: Berlin
Kontaktdaten:

Re: Debugger für Arduino UNO

Beitrag von Daniel »

Hallo Hans-Ulrich,

da ich viel mit dem Arduino baue und programmiere, kann so ein Debugger manchmal wirklich sehr hilfreich sein. Also ich hätte durchaus Interesse.

Viele Grüße
Daniel
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

Hallo Daniel,

wie versprochen die Beschreibung des Debuggers:

Die verwendeten Programme können hier geladen werden: http://www.huk-2.de/debugger/programme_debugger.zip

Der Debugger besteht aus zwei Teilen, einen Sender und einen Empfänger.
Der Sender ist ein Arduino UNO. Auf diesen läuft das zu überprüfende Programm. In diesem Programm kann man beliebig viele Haltepunkte setzen. Bei Erreichen eines Haltepunktes wird das zu untersuchende Programm gestoppt und bis zu 4 Parameter an den Empfänger gesendet.
Durch den Sender kann bestimmt werden, wann das zu untersuchende Programm wieder weiter läuft.

Der Empfänger ist ebenfalls ein Arduino UNO. Dieser steuert eine 4-Stellige 7-Segment Anzeige an. Außerdem befindet sich dort ein Taster. Nach Übermittlung der Daten wird der erste Parameter angezeigt. Nach einem Tastendruck wechselt die Anzeige auf den zweiten Parameter usw.
Nach dem vierten Parameter erlischt die Anzeige. Ein weiterer Tastendruck startet das zu untersuchende Programm wieder.
Während der Datenübertragung leuchtet jeweils ein Segment A. Bei der ersten Ziffer das rechte, bei der zweiten das nächste Segment A usw.
Bei kleinen Ziffern geht das sehr schnell. Bei 9999 dauert es in etwa eine Sekunde.

Aufgebaut sieht der Empfänger bei mir so aus:

Bild

Die Anschlüsse sind wie folgt verschaltet:

Digital 0 = Daten
Digital 2 = 1 KOhm Segment A
Digital 3 = 1 KOhm Segment B
Digital 4 = 1 KOhm Segment C
Digital 5 = 1 KOhm Segment D
Digital 6 = 1 KOhm Segment E
Digital 7 = 1 KOhm Segment F
Digital 8 = 1 KOhm Segment G
Digital 9 = Taster gegen GND
Digital 10 = Digit 4
Digital 11 = Digit 3
Digital 12 = Digit 2
Digital 13 = Digit 1

Die Lage der Segmente ist im Kopf des Programmes beschrieben. Das Programm für den Empfänger ist debug_empfaenger_V2.ino.

Bei Digital 0 (Daten) ist noch folgendes zu beachten:
An diesen Pin müssen zwei Widerstände angeschlossen werden. Ein Widerstand (6,8 KOhm, ist nicht kritisch) an GDN. Es kann sein, dass sowohl das Daten-Pin beim Sender und Empfänger auf Eingang geschaltet sind. Dann tritt ein nicht definierter Zustand ein der zu Funktionsstörungen führen kann.
Der zweite Widerstand (270 Ohm) liegt in Reihe zwischen den beiden Daten-Pin. Ich kann nicht ausschließen, dass kurzeitig beide Daten-Pin auf Ausgang geschaltet sind und unterschiedliches Potenzial führen. Das kann zu Zerstörung der Ausgänge führen.

Digit 1 ist die linke Ziffer. Als Anzeige wurde ein LTC-4727 (gemeinsame Katode) verwendet. Die Begrenzungswiderstände betragen jeweils 1 KOhm. Das reicht für die verwendete Anzeige vollkommen aus.

Das Programmpaket für den Sender besteht aus drei Programmen:

debug_sender_v2.ino -> Hier kann das zu überprüfende Programm rein geschrieben werden.
programm.ino -> Dieses Programm läuft nach erreichen eines Haltepunktes im Hintergrund und erledigt den Datenaustausch.
up1.h -> In diesen Programm werden die für Programm.ino benötigten Variablen deklariert.

Alle drei Programme müssen sich im gleichen Ordner befinden. Gestartet wird der Sender mit debug_sender_v2.ino. Das Programm kann beliebig umbenannt werden. Sinnvollerweise nach dem Start mit „Speichern unter“. Dann wird automatisch ein neuer Ordner angelegt. In ihm befinden sich dann gleich alle drei Programme.

Nach dem Start sollte sich folgendes Bild zeigen:

Bild

Wichtig, dass alle drei Programm zu sehen sind.

Auch beim Sender sollte das Daten-Pin mit einen 6,8 KOhm Widerstand gegen GND gezogen werden. Im Prinzip ist es egal, welches Port man wählt. Es muss dann nur in up.h (int deb_daten=13;) geändert werden.
Die 13 habe ich gewählt, weil eine LED auf dem Bord mit diesem Pin verbunden ist. Man kann dann sehen, ob gesendet wird.

Zur Funktion müssen beide Bords mit dem GND, so wie die Daten-Pin über den Widerstand (270 Ohm) verbunden sein.
Beim Übertragen der Programme muss die Datenleitung getrennt sein. Mache ich das nicht, kann ich den Rechner neu starten. Er erkennt die USB Schnittstelle nicht mehr.

Es ist günstig, gleich am Anfang einen Haltepunkt zu setzen. Das ermöglicht, das zu untersuchende Programm definiert zu starten.
Verwendet man mehrere HP macht es Sinn, als erstes Parameter die Nummer des HP zu übertragen.

Der Datenaustausch erfolgt nach folgendem Muster:

Am Anfang ist der Daten-Pin des Empfängers auf Eingang geschaltet.

Nach erreichen eines Haltepunktes wird der Pin des Senders auf Ausgang geschaltet. Es wird ein Start-Bit gesendet. Dann erfolgt das Senden des ersten Datenpaketes als Mäander.

Nach dem ersten Datenpaket kommt eine Pause. Diese wird vom Empfänger erkannt und die nachfolgenden Daten dem zweiten Parameter zugeordnet.

Die Übertragung des zweiten Parameters beginnt wieder mit einen Start-Bit. Das ist nötig, da sonst eine Null nicht übertragen werden kann.

Nach Übertragung des 4. Paketes schaltet das Daten-Pin des Senders auf Eingang, dass des Empfängers auf Ausgang (LOW),

Nach der Darstellung der Ziffern und dem Start mit dem Taster, wird ein HIGH vom Empfänger gesendet und danach das Daten-Pin wieder auf Eingang geschaltet.

Das gesendete HIGH ist für den Sender das Signal, das zu untersuchende Programm wieder frei zu geben und das Spiel beginnt wieder von vorn.

Implementiert man den Sender auf einen anderen Typ des Arduino kann die Pausenerkennung kritisch sein (while (zw3 < 100);.). Dann muss man die 100 ändern. Ist die Ziffer zu klein, wird das erste Parameter entweder als 0 oder 1 dargestellt, unabhängig was gesendet wurde.
Ist sie zu groß, kommen nur undefinierte Werte an. Diese Zeile existiert 4 mal.

Ich hoffe das war jetzt nicht zu großes Kauderwelsch. Bei Fragen fragen . . .

Auch wenn ich auf dem Gebiet der Programmierung (Assembler, Maschine) jahrelang (lang ist es her) gearbeitet habe, ist diese Art für mich Neuland. Für Ratschläge bin ich dankbar. Es würde mich auch interessieren, wenn es jemand zum Laufen gebracht hat und es anwendet.

M.f.G.

Hans-Ulrich
Benutzeravatar
Daniel
. . . .
. . . .
Beiträge: 390
Registriert: 11.03.2017, 08:23
Wohnort: Berlin
Kontaktdaten:

Re: Debugger für Arduino UNO

Beitrag von Daniel »

Hallo Hans-Ulrich,

danke für Deine Mühe, werde ich mal ausprobieren.

Viele Grüße
Daniel
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

Hallo allerseits,

es hat mir keine Ruhe gelassen und so ist die Version 3 vom Debugger entstanden. Der Unterschied ist die verwendete Anzeige. In dem Fall eine LCD 1602A 16x2. Angesteuert über ein I2C Modul.
Der Anschluss des Moduls:

GND -> GND ; VCC -> 5V ; SDA -> A4 (Daten) ; SCL -> A5 (Takt)

Ansonsten alles wie in der Version 2. Die Programme können hier geladen werden: http://www.huk-2.de/debugger/debugger_v3.zip

So sieht das jetzt aus:

Bild

Der blaue Draht wieder Masse zum anderen Bord. Der rote ist die Datenleitung.

M.f.G.

Hans-Ulrich
Benutzeravatar
Daniel
. . . .
. . . .
Beiträge: 390
Registriert: 11.03.2017, 08:23
Wohnort: Berlin
Kontaktdaten:

Re: Debugger für Arduino UNO

Beitrag von Daniel »

Hallo Hans-Ulrich,

das Display ist deutlich besser :-)

Tolle Arbeit!

Viele Grüß
Daniel
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

Hallo Daniel,

eigentlich gab es nur ein Problem, dass war eine funktionierende "LiquidCrystal_I2C" zu finden. Es kamen entweder Fehlermeldungen, die ich nicht deuten konnte oder es kam der Fehler "302". Den kenne ich mittlerweile, nur mit dem Beheben ist es nicht so leicht, fast unmöglich. Die Fehlermeldungen kommen ja auch meistens nicht für die Zeile, in der der Fehler steckt.
Glück hatte ich mit der LiquidCrystal_I2C-1.1.2.zip. Die habe ich auch mit in das Paket gelegt.
Benutzeravatar
Hans_Ulrich
. .
. .
Beiträge: 187
Registriert: 01.04.2017, 16:52
Wohnort: Bad Düben

Re: Debugger für Arduino UNO

Beitrag von Hans_Ulrich »

Hallo allerseits,

den Debugger habe ich jetzt eine Weile benutzt. Dabei sind mir doch noch einige Kleinigkeiten aufgefallen. Als Problem stellte sich der definierte Start beider Systeme heraus. Deshalb gibt es jetzt die Version 4.
Als einzige Änderung auf der Seite der Hartware ist ein Draht dazu gekommen und zwar vom Empfänger Digital 1 auf Reset vom Sender.
Mit einem Reset vom Empfänger werden jetzt beide Systeme im richtigen Zeitfenster gestartet.

http://www.huk-2.de/debugger/debugger_v4.zip

Mit freundlichen Grüßen

Hans-Ulrich
Antworten