Hallo allerseits,
ich steh gerade ganz am Anfang und probiere, avrdude über den DIAMEX
USB-ISP (avr-programmer.com/usb-isp) mit dem ATmega88PA sprechen zu
lassen.
Aufbau ist wie im AVR-Tutorial inklusive 4-MHz-Quarzoszillator, dabei
habe ich auch auf die Pin-Belegung geachtet und dafür im Datenblatt
nachgeschaut (da das Tutorial ja mit nem ATmega8 arbeitet).
Ich arbeite mit Linux Mint 17. Das erste Problem war, dass avrdude den
ATmega88PA nicht kannte. Nach einer Suche im Forum hab ich aber
herausgefunden, dass ich anscheinend einfach die Datei /etc/avrdude.conf
erweitern muss:
1
part parent "m88"
2
id = "m88pa";
3
desc = "ATmega88PA";
4
signature = 0x1e 0x93 0x0f;
5
6
ocdrev = 1;
7
;
Danach habe ich avrdude wie folgt aufgerufen (der ISP hängt tatsächlich
an /dev/ttyACM0 und spricht das Protokoll stk500v2, daran kanns also
nicht liegen).
1
$ avrdude -P /dev/ttyACM0 -c stk500v2 -p m88pa -n
2
3
avrdude: stk500v2_command(): command failed
4
avrdude: initialization failed, rc=-1
5
Double check connections and try again, or use -F to override
avrdude: AVR device initialized and ready to accept instructions
16
avrdude: Device signature = 0xc857c2
17
avrdude: Expected signature for ATmega88PA is 1E 93 0F
18
19
avrdude done. Thank you.
Das sieht schon merkwürdig aus: jedes Mal kommt eine andere Signatur
zurück (die fängt immer mit c8 an, ist aber sonst anders).
Nach einiger Recherche habe ich zwei Vermutungen, was sein könnte:
1. Ich hab die Pin-Belegung vom ISP trotz mehrfachem Lesen falsch
verstanden
(http://avr-programmer.com/downloads/usb-isp/usb-isp_installation_de.pdf).
Pin 1 ist da, wo ein kleiner Pfeil auf dem Stecker ist, oder? Und ich
muss das ganze spiegelverkehrt nehmen, wenn ich auf den Stecker
draufschaue?
2. Der ISP spricht zu schnell für den μC. Ich hab jetzt einiges über
Fuses etc. gelesen, bin daraus aber nicht so recht schlau geworden.
Außer, dass der Quarzoszillator vermutlich noch nicht verwendet wird.
Jedenfalls hilft auch die avrdude-Option -B mit verschiedenen Werten (4,
10, 16, …) nicht weiter.
Kann mir jemand helfen und sagen, ob an meinen Vermutungen was dran ist?
Und ob das Problem vielleicht wo ganz anders liegt und was ich jetzt tun
kann?
Viele Grüße,
Malte
Malte M. schrieb:> Pin 1 ist da, wo ein kleiner Pfeil auf dem Stecker ist, oder?
Korrekt.
> Und ich muss das ganze spiegelverkehrt nehmen, wenn ich auf> den Stecker draufschaue?
???
Wenn Du den Stecker umdrehst, ist es immernoch so:
> Pin 1 ist da, wo ein kleiner Pfeil auf dem Stecker ist
Im Tutorial ist der Stecker falsch belegt ... (steht dort aber auch)
In dem von Dir verlinkten pdf jedoch korrekt und auch so, wie in dem im
Tutorial verlinkten AVR042 - welches ich als bindend ansehe.
Der Anschluss ist von oben auf den Verbinder auf dem Board gesehen. Auf
den Stecker geschaut natürlich entsprechend gespiegelt.
Gruß
Jobst
bump (von Seite 4 der Übersicht)
Jobst hat mir ja schon bestätigt, dass meine erste Vermutung, was ich
falsch gemacht haben könnte, nicht stimmt. Wie siehts mit der zweiten
aus?
man avrdude und das bisschen Dokumentation, was auf avr-programmer.com
so rumliegt, haben mir leider beim Verständnis nicht weiter geholfen.
Hat jemand eine Idee und kann mir weiterhelfen?
Ich habe am Anfang am liebsten einfach das Pollin-Board mit Atmega8,
Lunaavr und ein usbasp-Programmer für 2 EUR verwendet.
Daneben habe ich auch die den Ansatz mit Assembler, C, Bascom und Ada
getestet. War aber (zumindest damals) deutlich schwieriger das ganze
erstmal zum Laufen zu bekommen.
Danke für deine Antwort. Sie hilft mir leider bei meinem konkreten
Problem nicht weiter. Auch ich habe ja hier eine Situation, die
schwierig zum Laufen zu bekommen ist, allerdings eine andere …
Malte M. schrieb:> Danach habe ich avrdude wie folgt aufgerufen (der ISP hängt tatsächlich> an /dev/ttyACM0 und spricht das Protokoll stk500v2, daran kanns also> nicht liegen).
Wo das Problem liegt kann ich auch nicht sagen, aber warum kommt bei
Dir erst:
$ avrdude -P /dev/ttyACM0 -c stk500v2 -p m88pa -n -F
avrdude: stk500v2_command(): command failed
avrdude: initialization failed, rc=-1
und dann:
$ avrdude -P /dev/ttyACM0 -c stk500v2 -p m88pa -n -F -vvvv
...
Using Port : /dev/ttyACM0
Using Programmer : stk500v2
...
avrdude: stk500v2_getsync(): found STK500 programmer
AVR Part : ATmega88PA
D.h. warum wird der stk500v2 programmer beim ersten Aufruf nicht
erkannt, aber dann beim zweiten? Die Option -vvvv sollte da keinen
Unterschied machen?
Ich verwende den gleichen Programmer. Allerdings mit Atmel Studio. Dabei
ist mir aufgefallen dass ich manchmal die ISP Frequenz verringern muss.
Dabei scheint das vom verwendeten Controller (vlt auch der Schaltung)
abzuhängen. Vielleicht hilft dir das weiter.
Doch, anscheinend macht das einen Unterschied, mit -v, -vv, -vvv, -vvvv
werden Port und Programmer ausgegeben, ganz ohne -v reproduzierbar nicht
(avrdude-Version 6.0.1).
Harald Nagy schrieb:> Ich verwende den gleichen Programmer. Allerdings mit Atmel Studio. Dabei> ist mir aufgefallen dass ich manchmal die ISP Frequenz verringern muss.
Hmja, sowas hab ich vermutet. Allerdings scheinen die entsprechenden
avrdude-Optionen nicht das zu tun, was sie sollen (bzw.
wahrscheinlicher: was ich denke, was sie sollen).
Vielleicht sollte ich mal probieren, ob Atmel Studio unter wine läuft …
Malte M. schrieb:> Vielleicht sollte ich mal probieren, ob Atmel Studio unter wine läuft …
Ist vielleicht ein Versuch wert. Aber ehrlich gesagt geht mein Gedanke
eher in die Richtung, dass Du Deinen Aufbau mal vereinfachen solltest.
Ansonsten sollte man sich alles was Du imersten Post ausgeschlossen hast
mal unbefangen ansehen. Vielleicht kannst Du ja mal Fotos von Deinem
Aufbau machen.
Dumme Frage: Schonmal als root probiert?
Vielen Dank für deine Antwort.
Klaus I. schrieb:> Ist vielleicht ein Versuch wert. Aber ehrlich gesagt geht mein Gedanke> eher in die Richtung, dass Du Deinen Aufbau mal vereinfachen solltest.
Ich kann den Quarzoszillator mal rausnehmen, ja. Aber sonst gibts glaub
ich nichts zu vereinfachen. Ich hab jedenfalls noch nichts an den
IO-Pins hängen, keine Spannungsversorgung außer dem USB-ISP, der ja
wahlweise 3,3 oder 5 V mitbringt (direkt an den (A)VCC- und GND-Pins
5,11 V gemessen) und die drei Kondensatoren und der Widerstand im
Tutorial sind ja notwendig (ich konnte auch halbwegs nachvollziehen,
warum und warum sie möglichst nah am μC sitzen sollen).
> Ansonsten sollte man sich alles was Du imersten Post ausgeschlossen hast> mal unbefangen ansehen. Vielleicht kannst Du ja mal Fotos von Deinem> Aufbau machen.
Hab leider keine Kamera und kein Smartphone.
> Dumme Frage: Schonmal als root probiert?
Vermutlich nicht ganz dumme Frage, aber das hab ich schon gemacht. Ohne
kann ich nämlich auf /dev/ttyACM0 gar nicht zugreifen.
Bin jetzt erstmal weg, aber morgen abend bau ich vielleicht einfach
nochmal frei nach dem Motto „have you tried turning it off and on
again?“ alles ganz ab und wieder neu auf.
So, ich bin wieder da und habs nochmal ganz ab- und wieder neu
aufgebaut, diesmal ohne Quarzoszillator. Ich kam noch auf die Idee,
meine (leider nicht so tolle) Webcam zu verwenden; das Foto sagt glaub
ich nicht viel aus, außer dass es meine folgende Vermutung verdeutlicht:
Kann es sein, dass der Weg vom USB-ISP bis zum μC zu lang ist?
Zusätzlich zum Flachbandkabel kommen nämlich noch 15cm Kabel bis zu den
MISO/MOSI/SCK/RESET-Pins des μC (zu VCC und GND sogar eher 30cm, aber
das dürfte ja kein Problem sein, 5,1V schaffen es bis zu den Pins ;)).
Wie ich darauf komme: Es macht für die Ausgabe von avrdude (auch im
„terminal mode“ mit der Option -t) keinen Unterschied, ob ich den μC
angeschlossen hab oder der Stecker des USB-ISP einfach „in der Luft
hängt“ und irgendwo habe ich mal was von zu langen Programmer-Kabeln
gelesen.
Oder fällt jemandem noch was anderes auf?
Edit: gerade gesehen: Die Kabel reichen rechts aus dem Bild raus. Die
verbinden einfach nur VCC bzw. GND am oberen und unteren Rand des
Steckbretts.
Wenn du dir sicher bist dass die Verbindungen passen (auch bitte nochmal
Prüfen ob der Atmega auch die Verbindung zum Steckbrett selbst hat, die
kann manchmal echt wackelig ausfallen) dann versuch mal mit -B22 die
ISP-Frequenz herunter zu setzen.
Ich benutze den gleichen Programmer und habe ab und an das gleiche
Problem.
Das herabsetzen der ISP-Frequenz + einen einfachen Chip Erase bringt in
den meisten Fällen die Lösung.
Gruß
Christian
Ist der eine Abblockkondensator wirklich zwischen AVCC (Pin 20) und GND
(Pin 22)?
Das an Reset (Pin 1) ist aber KEIN Kondensator, oder?
Steckerbelegung zu uC ist richtig schwierig zu erkennen. Hast Du keine
von den billigen flexiblen Jumper-Wires vom Chinesen Deines Vertrauens?
Die halten ganz gut in Buchse und im Steckbrett. Dann könntest Du mit
unerschiedlichen Farben arbeiten.
Klaus I. schrieb:> Ist der eine Abblockkondensator wirklich zwischen AVCC (Pin 20) und GND> (Pin 22)?>
Ja, ist er, hab die Beine vorsichtig ein bisschen auseinandergebogen.
> Das an Reset (Pin 1) ist aber KEIN Kondensator, oder?>
Zwischen Reset und GND ist ein 47nF-Kondensator, doch. Zwischen Reset
und VCC ein 100kΩ-Widerstand, beides hab ich so aus dem AVR-Tutorial.
> Steckerbelegung zu uC ist richtig schwierig zu erkennen.
Alles dreimal nachgezählt und im Datenblatt überprüft.
> Hast Du keine> von den billigen flexiblen Jumper-Wires vom Chinesen Deines Vertrauens?> Die halten ganz gut in Buchse und im Steckbrett. Dann könntest Du mit> unerschiedlichen Farben arbeiten.
Nein, beim Reichelt gabs die nur in 15cm lang und je 10 in einer Farbe,
hab deshalb erstmal ein Paket bestellt und die mit Zetteln markiert
(auch da die Reihenfolge im ISP-Stecker dreimal überprüft). Ich schau
aber heute oder morgen mal, ob ich im hiesigen Elektronikladen welche
kriege (die hatten allerdings auch schon kein Multimeter, als ich eins
brauchte, weil ich das bei der Bestellung vergessen hatte …)
Christian O. schrieb:> Wenn du dir sicher bist dass die Verbindungen passen (auch bitte nochmal> Prüfen ob der Atmega auch die Verbindung zum Steckbrett selbst hat, die> kann manchmal echt wackelig ausfallen)
Wie überprüfe denn die Verbindung zum Steckbrett? Kann da ja nicht
reinschauen. Außer … ah, ja, hab ne Idee … Durchgangsprüfung …
Vielen, vielen Dank an Christian! Da wär ich nie drauf gekommen. Pin 17
(MOSI) war anscheinend nicht ganz drin. Danke auch an alle anderen, die
sich so viel Mühe gegeben haben, mir zu helfen.
> dann versuch mal mit -B22 die> ISP-Frequenz herunter zu setzen.
Das ist jetzt sogar nicht mehr nötig.
Christian O. schrieb:> Malte M. schrieb:> Außer … ah, ja, hab ne Idee … Durchgangsprüfung …>>> Badum Tsss .. ;-) genau
Ja, ich weiß, dass das jetzt eigentlich nicht so schwer war, darauf zu
kommen … aber ich hab am Donnerstag oder Freitag das erste Mal im Leben
so ein Multimeter bedient und mich nur schwach aus der
Bedienungsanleitung erinnert, dass das ja sowas kann ;)
Malte M. schrieb:> Ja, ich weiß, dass das jetzt eigentlich nicht so schwer war, darauf zu> kommen … aber ich hab am Donnerstag oder Freitag das erste Mal im Leben> so ein Multimeter bedient und mich nur schwach aus der> Bedienungsanleitung erinnert, dass das ja sowas kann ;)
In dem Fall sei noch dazu gesagt, dass du mit so einem Multimeter bei
der Durchgangsprüfung vorsichtig sein musst.
Das Multimeter gibt zur Durchgangsprüfung eine Spannung auf den Weg
welcher unter Umständen deinen uC schrotten kann.
D.h. Prüfe nur Wege damit wo der Weg der Prüfung NICHT durch den uC
führt. Hab damit auch schon den ein oder anderen uC ins jenseits
beförfert.