Forum: Mikrocontroller und Digitale Elektronik Arduinoprogramm ohne Arduinoboard flashen


von Peter H. (thunderfrog)


Lesenswert?

Hallo Gemeinde,

nach langer Pause habe ich mir ein neues Projekt zugelegt.
Es ist eine Wörteruhr (clocktwo, wie auch hier im Forum) allerdings von 
www.caschoff.de
Quellcode für die Hardware liegt als Arduino version vor.
Ich habe arduino023 installiert und kann es auch fehlerfrei kompilieren.
In der Baunleitung wird ein Arduinoboard benutzt mit einem Arduino USB 
Programmer.
Den wollte ich mir sparen und habe das ganze mit einem Atmega168 
zusammengesteckt. So weit so gut...

... mein Problem ist nun: wie kriege ich die Software auf mein 
Atmega168?

Ich benutze normalerweise mySmartUSBlight und BASCOM (:O)

Die kompilierte hex Datei habe ich auch schon gefunden, allerdings bin 
ich mir nicht mehr ganz sicher ob das alleine reicht...
... bei dem Arduino board werden ja, so weit ich das richtig verstanden 
habe, auch die fuses per Software gesetzt => ergo weiss ich auch nicht 
wie diese zu setzen sind, es sei denn es steht irgendwo... was mir 
allerdings bis jetzt verborgen blieb...
Ich brauche wohl nicht zu erwähnen, das ich sonst mit Arduino nix am Hut 
habe, das erschliesst sich aus meinem Beitrag hier :O)
Danke für Anregungen, Links zu helfenden Seiten, Lösungen oder virtuelle 
Ohrfeigen :O)

edit: bin nebenbei nicht untätig :O) sauge gerade avr studio 5... mit 4 
ging irgendwie nix, beim 5 er soll die Unterstützung für meinen Stick 
integriert sein... schaumama...

von Krapao (Gast)


Lesenswert?

Ein Atmega168 kann mit dem ISP-ADapter mySmartUSBlight und mit der 
ISP-Software AVRDUDE geflasht werden. Auch die Fuses können so 
gesetzt werden.

Dabei am besten die AVRDUDE Version benutzen, die vom mySmartUSBlight 
Hersteller myAVR in deren Anleitung zum ISP-Programmer beschrieben ist.

von Peter H. (thunderfrog)


Lesenswert?

Danke für Deine Antwort, Krapao.
Ich sauge erneut AVR Studio 5, auf meinem Laptop habe ich es jetzt nach 
2 Stunden aktualisierungen aufgegeben, sitze jetzt vor meinem PC :O) und 
installiere erneut.
Habe nebenbei mmanual gewälz und tatsächlich einen Ablauf für avrdude 
gefunden. Das werde ich simultan gleich testen, danke für den Tip !

von Peter H. (thunderfrog)


Lesenswert?

so... avr studio 5 ist installiert.. suche seit einer halben stunde die 
ansicht für die fusebits... bei studio 4 ist es mir direkt ins gesicht 
gesprungen... hier bin ich am verzweifeln... schlaflos... am ende meiner 
kräfte...
im arduino quellcode wird ein ext. quartz benutzt, den muss ich unbedigt 
abschalten, da ich keinen ran habe. geht das evtl auch anders ?
danke vorab... hol mirn kaffee...

von Peter H. (thunderfrog)


Lesenswert?

okok... fusebits habe ich gefunden und geschrieben... jetzt muss ich nur 
noch die hex datei schreiben... daran arbeite ich momentan

von Krapao (Gast)


Lesenswert?

Für eine rel. genaue Uhr ist ein externer Quarz als Taktquelle eine 
prima Sache.

Die interne Taktquelle eines AVR ist ja ein RC-Oszillator und der ist 
weniger genau, u.a. ist dessen Temperaturgang größer. Man kann den 
RC-Oszillator kalibrieren (Appnote von Atmel...) und wenn man sein 
Projekt bei rel. konstanter Temperatur betreibt, kann das eventuell 
ausreichend genau werden.

Ein anderer Aspekt ist das verwendete Programm. Das wird i.d.R. für eine 
bestimmte Taktrate geschrieben sein - nämlich für die des externen 
Quarzes. Mit dem internen RC-Ozillator ist diese Taktrate eventuell 
nicht zugänglich. Ich weiss nicht, ohne im Datenblatt nachzuschlagen, 
was der Atmega168 als internen Takt anbietet. Möglicherweise nur 1 Mhz 
oder 8 MHz.

Es ist Overkill das AVR Studio runter zu laden, wenn es nur um die 
Übertragung einer fertigen HEX-Datei geht. Dann reicht AVRDUDE allein 
schon aus. Für den Komfort ggf. noch ein AVRDUDE-GUI Programm für die 
Bedienung paer Maus. Das sind paar KB Download. Links zum Programm 
AVRDUDE finden sich im Artikel. Möglicherweise ist es auch auf der 
Begleit-CD deines ISP-Adapters mySmartUSBlight oder auf der 
Herstellerseite myAVR. AVRDUDE ist auch in folgenden 
(Windows)-Programmpaketen enthalten: WinAVR, AVR-Toolchain und 
Arduino-IDE.

von Krapao (Gast)


Lesenswert?

>> Im arduino quellcode wird ein ext. quartz benutzt, den muss ich unbedigt
>> abschalten, da ich keinen ran habe. geht das evtl auch anders ?
>> danke vorab... hol mirn kaffee...

> okok... fusebits habe ich gefunden und geschrieben... jetzt muss ich nur
> noch die hex datei schreiben... daran arbeite ich momentan

Wenn du die Original-Fusebits benutzt hast, dann bist du jetzt 
ausgesperrt, so wie im Artikel AVR Fuses beschrieben.

Deinen Atmega168 kannst du mit ISP nur noch erreichen, wenn du den in 
eine Schaltung mit externem Quarz setzt.

von Peter H. (thunderfrog)


Lesenswert?

Hallo Krapao,
danke für den Tip, soweit habe ich noch mitgedacht, auch wenn es schon 
recht spät war :O) habe als erstes den int. quartz auf 8mhz gelegt. Hat 
soweit alles funktioniert mit avr studio 5 habe ich hex draufebügelt. Da 
ich aber die anderen fuses nicht kenne bzw. nicht weiss wie diese zu 
setzen sind, habe ich mal so ein andruino board bestellt mit usb 
programmer... dann sollte es hinhauen.
achja, das mit avrdude habe ich nicht hinbekommen... deshalb avr 
studio... habe gefühlte 2 stunden installiert :O)

Danke für deine Unterstützung !
Grüße

von Peter H. (thunderfrog)


Lesenswert?

so... da ich noch weitergekommen bin, habe ich mal einen neuen 
Lösungsweg beschritten: habe mySmartUSB in Arduino eingebunden, die 
Vorgehensweise hierfür habe ich zusammengegoogelt, bin wie folgt 
vorgegangen:

1.

programmers.txt erweitert mit

mySmartUSB.name=mySmartUSB
mySmartUSB.protocol=stk500v2

2.

neus board hinzueditiert, und die mit >>> <<< markierten Werte geändert, 
da ich den internen Quarz benutzen möchte auf 8Mhz, den Rest habe ich 
gelassen wie Arduino es haben möchte:
################################################
atmega8.name=TEST ATmega8

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

atmega8.bootloader.low_fuses= >>>0xca<<<
atmega8.bootloader.high_fuses=>>>0xc4<<<
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F

atmega8.build.mcu=atmega8
atmega8.build.f_cpu=>>>8000000L<<<
atmega8.build.core=arduino


soooo... auf meinen breadboard befindet sich ein Atmega8, ISP verkabelt 
(+ ein 100nF zwischen VCC & GND)

Ich starte Arduino, setze COM4, wähle mein editiertes board "TEST Atmega 
8" und brenne anschliessend mit meinen mySmartUSBlight den bootloader... 
nach ca. 7 Sekunden habe ich die Rückmeldung das alles erfolgreich war. 
Ein Auslesen des hex mittels AVR Studio bestätigt mir das der vorher 
komplett leere Atmega nun im unteren Bereich beschrieben wurde...

Jetzt versuche ich mittels USB-BUB (rx/tx gekreuzt, VCC,GND und RST 
angeschlossen) den Atmega zu beschreiben... und nix passiert... 
irgendwie komme ich nicht auf den Atmega drauf. Habe neben drann noch 
ein Arduino RBBB mit einem Atmega 328 versehen und von Werk aus bereits 
mit dem bootloader versehen, hier kann ich mit dem USB-BUB drauf 
schreiben...

So langsam verliere ich meine Ziele aus den Augen :O)

Ich möchte entweder mit meinem mySmartUSBlight oder dem USB-BUB aus 
Arduino Umgebung direkt auf einen AVR Prozessor schreiben können, ohne 
den Arduino RBBB...

Das waren glaube ich meine Ursprungsziele vor ca. 10 Tagen...

Das war mal wieder viel Zeug, ich hoffe alles verständlich rübergebracht 
zu haben :O)

Danke für Eure Hilfe

von mschoeldgen (Gast)


Lesenswert?

Peter Hess schrieb:
> da ich den internen Quarz benutzen möchte auf 8Mhz,

Es gibt keinen 'internen Quarz' beim Mega48/88/168/328 , sondern nur 
einen ungenauen RC (Widerstands-Kondensator) Oszillator, der für eine 
Uhr ungeeignet ist. Für eine Uhr musst du zwingend einen (externen) 
Quarz nehmen, da die Uhr sonst sehr ungenau wird. Und das ist bestimmt 
nicht der Sinn der Sache. Denkbar wäre auch ne 50Hz Synchronisierung, 
das erfordert aber ne geänderte Software.

von Peter H. (thunderfrog)


Lesenswert?

moin mschoeldgen,

den meinte ich natürlich :O)
Die Uhr läuft so weit, gesteuert über eine DS1307 und eben den Pollin 
DCF...

Läuft auch bis jetzt ziemlich genau, ich möchte es aber debuggen über 
den serial Port, da die Sync. bzw. das schreiben der Werte in die DS1307 
anscheinend nicht richtig funktioniert...

von Peter H. (thunderfrog)


Lesenswert?

Etwas genauer: die Uhr sollte sich von alleine Stellen wenn man die Zeit 
grob (+/- 15 Minuten) stellt. Das macht meine eben nicht. Ich stelle sie 
genau ein, dann läuft sie auch genau... aber ich würde gerne wissen wo 
es hängt, deshalb hat mich dieses debuggen gepackt :O)

von Dirk T. (helipage)


Lesenswert?

Peter Hess schrieb:
> ... mein Problem ist nun: wie kriege ich die Software auf mein
>
> Atmega168?

Hallo Peter...

Auch wenn du die SW nun mittlerweile im Atmega "drin" hast:

Es gibt noch eine (meiner Meinung nach) einfachere Methode

In der Arduino-SW kannst du nach dem einstellen des Prozessors einfach 
SHIFT+Upload-Button drücken.
Die SW erzeugt dir dann eine HEX-Datei, die du nun einfach z.B. mit 
AVR-Burner o.ä. Programmen in den ATMEL brennen kannst...

Dirk

von Peter H. (thunderfrog)


Lesenswert?

Hallo Dirk,

mit shift habe ich es noch nicht probiert, ich habe es normal kompiliert 
und dann aus dem temp Ordner herauskopiert und mit AVR gebruzzelt.
Das hat auch hingehauen, allerdings nicht mehr reproduzierbar :O) ich 
bekomme zwar immer noch alles kompiliert, die hex kann ich auch mit AVR 
brennen, aber die Software läuft nicht, es flackert alles nur auf der 
LED Matrix. Das hatte ich am Anfang auch mal, habe dann eine Woche 
rumgelötet und Fehler gesucht (die nicht vorhanden waren :O) bis ich 
dann eine andere Version geflasht habe, damit ging es reibungslos (V1.9 
von Christian Aschoff).

Momentan versuche ich die gleiche Version zu flashen, allerding mit 
einkommentierten debug, sonst alles gleich, um die Stati der DCF und 
anderer Komponente auf einen Terminal auszugeben.

Da diese Kopiererei und mehrere Programme etc. ziemlich aufwändig ist 
dachte ich über eine Lösung nach um einfach aus Arduino direkt auf mein 
Atmega zu flashen. Es klappt zwar nach wie vor nicht, habe aber 
wenigstens wieder einiges dazugelernt :O) Also net ganz für umme ;O)

Auch wenn ich bereits etwas resigniert bin, weil ich jede Nacht seit gut 
einer Woche bis um ca. 02:00 experimentiere wäre ein kleiner Erfog 
wünschenswert um meiner Bastelehre eine Streicheleinheit zu verpassen... 
:O)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.