Hallo,
zunächst einmal vielen Dank an alle, die mir bisher unbewusst geholfen
haben - denn ich bin schon eine Weile "passiver Nutzer" dieses Forums
und des Wikis. ;-)
Meine aktive Teilnahme beginnt leider gleich mit einer Frage statt mit
einer Antwort:
Mein Attiny13A muckst sich nicht mehr. Warum?
Das Problem in Kurzform:
Programmer: USB AVR Lab mit AVRISPMkII Firmware
Fuses:
CKDIV8 geändert von 0 auf 1
SUT[1:0] geändert von 01 auf 10
CKSEL[] geändert von 10 auf 01
Code (Ausschnitt): 1 | ISR(PCINT0_vect)
| 2 | {
| 3 | return; // nur benutzt, um sleep-mode zu beenden
| 4 | }
| 5 | .....
| 6 | int main()
| 7 | {
| 8 | io_init();
| 9 | while(1)
| 10 | {
| 11 | switch(modus)
| 12 | {
| 13 | case POWER_OFF:
| 14 | set_sleep_mode(SLEEP_MODE_PWR_DOWN);
| 15 | sleep_enable();
| 16 | PCMSK |= (1<<TASTER_IN); /*Taster für PCINT0 freischalten*/
| 17 | sei();
| 18 | sleep_cpu();
| 19 | cli();
| 20 | PCMSK |= (1<<TASTER_IN); /*Taster für PCINT0 freischalten*/
| 21 | sleep_disable();
| 22 | start_countdown();
| 23 | break;
| 24 | .....
|
Beim erneuten Programmier-Versuch meldet AVRdude: 1 | /usr/bin/avrdude -C /etc/avrdude.conf -p t13 -P usb -c avrispmkII -F -U hfuse:r:/tmp/hfuse7308438643436458320.hex:r -U lfuse:r:/tmp/lfuse8891256296707036853.hex:r
| 2 |
| 3 | avrdude: stk500v2_command(): command failed
| 4 | avrdude: stk500v2_command(): command failed
| 5 | avrdude: stk500v2_program_enable(): cannot get connection status
| 6 | avrdude: initialization failed, rc=-1
| 7 | avrdude: AVR device initialized and ready to accept instructions
| 8 | avrdude: Device signature = 0x000000
| 9 | avrdude: Yikes! Invalid device signature.
| 10 | avrdude: Expected signature for ATtiny13 is 1E 90 07
|
Wie man sieht, fehlt dem Programm oben das 1 | GIMSK |= (1<<PCIE); /* PCINT0 Interrupt aktivieren*/
|
d.h. er geht in PWR_DOWN und das war's.
Aber eigentlich müsste er doch vom Programmer wieder geweckt werden?
Auch bei den Fuses bin ich mir keiner Schuld bewusst. Deshalb habe ich
es auch noch nicht mit einem externen Takt an CLKI versucht (naja,
deshalb, und weil ich keinen habe ;-) )
Gestern hatte ich das Problem schon einmal und habe ihn dann wie hier
beschrieben [AVR_Fuses] mit einem 100k Widerstand zwischen Reset und GND
wiederbeleben können. Das war auf meinem Exp-Board, über das neben 5V
auch noch 13,6V Versorgungsspannung läuft, etwas fummelig, mit dem
Widerstand in der Hand am IC-Sockel... aber es funktionierte!
Neu programmiert - dabei vor lauter Euphorie das GIMSK Register
vergessen. Und heute geht nix mehr.
Ich hab's mit dem Widerstand probiert, mit 100k, 27k. Auf dem
Breadboard, damit's nicht so fummelig ist und weg von den 13V.
Mit AVRdude -B 10.
-B 20, -B 50. -B 0.1, - was weiß ich.
Was nun? Habe ich ihn geschrottet? OK, dann kann ich die 1,10 (oder
0,60) abschreiben. Tough luck.
Oder habe ich einen systematischen Denkfehler gemacht und der nächste
und übernächste geht genauso ins Nirwana?
Viele Grüße und vielen Dank für Eure Tipps
Samweis
Ich kann dich insofern beruhigen, als das das Programm während des
Programmierens keine Rolle spielt, der Tiny wird die ganze Zeit im Reset
gehalten, kann also gar nicht losrennen. Allerdings kenne ich deinen
Programmierer nicht, ich benutze den AVR ISPMkII aus AS4 heraus. Dein
Fuses File im Avrdude Kommando sieht m.E. ein bisschen merkwürdig aus,
aber das kann normal sein(?). Was steht in hfuseXXXX.hex und
lfuseXXXX.hex drin?
Hallo Matthias,
danke für die schnelle Reaktion.
Ich benutze AVR-burn-o-mat.
Die Ziel-Dateien für die Fuse-Daten sind temporäre Dateien, die mit
zufälligen Namen in /tmp erzeugt werden. Deshalb sehen die so merkwürdig
aus.
Die Dateien sind leer (0 byte).
Offenbar findet gar keine Kommunikation statt.
"cannot get connection status
avrdude: initialization failed, rc=-1"
Dass er danach trotzdem "avrdude: AVR device initialized and ready to
accept instructions" meldet, liegt an dem -F Schalter.
Ich hatte das hier im Wiki AVR Fuses, Abschnitt 4.2 zum Tiny13, so
verstanden, dass das Programm einen Einfluss haben kann.
Ansonsten bin ich ratlos. An den anderen Fuses war ich nicht. Am
Register CLKPR auch nicht. Lediglich im TCCR0B habe ich den Prescaler
eingestellt.
Kann man durch Spannungs-Spikes am Reset Register überschreiben?
Viele Grüße
Samweis
Schau doch erstmal, ob der Programmierer selbst als USB Device auftaucht
und die Treiber geladen sind.
Unter Linux : lsusb -a
Unter Windows : Gerätemanager und nach Jungo suchen.
Der -Force Schalter sollte ja eigentlich nicht nötig sein. Für mich
siehts so aus, als findet avrdude gar nicht erst den Programmer.
no public real name schrieb:
> Kann man durch Spannungs-Spikes am Reset Register überschreiben?
Man kann ihn mit den o.a. 12-13 Volt zu den lieben Engelein schicken,
jo. Aber das Reset Register? Wie jetzt? Eigentlich nicht, wenn du die 12
Volt vom MC ferngehalten hast. Wie gesagt, während des
Programmiervorganges ist der MC im Reset und alle Register sind wurscht.
Nur die Fuses sind aktiv.
Der Programmer wird gefunden. (Sonst quietscht AVRdude auch gleich
"avrdude: usbdev_open(): did not find any USB device "usb")
Ich habe auch zwei unterschiedliche Kabel versucht.
Inzwischen ist mir eingefallen, dass ich noch einen Attiny24A habe - den
hat AVRdude sofort problemlos ausgelesen. Mit demselben Programmer und
demselben Kabel.
np rn schrieb:
> den
> hat AVRdude sofort problemlos ausgelesen. Mit demselben Programmer und
> demselben Kabel.
Tja, dann wirds wohl doch eine CLK Option sein. Falls du aus Versehen
auf 128kHz Takt gestellt hast und dann noch CLKDIV8 gesetzt hast, kann
es sein, das du -b auf Schnarchnasen Tempo setzen musst. Allerdings hast
du damit schon rumprobiert? Dann ist der Tiny wohl doch in den ewigen
Jagdgründen, oder du musst dir mal einen TTL-Oszillator (1-8Mhz)
beschaffen und an CLKi anschliessen.
CLKDIV8 war ab Werk gesetzt. Ich habe sie in "1" geändert, damit er
etwas schneller läuft.
M.E. müsste er jetzt mit 4,8MHz laufen. Fuses siehe oben.
Ich habe ihn gerade einmal durchgemessen:
PB5 (Reset, interner Pull-up): 4,33V
PB3 (programmiert als Ausgang, high): 4,7V
PB2 (programmiert als Eingang mit internem Pull-up): 4,0V
alle anderen programmiert als Ausgang, low: 0V
Stromverbrauch: niente. Irgendwo <50µA
Es sieht also so aus, als ob er doch noch etwas macht, oder?.
Initialisierung und dann PWR_DOWN...
Matthias Sch. schrieb:
> auf 128kHz Takt gestellt hast und dann noch CLKDIV8 gesetzt hast, kann
> es sein, das du -b auf Schnarchnasen Tempo setzen musst.
-b pder -B?
Welche Werte schlägst Du vor?
np rn schrieb:
> -b pder -B?
> Welche Werte schlägst Du vor?
Wie oben schon erwähnt, kann ich dir zu avrdude nicht helfen, eines
dieser Kommandos ändert die Bitrate des SPI. Sag mal, kann es evtl.
sein, das du aus Versehen RSTDISBL gesetzt hast und PB5 damit zum I/O
gemacht hast? RSTDISBL kannst du nur per HV Programmierer rückgängig
machen.
np rn schrieb:
> CLKDIV8 war ab Werk gesetzt.
Jups, das ist immer so.
np rn schrieb:
> Es sieht also so aus, als ob er doch noch etwas macht, oder?.
Naja, er ist in einem Sleep Modus ;-)
Matthias Sch. schrieb:
> eines dieser Kommandos ändert die Bitrate des SPI.
Ich habe gerade mal mit 1 | avrdude -c avrispmkii -p t13 -P usb -t -F
|
den Terminal-Modus von AVRDude aufgerufen. Dort knn man per "SCK" die
SCK periode, also 1/f in Stufen von 0.25, 0,5, 1, 2, 4 bis 8 ändern,
also 125kHz bis 4MHz.
Hat alles nichts gebracht.
> Sag mal, kann es evtl.
> sein, das du aus Versehen RSTDISBL gesetzt hast und PB5 damit zum I/O
> gemacht hast? RSTDISBL kannst du nur per HV Programmierer rückgängig
> machen.
Eigentlich nicht. Die RSTDISBL ist bei AVR8-burn-o-mat rot unterlegt.
Außerdem so weit weg von allem anderen, was ich an den Fuses gemacht
habe, dass man auch nicht "aus Versehen daneben klicken" kann.
Also - eigentlich nicht.
Es sei denn, mann kann durch Spannungs-Spikes das Ding umprogrammieren.
Irgendwo hatte ich mal so etwas gelesen....
Und wenn man mit 'nem Widerstand in der Hand zwischen Reset und GND
herumfuchtelt, dann könnte es wohl mal Spikes geben. Einen, oder zwei
;-)
Ich habe gerade im ATtiny24A Datenblatt gefunden, dass der einen
CKOUT-Ausgang hat. Morgen werde ich den mal am CLKI des ATtiny13A
probieren.
Sonst werde ich ihn wohl an die Seite legen, bis ich mir mal einen
HV-Programmer gebaut habe.
Der Kleine ärgert mich - ich krieg das noch raus, was er hat... ;-)
Update:
Auch das CKOUT-Signal vom ATtiny 24A hat nichts gebracht.
Irgendwann werde ich mir wohl mal so etwas hier
http://www.simpleavr.com/avr/hvsp-fuse-resetter zusammenstecken.
Rein schon aus Neugierde...
Aber Danke für Deine Tipps!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|