ATmega8 , ArduinoIDE und mySmartUSB light

Hallo,

Bitte zur Kenntnis nehmen, dass ich absoluter Neuling sowohl in Sachen µC, als auch Elektronik bin. Erste Projekte jedoch erfolgreich mit dem Arduino Duemilanove und dem ATmega328 auf die Beine gestellt.

Das Vorhaben : Ich möchte gerne einige ATMega8-16PU mit der Arduino IDE v00018 und dem mySmartUSB light Programmer programmieren. Bin was BASCOM und AVR-GCC angeht noch nicht fit, weswegen ich gerne die Syntax der Arduino Programmiersprache gerne eine Zeit lang weiter nutzen möchte. Der mySmartUSB light Programmierer ist über ISP 6-pin mit dem µC verbunden. Ext. Quarz mit 16 Mhz , 7805 Spannungsregler dienen auf einem Steckerboard ausserdem als Spannungsversorgung/Takt. Habe mit Hilfe dieses Forums bereits erfolgreich den Bootloader auf den Controller geladen.

Problem : Wie nutze ich nun die Arduino IDE, die den Bootloader schon brennen konnte, zum uploaden der Sketches ? Wenn das nicht durch die GUI geht, hätte ich gerne gewusst, ob die compilierte HEX Dateien irgendwo zu finden sind, so dass ich das brennen eigenmächtig mit avrdude bewältigen kann. Es geht mir lediglich darum die einfache Arduino Syntax weiter verwenden zu können.

Das ist aber jetzt mal ungewöhnlich, denn normalerweise ists eher umgekehrt. :) Du kannst den bootloader brennen aber keinen Sketch übertragen? Hast du vielleicht nur vergessen das USB-Kabel am Arduino umzustöpseln?

Aaaaaaalso, Du hast einen Atmega8, einen Mysmartusb light, ein Quarz und einen Spannungswandler. ch gehe davon aus das das Quarz auch noch mit den 22pF Kondensatoren ausgestattet ist... gut, dann hättest Du in der Tat ein Minmal Setup....

Du bist wirklich sicher daß der Bootloader auf dem Atmega8 gelandet ist? Manchmal übersieht man daß im Debug irgendwo nen 0XFF steht oder ähnliches... nagut, wird geklappt haben....

Du mußt die Boards.txt auf den Smartusb light anpassen... jenachdem was Du dort gerade für eine Firmware drauf hast... gibt ja stk und avr910-Firmware.

Was sagt Dir die IDE wenn Du den Sketch downloaden willst? Da müßte es doch eine Fehlermeldung geben.... Man kann (ich glaube strg oder shift gedrückt halten bei programmieren) eine detailiertere Debug-Ausgabe bekommen.

Es wäre wirklich interessant wie die lautet.

Gut zum allgemeinen Ablauf... Boards.txt editieren.... da muß die CPU rein, die Quarzfrequenz, der Programmer, das Protokol... erstmal eine kleine Baudrate..., und wie das ganze heißt... z.B. Atmega8 mit Smartusb light.

Dann solltest Du eigentlich sketche auf den Chp laden können.

Wichtig sind wie immer die Fuses... Du mußt dem ATmega sagen, daß er auch das Quarz und nicht den internen Osszilator benutzen soll....

Gib mal ein paar mehr Infos über dein Setup, daß was Du schon gemacht und probiert hast, und vorlallem die Debug-Logs/Ausgaben....

Ich habe mich vor nem halben Jahr auch mit dem SmartUSB light rumgeschlagen... vielleicht kann ich Dir helfen... aber im Moment sinds nen bisschen wenig Infos....

Lieber Gruß ChrisS

Danke zunächst für die Antworten.

@ Schwarzfuss :

Hast du vielleicht nur vergessen das USB-Kabel am Arduino umzustöpseln?

Ich arbeite nur mit der Arduino GUI und nicht mit dem Duemilanove. Den habe ich zwar auch, da es aber auch anders gehen muss als mit diesem Kabelsalat, versuche ich es so. Der Aufbau also :

mySmartUSB Light (COM) ->->- ISP ->->-> Minimal Setup auf Steckboard.

Ich wunder mich ja ebenfalls darüber, dass es mit dem Bootloader klappt, aber nicht mit den Sketches.

@ ChrisS

Alle wesentlichen Veränderungen habe ich folgendem Thread entsprechend gemacht : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1266336058. ( Wurde seinerzeit von einem gewissen ChrisS geöffnet. ) Zusätzlich aber noch Veränderungen im boards.txt :

Preferences.txt

upload.using = mySmartUSB
upload.verbose=true
compile.verbose=true

programmers.txt

mySmartUSB.name=mySmartUSB
mySmartUSB.protocol=stk500v2
mySmartUSB.communication=serial

Jetzt war ich in der Lage den Bootloader via Arduino IDE zu laden. Das ging auch mit avrdude. Ebenso mit AVR Studio 4. Teile des Protokolls ( Habe wahllos gefiltert ) :

C:\Dokumente und Einstellungen\XXXX\Eigene Dateien\Arduino\arduino-0018\hardware/tools/avr/bin/avrdude -CC:\Dokumente und Einstellungen\XXX\Eigene Dateien\Arduino\arduino-0018\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega8 -cstk500v2 -P\\.\COM4 -e -Ulock:w:0x3F:m -Uhfuse:w:0xca:m -Ulfuse:w:0xdf:m 

avrdude: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         System wide configuration file is "C:\Dokumente und Einstellungen\XXXX\Eigene Dateien\Arduino\arduino-0018\hardware/tools/avr/etc/avrdude.conf"

         Using Port            : \\.\COM4
         Using Programmer      : stk500v2

avrdude: ser_open(): setting dtr
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 

..
avrdude: Recv: 
...

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: Send: . [1b] L [4c] . [00] . [03] . [0e] . [11] . [01] . [01] K [4b] 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 

avrdude done.  Thank you.

Soweit, dachte ich, sei alles in Ordnung.
Anschließend mit der gleichen Konfiguration und dem Testaufbau ( also alles unverändert ) versucht, ein Sketch hochzuladen. Dann aber:

avrdude: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         System wide configuration file is "C:\Dokumente und Einstellungen\XXXX\Eigene Dateien\Arduino\arduino-0018\hardware/tools/avr/etc/avrdude.conf"

         Using Port            : \\.\COM4
         Using Programmer      : stk500
         Overriding Baud Rate  : 19200

avrdude: ser_open(): setting dtr
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: Recv: 
avrdude: stk500_2_ReceiveMessage(): timeout

avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 
.
.
.

Diese Meldung wiederholt sich nun. Ohne Ende. Ich dachte, es läge an der stk500 FW, da ja STK500v2 drauf war. Nach einigem Suchen habe ich dann folgende Änderung in der boards.txt vorgenommen :

atmega8.name=Arduino NG or older w/ ATmega8

atmega8.upload.protocol=stk500v2
atmega8.upload.maximum_size=7168
atmega8.upload.speed=19200

Die Fehlermeldung beim Upload war aber identisch. Natürlich hat avrdude dann den richtigen Programmer STK500v2 benutzt, was aber nichts nützte.

Ich habe das Gefühl Deine Fuses sind falsch gesetzt... kann das sein?

Dann wäre jetzt die Frage in wie weit das rückgängig zu machen geht....

Hier nen Link um deine Fuseeinstellungen zu checken... http://www.engbedded.com/fusecalc

Lieber Gruß ChrisS

Hmm...

Also ich habe die Fuses mal mit AVR Studio 4 ausgelesen. Liefert : HIGH 0xCA LOW 0xDF

Ist auf ext. Crystal High Freq. Start-up time : 16K CK + 0ms gestellt. ISP Frequenz ist 57,60 kHz.

Gruß rrak

Um genau zu sein , hier die Meldung von avrdude :

avrdude: stk500v2_getsync(): found STK500 programmer
         AVR Part              : ATMEGA8
         Chip Erase delay      : 10000 us
         PAGEL                 : PD7
         BS2                   : PC2
         RESET disposition     : dedicated
         RETRY pulse           : SCK
         serial program mode   : yes
         parallel program mode : yes
         Timeout               : 200
         StabDelay             : 100
         CmdexeDelay           : 25
         SyncLoops             : 32
         ByteDelay             : 0
         PollIndex             : 3
         PollValue             : 0x53
         Memory Detail         :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    20   128    0 no        512    0      0  9000  9000 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel STK500 Version 2.x firmware
         Programmer Model: STK500

lfuse 0 0 0 0 no 1 0 0 2000 2000 0x00 0x00

Widerspricht sich aber mit:

LOW 0xDF

Lieber Gruß ChrisS

Danke ChrisS.

Muss aber gestehen, dass ich das nicht verstehe. Habe natürlich vor diesem Post eigenmächtig versucht mich schlau zu machen. Vielleicht hast du irgendeinen Link oder ähnl. ?

Es werden nämlich korrekterweise folgende AVRDUDE Argumente benutzt.

-U lfuse:w:0xdf:m -U hfuse:w:0xca:m

Also...

Offensichtlich ist der Bootloader nicht drauf. Arduino gibt zwar eine positive Rückmeldung. Beim genauen hinsehen stellt man aber fest :

Arduino benutzt folgende Argumente :

avrdude.conf -v -v -v -v -pm8 -cstk500v2 -P\\.\COM4 -e -Ulock:w:null:m -Uhfuse:w:0xca:m -Ulfuse:w:0xdf:m

dazu sagt avrdude :

avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14] 
avrdude: Recv: 
avrdude: Recv: 
usw...

Die gesendeten Daten kommen ( Das schließe ich als Laie daraus ... ) nicht an.

Dagegen habe ich den ATmegaBOOT.hex zu "Fuß" über CMD mit folgenden Argumenten versucht zu überspielen :

avrdude -v -v -v -v -p m8 -e -c stk500v2 -P com4 -U flash:w:"C:\ATmegaBOOT.hex":i

dazu sagt avrdude, was besser aussieht :

avrdude: Send: .[1b] # [23] . [00] . [03] . usw..
avrdude : Recv: .[1b]
avrdude : Recv: # [23]
usw.

Ich habe es schließlich zum laufen bekommen. Grund für die Strapazen war ein Lockout des Mikrocontrollers.

ATmega mit 16 Mhz Quarz an XTAL und anschließend die Fuses

-U lfuse:w:0xdf:m -U hfuse:w:0xca:m -Ulock:w:0x3f:m

setzen.

Verzichte erstmal auf weitergehende Dokumentation, weil das ein dummer Fehler meinerseits war und in zwei weiteren Threads schon behandelt wurde.

Grundsätzlich Frage meinerseits :

Der Bootloader dient in erster Linie dazu die TX RX Serielle Schnittstelle zum Upload eines Sketches nach dem Reset bereit zu halten. Nachteilig für eine Breadboard Minimalinstallation ist doch, dass ich dazu manuell das Reset durchführen, sowie ein FTDI232 USB Breakout vorsehen muss. Wenn der Bootloader erfolgreich über ISP auf den Mikrocontroller geladen werden, wäre es doch das einfachste, wenn über ISP auch die Sketches geuploaded werden könnten. Gibt es dazu ein Möglichkeit ? Im Bestfall direkt aus der ArduinoIDE. Ungern möchte ich die .hex Datei nach dem Komplieren suchen und mit avrdude brennen.

Hallo, Du befindest Dich immernoch auf dem Holzweg.

Du kannst per SmartUSB Light auch die Sketches programmieren.

Wenn Du den Bootloader drauf hast, den SmartUSB Light in der Boards.txt eingetragen hast...

Lieber Gruß Chris

Ich häng mich hier nur kurz rein: Es ist also mit geringfügigen Anpassungen der Konfigurationsdateien der IDE möglich, beliebige Programmer für das uploaden des Sketches zu benutzen? Also gewissermaßen nicht den bootloader als programmer nutzen, sondern direkt in die nicht vom Bootloader belegten Teile zu schreiben?

Ich frage einfach, weil ich zwar haufenweise AVR's habe, aber kein FTDI breakout. Und ich will nich immer Strippen vom Arduino board zum Breadboard legen.

Jaein! :)

Theoretisch ja... praktisch kann es sein daß es Programmer gibt die vielleicht nicht funktionieren... ABER:

Man gibt in der Boards.txt bzw. der Programmers.txt den Programmer, den Port und das Protokol an... (und in der Boards.txt das Targetboard)...

Hier ein auszug aus der Programmers.txt:

arduinoisp.name=Arduino as ISP
arduinoisp.communication=serial
arduinoisp.protocol=stk500v1
arduinoisp.speed=19200

Bedeutet, hier wird als Programmer ein Arduino benutzt der über den Serialport(Serialportemulation) angeschlossen ist, und DAS STK500 Protokol unterstützt.

Naja, so ziemlich jeder Programmer hat ein Protokol... sobald dieses Protokol von der IDE unterstützt wird, und der Port von der IDE ansprechbar ist, ist es auch möglich den Programmer einzusetzen....

Ich weiß das es beim SmartUSB Light geht, da ich selbst einen habe... ich weiß auch das die mir bekannten Protokolle der ArduinoIDE Standardprotokolle sind,.... Standard bedeutet im Kehrschluss das so ziemlich jeder Programmer eins oder mehrere dieser Protokolle unterstützen müßte...

Antwort wäre also eigentlich ja.... nur ich weiß nicht in wieweit es Programmer gibt die irgendwelche exotischen Dinge machen... oder auf exotische Weise angesprochen werden (USB Kommunikation).....

Es ist vielleicht etwas fahrlässig, aber ich würde jetzt einfach mal behaupten das es mit der MAsse der gängigen Programmer gehen müßte...

Lieber Gruß Chris