Forum: Compiler & IDEs Arduino + avrdude + USB


von Torsten Günter (Gast)


Lesenswert?

Hallo,

kann sein, dass ich mich besonders blöd anstelle, aber ich hab mal ne 
kleine Frage:

Besitze ein ARDUINO NG Plus Board, welches einen ATMEGA168 beinhaltet. 
Dieses Board ist mittels einer USB-Schnittstelle an meine LinuxKiste 
verbunden.

Mir ist es bisher gelungen, den Programmcode für das Board in avr-gcc zu 
kompilieren und den nötigen .hex-Code zu erzeugen. So weit so gut...

ABER: ich bekomme diesen Code NICHT in meinen Atmega geschossen!!

mit

avrdude -p m168 -P /dev/ttyUSB0 -U flash:w:main.hex -c ???

heisst es nur, dass sich niemand meldet!!
Habe schon alles möglich ausprobiert. WICHTIG ist dabei vielleicht, dass 
ich kein Programmieradapter benutze. Unter Windows ist dieser auch nicht 
nötig beim Benutzen einer IDE die in Java programmiert ist.

Ich wäre sehr dankbar wenn sich jemand meines Problems annimmt!

Im Voraus schon mal dankeschön!!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was für einen Programmer beinhaltet denn das Arduino?  Du musst eine
passende -c Option auswählen bei avrdude.

von Torsten Günter (Gast)


Lesenswert?

Hallo,

also das Arduino hat nen Atmel168 drauf. Bei meinen Versuchen mit 
avrdude hab ich der Option -c zuerst alle Seriellen Möglichkeiten 
ausprobiert (DASA, DASA2, DASA3...) Es scheint das ich mit -c jtag2 am 
meisten hinbekomme, da er dort nicht abbricht sondern in ne 
endlos-Receive meldung läuft.

Muss der Atmel168 einen bestimmten Status haben um den Flash neu zu 
beschreiben?
Ich lese öfter was von FuseBits...?

von Jörg X. (Gast)


Lesenswert?

Hat der Atmega schon einen Bootloader drauf? Wenn nicht, brauchst du 
erst mal einen anderen Programmer, um einen auf zuspielen (siehe 
http://www.arduino.cc/en/Hacking/Bootloader?from=Main.Bootloader ).
Der USB-Wandler ist laut schaltplan ja nicht mit dem ISP verbunden..


hth. Jörg

von Torsten Günter (Gast)


Lesenswert?

ja, also der bootloader ist (müßte) schon drauf sein, da ich bereits 
über die Arduino-IDE Programmcode eingespielt habe.

Ich möchte eigentlich nur einen anderen Programmcode in den Flash laden.

Den Parameter -c fütter ich mit "jtagmkII". ???

von Jörg X. (Gast)


Lesenswert?

Na, dann finde raus, wie das Protokoll des Bootloaders aussieht und 
stelle das bei AVRDuDe ein, wenn das einstellen nicht klappt (am 
wahrscheinlichsten, weil der 'Dude das Protokoll nicht kennt), rtfm: 
http://www.arduino.cc/playground/Learning/Linux ;-)

hth. Jörg

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

All documentation files usually end up in .c...

Wenn ich mir deren Bootloader-Sourcecode ansehe, müsste das Teil
STK500(v1)-Protokoll sprechen, also
1
-c stk500v1
angeben.

von Oliver K. (ozel-)


Lesenswert?

Der Arduino Bootloader benutzt stk500v1. Im Arduino palyground und Forum 
gibts viele Beispiele wie man die Boards per Makefile programmiert und 
flasht. Man kann dabei auch die arduino core library bzw. API verwenden 
(Stichwörter: Arduino on command line) muss man aber nicht

von Torsten Günter (Gast)


Lesenswert?

hm, danke.

ich glaub ich hab ein ganz anderes Problem. Das laden des Flashs klappt 
nämlich, allerdings nur direkt nACH anschließen des arduino-boards.
laut hersteller soll es möglich sein, ohne hardwarereset einfach neuen 
programmcode upzuloaden.
Von windows aus über arduino-ide kein problem.

 unter linux mir avr-g++, libs, avrdude geht das bei mir aber nicht.

--> Verzweifel!!

von Oliver K. (ozel-)


Lesenswert?

Oh achso, das neue auto-reset feature geht erst bei den neuesten, 
"Diecimila", getauften Boards.
Dein NG Board kann aber leicht nachgerüstet werden. Dazu musst du nur 
einen 100nF Kondensator zwischen die DTR und /Reset Signale löten.
Ist ausführlich hier erklärt:
http://www.arduino.cc/blog/?p=13
Manche der älteren Boards haben Platz für diesen Kondensator schon auf 
der Platine vorgesehen und müssen nur noch entsprechend Nachbestückt 
werden.... Bei manchen Versionen der Arduino Boards ist es leider etwas 
unüberischtlich zu erkennen welches man selbst hat. Vergleich mal dein 
Board mit dem auf dem Bild im Link oben.
Manuell kannst du einen Reset natürlich nicht nur durch neu 
"anschließen" sondern auch über den Taster auf dem Board ausführen. 
Einfach kurz vor dem Upload drauf drücken (und wieder los lassen ;).

von Torsten Günter (Gast)


Lesenswert?

Hi Oliver,

ich bin mir sicher, ich habe das neue Diecimila-Board.
Das ich mit dem Taster das Board rücksetzen kann ist mir bekannt. Nur 
ist ein absolutes Wunschfeature das ich den Programm-Code ohne 
Hardwarereset (Taster/Neustart/...) auf den Flash schießen kann.

Und wie gesagt, mit hilfe der WIndows-Arduino-IDE kein Problem... Aber 
mit Linux!!! :-(

von Oliver K. (ozel-)


Lesenswert?

Ah, ok, dann liegts vermutlich daran, dass der linux serial port handler 
die RS-232 Pins beim Port  öffnen nicht automatisch toggelt (unter Mac 
OS X z.B. ist das automatisch so, ich benutze damit  erfolgreich 
makfiles und auto-reset).
D.h. du musst wie die Arduino IDE das DTR Signal deines RS-232 ports 
extra schalten um den Reset auszulösen. Das kannst du z.B. über ein 
kleines python script ganz leicht. Ich hab mir mal ein kleines zum 
testen von DTR/RTS geschrieben. Für auto-reset solltest Du die sleeps 
kürzer machen oder gleich weglassen, die while Schleife auch.. :)
Im makefile kannst Du versuchen das scirpt einfach direkt vor dem 
avrdude Kommando aufzurufen.
Ich kenn' die Arduino Doku für Linux nicht so gut aber mich würde es 
wundern, wenn auto-reset nirgendwo für linux erwähnt wird. Hast du mal 
im Arduino.cc Forum geschaut? Bist wahrscheinlich nicht der erste mit 
dem Wunsch...
1
#!/usr/bin/python
2
3
import commands
4
import serial,time
5
6
s = serial.Serial('/dev/tty.ARDUINOBT-BluetoothSeri-1')
7
8
9
while(True):
10
  s.setDTR(0)
11
#  s.setRTS(0)
12
  print("LOW")
13
  time.sleep(1)
14
  s.setDTR(1)
15
#  s.setRTS(1)
16
  print("HIGH")
17
  time.sleep(1)

von Torsten Günter (Gast)


Lesenswert?

Hi Oliver,

danke für deine Mühen!

Ich habe inzwischen sämtliche Foren im Internet gelesen, Telefonate 
geführt und emailverkehr gehabt die irgendwas mit AVR, AVRDUDE, ARDUINO 
zu tun haben (ausgenommen taiwanesische Seiten ;-)

Allerdings bin ich nicht weitergekommen!! Vielleicht liegt es auch an 
mir... ! Noch immer kann ich nicht über ein Makefile/bzw. die Konsole 
den Flash neu beschreiben!! --->> AARGGGHH!
Es scheint, als ob alle anderen mit der IDE arbeiten... :-(

Werde es aber mit deinem Vorschlag nochmal probieren!! VIELEN DANK

von Andreas L. (franklyn)


Lesenswert?

Hi

also mich würde das ja auch brennend interessieren, wie ich den arduino 
von der command line aus programmieren kann, denn diese ide is wirklich 
nicht der hammer.
ich hab mir mal den quellcode dieser ide angeschaut, irgendwie schauts 
so aus, als ob die uisp und avrdude verwenden, aber ich bin mir nicht 
sicher, denn ich kann leider kein java.
vielleicht kann sich irgendwer der java beherscht, die arduino ide 
sourcen mal anschauen und herausfinden wie die den dort programmieren.

lg Andreas

von Torsten Günter (Gast)


Lesenswert?

Hallo,

Willst du den Programmcode über die Commandline schreiben oder nur ein 
Programm in den Speicher laden für das Arduino ?

Falls du aber in dieser Richtung eine Lösung hast wäre ich für jeden Tip 
dankbar.

Mit der IDE hast du recht... Mein Problem ist nämlich, dass ich eben 
über die commandline programmupdates machen will! Und da hilft mir eine 
IDE ziemlich wenig... :-(

von Bernhard (Gast)


Lesenswert?

und ?
wie sieht denn nun die lösung aus ?

von Oliver (Gast)


Lesenswert?

Nun, der Thread ist ja schon recht alt, aber falls mal wieder jemand 
über dieses Thema stolpert, hier ist mein generisches Arduino Makefile:

http://code.google.com/p/dogm128/source/browse/libraries/Dogm/examples/Breakorino/Makefile

Beste Grüße,
Oliver

von Reiner (Gast)


Lesenswert?

Nun, der Thread ist noch älter geworden.
Meine "zu Fuß" Losung:
: avr-gcc -c -x assembler-with-cpp -mmcu=atmega328p sender.s -o 
sender.o
; avr-ld  sender.o -o  sender.elf
; avr-objcopy -O ihex  sender.elf  sender.hex
; avrdude -p m328p -c arduino -b 57600 -P /dev/ttyUSB0 -U 
flash:w:sender.hex:i
hilft vielleicht weiter

Grüße Reiner

von funkeld (Gast)


Lesenswert?

Sagt mal leute, was ist das für eine Board?
Was ist da besonderes dran?

Ich sehe Videos, teileise wo auch eine VGA-karte damit angesprochen 
wird.

Hmmm..., ich verstehe dieses kleine Ding nicht.

Gruss

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

funkeld schrieb:
> Sagt mal leute, was ist das für eine Board?

"Microcontroller für Günstler" oder sowas. ;-)

von Michael S. (kraeml)


Lesenswert?

Hatte das gleiche Problem. Mit folgender Zeile läuft bei mir alles 
korrekt:
avrdude -pm168 -carduino -P/dev/ttyUSB0 -b19200 
Uflash:w:ArduinoFirstStep.hex:a

Wichtig ist es den avrdude mit -c arduino NICHT mit -c stk500v1 laufen 
zu lassen. Die Baudrate konnte ich max 19200 einstellen. Ansonsten ließ 
sich mein Arduinoboard nicht programmieren.

Die Geschwindigkeit hängt vom Arduinoboard ab.

Siehe auch unter /{ARDUINIAPP}/hardware/arduino/boards.txt

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.