mikrocontroller.net

Forum: Compiler & IDEs Arduino + avrdude + USB


Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=M... ).
Der USB-Wandler ist laut schaltplan ja nicht mit dem ISP verbunden..


hth. Jörg

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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". ???

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
-c stk500v1
angeben.

Autor: Oliver Keller (ozel-)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Oliver Keller (ozel-)
Datum:

Bewertung
0 lesenswert
nicht 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 ;).

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!! :-(

Autor: Oliver Keller (ozel-)
Datum:

Bewertung
0 lesenswert
nicht 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...
#!/usr/bin/python

import commands
import serial,time

s = serial.Serial('/dev/tty.ARDUINOBT-BluetoothSeri-1')


while(True):
  s.setDTR(0)
#  s.setRTS(0)
  print("LOW")
  time.sleep(1)
  s.setDTR(1)
#  s.setRTS(1)
  print("HIGH")
  time.sleep(1)  

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Läßer (franklyn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Torsten Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :-(

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und ?
wie sieht denn nun die lösung aus ?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/lib...

Beste Grüße,
Oliver

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: funkeld (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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

Autor: Michael Schaar (kraeml)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.