Forum: Mikrocontroller und Digitale Elektronik avrdude und Digitus USB-RS232-Wandler unter ubuntu


von nik j. (mirkovolt)


Lesenswert?

Hi,

ich habe einen selbstgebastelten Serial-Programmer für AVR-Controller , 
der zusammen mit einem USB-Seriell-Konverter von Digitus problemlos 
(wenn auch erwartungsgemäß langsam) unter Windows läuft (ponyprog und 
eclipse/avrdude).

Unter Ubuntu-Linux versagt das Teil allerdings mit der Fehlermeldung
1
~$ avrdude -c ponyser -p m168 -P /dev/ttyUSB0
2
-> avrdude: AVR device not responding
3
avrdude: initialization failed, rc=-1
4
         Double check connections and try again, or use -F to override
5
         this check.

ich habe mit verschiedenen Baudraten experimentiert, avrdude mit und 
ohne root-Rechte bzw. geänderten udev-Regeln für das usb device 
ausgeführt: immer die selbe Fehlermeldung. Auch das -D Flag und der -i 
Parameter mit verschiedenen Werten haben nichts gebracht. Allerdings 
verstehe ich auch nicht ganz, wie man diese Parameter sinnvoll 
einstellt. Muss man delay und Baudrate irgendwie gegeneinander abwägen? 
Kann man das berechnen?

Hier und in anderen Foren liest man, dass bitbanging mit 
usb-rs232-Wandlern prinzipiell nicht geht oder es zumindest ein 
Glücksspiel ist. Aber warum lief das ganze dann ohne Schmerzen unter 
Windows?

Ich würde mir auch einen USBTiny zurechtlöten, von dem ich weiß, dass er 
auf meinem System läuft. Aber da steh ich vor dem Henne-Ei-Problem, da 
ich diesen erstmal selbst programmieren muss.

Es wäre super, wenn mir hier jemand auf die Sprünge helfen könnte oder 
mir klar erklären, warum es nicht funktionieren kann und niemals wird. 
Dann spar ich mir das Palaver und geh stattdessen einkaufen.

von Hans Peter B. (Gast)


Lesenswert?

Bei Schwierigkeiten, wie in deinem Fall, hat avrdude eine 
"Zauber"-Option:
"-vvvv" an die Befehlszeile anhängen und die Ausgabe analisieren oder 
gegebenenfalls posten.
Hans Peter

von ./. (Gast)


Lesenswert?

Also erstmal muss ich meinem Vorredner recht geben: -vvvvv gibt genauer 
Auskunft über das Problem. (Das Maximum was von avrdude genutzt wird 
sind, glaube ich, 5 'v', aber das kann sich von Programmer zu Programmer 
unterscheiden.)
Das Änderung von Root-Rechten und udev-Regeln wird hier nichts nützen, 
da die Kommunikation vom PC mit dem Programmer klappt, aber nicht die 
Kommunikation vom Programmer zum Chip. Von daher ist der Ansatz mit den 
Baudraten schon mal der Richtige. Welche hast du denn ausprobiert? Ich 
würde mal 10kBd probieren - als Start.
Berechnen kann man das in Grenzen:
- die Kommunikation darf nicht schneller sein, als der AVR (CPU-Takt / 
4, wenn ich mich Recht entsinne) - Das sollte leicht eingehalten werden.
- das größere Problem sollten Setup-/Hold- und Delay-Zeiten sein - die 
kann man über Bitbanging schwer kontrollieren.
Allerdings kenne ich den genannten USB-Seriell-Wandler nicht und kann 
nicht sagen, ob er überhaupt funktionieren wird.

nik janusch schrieb:
> Hier und in anderen Foren liest man, dass bitbanging mit
> usb-rs232-Wandlern prinzipiell nicht geht oder es zumindest ein
> Glücksspiel ist.
Siehe Punkt 2 oben. Wenn du einen verlässlichen Programmer haben willst, 
dann bastel dir Einen bzw. kaufe Einen. Du hast einen 
USB-Seriell-Wandler - keinen Programmer! Überlege dir, was du machen 
willst, und kaufe danach den Programmer - es gibt eine große Auswahl für 
verschiedene Budgets und mit verschiedenen Fähigkeiten. Zu verschiedenen 
Programmern gibt es sicherlich viele Threads hier im Forum und viele 
Infos generell im Internet die deren Vor- und Nachteile aufzeigen - wenn 
du unsicher bist kannst du auch nachfragen.

nik janusch schrieb:
> Aber da steh ich vor dem Henne-Ei-Problem, da
> ich diesen erstmal selbst programmieren muss.
Vielleicht findet sich jemand in deiner Nähe, der dir einen Chip 
programmiert? Hackerspace? Afu Ortsverband? ...?

nik janusch schrieb:
> Es wäre super, wenn mir hier jemand auf die Sprünge helfen könnte oder
> mir klar erklären, warum es nicht funktionieren kann und niemals wird.
Ich würde vermuten dass Linux die serielle Kommunikation stärker als 
Windows bzw überhaupt puffert und daher o.g. Timings kaputt macht. Ein 
Oszi würde hier weiter helfen.

Viel Erfolg.

von nik j. (mirkovolt)


Lesenswert?

Vielen Dank für eure Antworten.

vvvv bzw vvvvv gibt mir eine Menge output, mit dem ich leider nicht so 
viel anzufangen weiß. Am Ende spuckt er ungefähr 100 mal die Zeile
1
bitbang_cmd(): [ AC 53 00 00 ] [ 00 00 00 00 ]

aus, bevor er sich dann mit der o.g. Fehlermeldung verabschiedet.

Ein Freund gab mir den Hinweis, dass man Linux wohl beibringen kann auf 
den tty-Ports überhaupt nicht zu puffern (legacy-mode sozusagen). Dem 
werde ich nochmal nachgehen.

Aber ich habe jetzt hoffentlich die vernünftige Entscheidung getroffen 
und mir einen Programmer bestellt, der auf meinem System wohl gut 
unterstützt wird. Die Langsamkeit der o.g. Methode ist ja auch ziemlich 
grenzwertig.

Gruß

Nik

von ./. (Gast)


Lesenswert?

nik janusch schrieb:
> vvvv bzw vvvvv gibt mir eine Menge output, mit dem ich leider nicht so
> viel anzufangen weiß.

Hier kann vielleicht einer etwas damit anfangen.

nik janusch schrieb:
1
bitbang_cmd(): [ AC 53 00 00 ] [ 00 00 00 00 ]

Das ist die "Programming enable instruction". Die erwartete Antwort 
darauf wäre 0xXX 0xXX 0x53 0xXX - die kommt aber nicht, weshalb die 
Instruktion wiederholt wird, bis schlussendlich abgebrochen wird.

von nik j. (mirkovolt)


Lesenswert?

Wen es interessiert: habe mir jetzt das 'mySMARTUSB light' für 16,95 bei 
csd-electronics besorgt. Funktioniert ohne irgendwelche Probleme auf 
ubuntu 11.04. Und um Größenordnungen schneller als die 
Bitbanging-Variante.

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.