Elektronik_Header_3LŘftersteuerung mit ESP-01

 

Arduino und Visual Micro

[This text in english]

Auf der Suche nach Informationen wie man verhexten Code in einem Arduino debuggen kann, ohne Myriaden von println() Statements in den Code zu streuen, habe ich mir ein Atmel-ICE zugelegt, zugegebener Ma├čen, ohne vorher gro├čartig Recherchen anzustellen, mit welchen Software-Tools ich das ICE zur Zusammenarbeit mit meinem Arduino Nano V3 bewegen k├Ânnte. Im weiteren Verlauf meiner Nachforschungen bin ich dann bei Visual Micro gelandet und habe gelesen, dass ÔÇ×jeder Programmer unterst├╝tzt wird“, also habe ich mir die 45-Tage Trial-Version von Visual Micro sowie das aktuelle Atmel Studio V7 geladen und installiert.

Die Integration des Visual Micro Plugins in Atmel Studio funktioniert vollkommen problemlos, anschlie├čend musste noch die aktuellste Arduino-IDE installiert und Visual Micro bekannt gemacht werden, dann konnte ich mein Programm f├╝r den Arduino ohne jegliche ├änderungen am Code compilieren und mit dem Atmel-ICE ├╝ber das SPI-Interface auf den Arduino laden.

Jetzt k├Ânnte ich eigentlich mit dem Debuggen beginnen, w├Ąre da nicht noch die elektrische Verbindung zwischen Atmel-ICE und Arduino herzustellen...

    Zeitsprung r├╝ckw├Ąrts…
    In der Absicht, beim Kauf des Atmel-ICE ein paar Euro zu sparen, habe ich das nackte Board ohne Kabel und ohne Geh├Ąuse gew├Ąhlt.

    Atmel-ICE board-only

    Im Nachhinein w├╝rde ich von dieser furiosen Idee Abstand nehmen, denn die Adaption der am ICE vorhandenen 1,27 mm-Stecker auf den am Arduino Nano V3 vorhandenen 2,54 mm-Stecker ist mit Bordmitteln nur sehr schwierig zu realisieren. Alleine die Beschaffung von 0,675 mm Pitch Flachbandkabel ist hier in Deutschland Gl├╝ckssache und ohne ein bekanntes Online-Kaufhaus quasi unm├Âglich. Doppelreihige Pfostenstecker im 1,27 mm Raster gibt es ├╝berhaupt nicht f├╝r den privaten Bastler und der von 2,54 mm Steckern gewohnte Trick, einfach zwei einreihige Pfostenreihen parallel nebeneinander zu verwenden zieht hier nicht, denn der Abstand der beiden Pfostenreihen ergibt in diesem Fall 2 mm, was nat├╝rlich nicht passt. Ich habe also die beiden einreihigen Pfostenstecker auf jeweils einer Seite mit feinem Schleifpapier soweit abgeschliffen dass der resultierende Abstand beim parallelen Anordnen auf die korrekten 1,27 mm kommt. Ein rechtes Gefummel, das ich mir, wie geschrieben, kein weiteres Mal antun m├Âchte.

    Atmel-ICE mit Kabel und Arduino Nano V3.0

    Nach ├ťberwindung dieser H├╝rde konnte ich das ICE erstmals mit meinem Arduino Nano V3 verbinden.

Zur├╝ck in die Gegenwart…
Da ich bisher nicht mit dem Atmel Studio gearbeitet habe, hatte ich ein paar Anlaufschwierigkeiten auf der Suche nach den passenden Einstellungen, damit das Atmel -ICE sowohl als Programmer ├╝ber SPI als auch zum Debuggen ├╝ber debugWIRE verwendet wird.

Der Arduino Nano V3, den ich f├╝r meine ersten Gehversuche beim Debuggen verwendet habe - ja, ich bin manchmal sehr vorsichtig (siehe Hinweis unten) - hat einen defekten USB -Seriell-Konverter, der normale Download des Programms per USB-Schnittstelle funktioniert also nicht. Das sollte aber kein Problem sein, denn das Atmel-ICE programmiert ja ├╝ber SPI. Diese Annahme hat sich als richtig erwiesen, der Code wurde problemlos auf den ┬ÁC geladen und lief.


Hinweis
Damit debugWIRE funktioniert, d├╝rfen keine Kondensatoren an der Reset-Leitung des ┬ÁC angeschlossen sein, weiterhin darf ein eventuell vorhandener PullUp Widerstand nicht kleiner als 10k sein.

Beim Arduino Nano und vielen anderen Arduinos ist ein Kondensator seriell zwischen DTR-Ausgang des USB-Seriell-Wandlers und dem Reset-Eingang des ┬ÁC eingebaut. Dieser Trick erlaubt die automatische Programmierung der Arduinos ├╝ber USB, ohne dass man von Hand einen Reset ausl├Âsen m├╝sste um den Bootloader zu starten.
Dieser Kondensator muss auf dem Arduino gefunden und ausgebaut werden. M├Âchte man das Ausl├Âten des Kondensators vermeiden, kann alternativ die Leitung zwischen Kondensator und dem Reset-Anschluss des ┬ÁC mit einem scharfen Messer oder Skalpell vorsichtig unterbrochen werden. So hat man die M├Âglichkeit, diese Operation sp├Ąter wieder r├╝ckg├Ąngig zu machen. Je nach Layout ist nach dem Trennen der Verbindung zum Kondensator der Reset-Taster immer noch funktional, gegebenenfalls unterschiedliche Stellen im Verlauf der Leiterbahn zum Auftrennen in Augenschein nehmen.

Der am Reset-Eingang normalerweise vorhandene PullUp hat bei mir vorliegenden Varianten des Arduino Nano unterschiedliche Werte zwischen 1k und 10k. Letzterer bleibt unver├Ąndert, Widerst├Ąnde mit kleineren Werten m├╝ssen entfernt oder gegen einen mit mindestens 10k ausgetauscht werden. Solange man mit dem Atmel-ICE arbeitet ist ein externer PullUp an Reset ├╝berfl├╝ssig, da das ICE einen internen PullUp hat. Da man aber im Allgemeinen nach dem Debuggen den Arduino wieder normal verwenden will, sollte man gleich einen passenden Widerstand einbauen, wenn man schon am L├Âten ist.


Jetzt der ├ťbergang zum Debuggen. ├ťber die Optionen im Atmel Studio wird das Atmel-ICE als Debugger ausgew├Ąhlt und als Debug-Verbindung debugWIRE selektiert. Man wird darauf hingewiesen, dass man eine laufende Debug-Sitzung immer und unbedingt ├╝ber die Funktion ÔÇ×Disable debugWIRE and Close“ beenden muss, weil sonst das SPI-Interface nicht wieder aktiviert wird und man sich somit aus dem ┬ÁC ausgeschlossen hat.

Nun, irgendwie funktionierte der R├╝ckweg bei meinem ersten Versuch im Einzelschritt durch mein Programm zu gehen nicht und der ┬ÁC blieb f├╝r mich f├╝rderhin erst mal unerreichbar. Leider verweigert die hinterlagerte Statemachine in Atmel Studio einen zweiten Versuch - der Knopf ÔÇ×Disable debugWIRE and Close“ wird nach der ersten  Bet├Ątigung unbedienbar (grayed) und l├Ąsst sich durch nichts und niemanden dazu ├╝berreden, nochmal aktiviert zu werden.

Die vermeintlich falsch gesetzten Fuses im Arduino mittels HVPP wieder in Ordnung zu bringen ist nicht so einfach, wie es vielleicht erscheinen mag, denn man kommt nicht an alle Signale des ┬ÁC heran, die man f├╝r die High Voltage Programmierung ben├Âtigt. Dass der ┬ÁC im gegebenen Arduino in einem PLCC Geh├Ąuse daher kommt, hilft genauso wenig. Alle einschl├Ągigen L├Âsungen zur Rettung “ver-fuse-ter” Atmels mittels HVPP beziehen sich leider auf ┬ÁC im DIP-Geh├Ąuse, das heute kaum noch einer nutzt.

Nach l├Ąngerer Recherche im Netz habe ich dann den entscheidenden Hinweis im Forum ÔÇ×avrfreaks.net“ entdeckt:

Bei der Installation von Atmel Studio findet auch das Befehlszeilen-Tool atprogram seinen Weg auf den Rechner und bietet uns die entscheidende M├Âglichkeit, den debugWIRE-Zugang des ┬ÁC ohne Behinderung durch eine wildgewordene Statemachine ├╝ber die Eingabe des Befehls

    atprogram -t atmelice -i debugWIRE -d atmega328p dwdisable

stillzulegen und somit wieder Zugang per SPI auf den ┬ÁC zu bekommen. Der oben angegebene Befehl wird im Command Fenster innerhalb der IDE eingegeben, aufgerufen ├╝ber das Men├╝ “Tools->Command Prompt”. Direkt nach Ausf├╝hrung des Befehls muss ├╝ber das Men├╝ “Tools->Device Programming” die dwenable Fuse zur├╝ckgesetzt werden um SPI wieder permanent einzuschalten. F├╝hrt man an dieser Stelle einen Power cycle des Arduino durch, ist man wieder im debugWIRE-Mode und der ┬ÁC bleibt ├╝ber SPI unerreichbar.

Vielen Dank an dieser Stelle an Morten Olsen f├╝r den entscheidenden Tipp!

Dieser Vorgang, also per SPI die dwenable Fuse setzen, Programm durchsteppen, Fehler finden und korrigieren, ├╝bersetzen und erneuter Download per SPI, dann wieder zur├╝ck in den Debugmode, passiert w├Ąhrend des beschriebenen Prozedere andauernd automatisch und ohne Murren und Probleme. Nur beim Abbruch der Debug-Sitzung ist mir mehrfach passiert, dass sich die dwenable Fuse nicht mehr ├╝ber Atmel Studio zur├╝cksetzen lie├č und ich zum weiter oben beschriebenen Ablauf greifen muss um SPI wieder zu aktivieren.


Mein Atmel-ICE ist die PCBA-only Version. Ein Geh├Ąuse f├╝r das Atmel-ICE w├Ąre sch├Ân...

 


Besucherzaehler

Besucher seit
25.11.2000

>