Go Down

Topic: Arduino: einfaches Debug o.ä. über ISP (Read 231 times) previous topic - next topic

hk007

Dec 21, 2014, 11:16 am Last Edit: Dec 21, 2014, 11:21 am by hk007
Hi,

eigentlich beschränkt sich mein "Debug" darauf, über die serielle Schnittstelle Informationen zu einem Terminalprogramm zu senden. Oder wenn ein Display dran hängt, darauf Infos auszugeben. Ganz rudimentär manchmal auch eine LED.

Jetzt bastel ich aktuell an einer Geschichte, wo ich die serielle Schnittstelle für was anderes brauche.
Umstecken für Programmdownload und Debug umgehe ich damit, dass ich auf einem Mega entwickle, der zwei (eigentlich 4 aber ich brauch nur 2) UART-Schnittstellen hat.
Aber dafür ist der Mega Overkill. Würde das eigentlich mit einem Nano oder Micro machen wollen.

Den Download kann ich ja auch über meinen USPasp machen, aber welche Möglichkeiten hätte ich dann, meine Software zu "debuggen"? Software-Serial würde ich jetzt nicht als Lösung sehen.  

Den Begriff "Debug" nicht so wörtlich nehmen. Ich will halt irgendwie Infos aus dem Controller rausbekommen. Ich hab da auch schon öfters was von JTAG gelesen, aber das habe ich bis heute noch nicht kapiert. Und braucht m.E zusätzliche Hardware und geht nicht mit jedem AVR.
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

nix_mehr_frei

Kommt immer darauf an, was du ohnehin in der Schaltung hast. Wenn ein LCD Punktmatrixdisplay verwendet wird. Dann kann es sinnvoll sein, in der Entwicklungsphase statt dem 2x 16 ein 4x 20 zu nehmen und in der Lib nur die Werte auf das große Display anzupassen und sich dann noch verschiedene Rohwerte von den Analogeingängen oder Zwischenwerte aus den Formeln mit ausgeben zu lassen.
Ich hatte z.B. ein Projekt, wo ich ein 40x 4 Display eingesetzt habe und ein paar Schaltschwellen aus Analogwerten brauchte. Ich habe die Texte zu meinen Messwerten zunächst etwas eingekürzt und mir noch analoge Rohwerte mit anzeigen lassen. Auf Basis dieser Werte habe ich dann für if Anweisungen die Schwellwerte gesetzt. Als die dann passten, wurde dann erst auf "schön" getrimmt.
Den Codeblock für die Anzeige habe ich noch ein 2. Mal kopiert und 1x auskommentiert.
So kann ich ganz schnell umswichen, ob ich abgleichen will, oder normal anzeige.
Denkbar wäre auch bei einem I2C Display im Code noch ein 2. Display mit vorzusehen, was nur in der Entwicklungsphase angeschlossen ist.

Gruß Gerald
rot ist blau und Plus ist Minus

elektron_

Hallo,

Software-Serial wäre dann - zumindest nach meinen Vorstellungen - eine Alternative wenn man nur einen TxD Pin alleine (ohne Verschwendung eines weiteren Pin für das nicht genutzte RxD) definieren könnte.

Aber genau daß geht anscheinend nicht...

Oder kennt hier jemand eine Möglichkeit / Lib die genau das macht ?

Christian

PS.: JTAG ist ja beim Uno/Nano/Mini nicht möglich, aber geht das vielleicht beim Mega oder Due ???
Elektronik funktioniert intern mit Rauch.
Beweis: Wenn der Rauch herauskommt ist es kaputt...

jurs

Software-Serial wäre dann - zumindest nach meinen Vorstellungen - eine Alternative wenn man nur einen TxD Pin alleine (ohne Verschwendung eines weiteren Pin für das nicht genutzte RxD) definieren könnte.

Aber genau daß geht anscheinend nicht...
Ja, das "geht nicht", weil kein Fuß dran ist.

Oder kennt hier jemand eine Möglichkeit / Lib die genau das macht ?
Zum Beispiel die Libraries "SoftwareSerial" und "AltSoftSerial" machen das.
Wenn Du den RX oder den TX Pin nicht benötigst, übergibst Du als Pin-Parameter einfach "-1".

rudirabbit


Quote
Den Codeblock für die Anzeige habe ich noch ein 2. Mal kopiert und 1x auskommentiert.
So kann ich ganz schnell umswichen, ob ich abgleichen will, oder normal anzeige...
Einfacher ginge sowas mit #define KONSTANTE  und #ifdef


Zum Debuggen generell, ginge sowas via ISP und im debugWIRE Mode eines AVR Dragon ?
Unter Atmel Studio.

Hatte die Frage schon mal gestellt, ging aber unter....







Arduino UNO,MEGA  Fremdgänger mit dem  Nucleo L152RE   
Dunkel die andere Seite ist. - Klappe, Yoda, und iss deinen Toast :-)

Serenifly

#5
Dec 21, 2014, 06:34 pm Last Edit: Dec 21, 2014, 06:44 pm by Serenifly
Einfacher ginge sowas mit #define KONSTANTE  und #ifdef
Man kann sich sogar sparen dass man jedesmal #ifdef #endif schreibt:

Code: [Select]
#define DEBUG 1

#if DEBUG > 0
  #define debugPrint(text) Serial.print(text)
  #define debugPrintln(text) Serial.println(text)
#else
  #define debugPrint(text)
  #define debugPrintln(text)
#endif


Dann macht man überall wo man Debug Ausgaben haben will debugPrint()/debugPrintln() und wenn DEBUG auf 0 gesetzt wird, wird das gar nicht kompiliert.

Das kann man auch auf mehrere Debug-Stufen erweitern, z.B. volle Debug Ausgaben, nur ein paar elementare Sachen, keine Ausgaben.


Zum Debuggen allgemein:
Für Visual Micro gibt es einen kostenpflichtigen Debugger:
http://www.visualmicro.com/page/Debugging-for-Arduino.aspx

Der läuft aber über die normale USB Schnittstelle. Ist hier also nichts.

EDIT:
SoftwareSerial geht auch:
http://www.visualmicro.com/page/User-Guide.aspx?doc=Debugging-With-Different-Ports.html

rudirabbit

#6
Dec 21, 2014, 08:15 pm Last Edit: Dec 21, 2014, 08:17 pm by rudirabbit
Der Thread wird damit ein wenig OT - sorry
@Serenifly: Wir reden glaube ich etwas aneinander vorbei ?
         
Ich trage mich mit den Gedanken einen AVR Dragon zu kaufen, da mein alter mk2Clone nur noch mit dem Atmel Studio 4 funktioniert.

Das Plugin Visual Micro läuft aber nicht mit dieser alten Version von AVR Studio.
Ich gehe derzeit den Umweg den HEX File mit der alten 4er Version zu flashen. 

Ist etwas umständlich, deshalb will ich einen AVR Studio 6.2 kompatiblen ISP Programmer haben.
Der Preisunterschied zwischen den orginalen Atmel ISP Programmer und dem AVR Dragon ist gering.

Der AVR Dragon hätte Mehrwerte wie Debuging, HV Programmieren. Dafür hat er kein Gehäuse, und man muß evtl, noch Stiftleisten und einen Zif Sockel einlöten.

Meine Frage ging nun dahin ob Debugging mit DebugWire (ISP) funktioniert, viele Atmel haben ja keinen JTAG.
Ohne das Visual Micro Plugin, läuft das wohl.
Die Frage ist ob es in Verbindung mit Visual Micro funktioniert.
Wenn man Arduino Board Design verwendet, darf kein Kondensator auf der Reset Leitung sein. (logisch)
 
Arduino UNO,MEGA  Fremdgänger mit dem  Nucleo L152RE   
Dunkel die andere Seite ist. - Klappe, Yoda, und iss deinen Toast :-)

elektron_

Hallo,

Zum Beispiel die Libraries "SoftwareSerial" und "AltSoftSerial" machen das.
Wenn Du den RX oder den TX Pin nicht benötigst, übergibst Du als Pin-Parameter einfach "-1".

... das ist sehr interessant, danke :)
"AltSoftSerial" wird aber nicht gehen weil die ja fix auf Pin8 un Pin9 eingestellt ist (und eigentlich gar keine Pin Parameter übergeben werden) - oder übersehe ich was?

Christian
Elektronik funktioniert intern mit Rauch.
Beweis: Wenn der Rauch herauskommt ist es kaputt...

jurs

"AltSoftSerial" wird aber nicht gehen weil die ja fix auf Pin8 un Pin9 eingestellt ist (und eigentlich gar keine Pin Parameter übergeben werden) - oder übersehe ich was?
Stimmt, ohne die AltSoftSerial-Library zu ändern, kannst Du die Parameter zwar angeben, aber laut Kommentar im Quellcode dient dies nur zur Herstellung der Drop-In-Kompatibilität zur SoftwareSerial-Library und wird ansonsten komplett ignoriert:
Code: [Select]
 // for drop-in compatibility with NewSoftSerial, rxPin & txPin ignored
  AltSoftSerial(uint8_t rxPin, uint8_t txPin, bool inverse = false) { }


Um die Verwendung des TX-Pins aus der Library rauszubekommen, muß man also die Library erst so umschreiben, dass alle TX-Funktionen stillgelegt sind.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy