Forum: Mikrocontroller und Digitale Elektronik Hintergrundwissen gefragt - Verfuste ATmega328


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Robert H. (softtroniker)


Lesenswert?

Hallo zusammen,
ich habe ein kleines Problem bei dem euer Expertenwissen gefragt ist:
Durch einen Fehler in einem Batchscript habe ich ein paar ATMega 328 
"verfused".

Im Batchscript setzte ich zuerst die Fuses mit einer niedrigeren 
Geschwindigkeit (125kHz)
Dann verlasse ich STK500.exe und schreibe das Flash mit 500kHz. Das 
klappt bei allen Projekten ohne Probleme.
In einer Batchdatei hatte ich einen Fehler und habe die Fuses mit 250kHz 
geschrieben. Bei 35 von 50 Controllern ging das gut. Bei den anderen 
wurde der Schritt mit einem Fehler beim Verify der Fuses beendet.
Was passiert ist, ist das die Fuses auf externen Click gesetzt wurden! 
Ein Großteil der Controller könnte ich mit externen Takt 
(Frequenzgenerator 125kHz Sqrt 5Vpp 2.5V DC Offset) wieder ansprechen 
und die Fuses zurücksetzen auf "intern RC".
Bei ein paar ging das nicht: Diese habe ich ausgelötet und auf eine 
Adapterplatine gelötet
Dann habe ich diese in meinem Fusedoctor im Parallel-HV Mode ausgelesen. 
Und was mich hier dann gewundert hat ist, dass hier auch nur die 
Clockbits verstellt waren.
Nach dem Zurücksetzen der Fuses auf Auslieferungszustand ließ der Mega 
auch wieder per ISP mit einem MKII Clone ansprechen.
Aber wenn ich danach nochmal per ISP die Fuses wieder auf externen 
Oszillator umstelle, kann ich den Controller nicht mit einem externen 
Takt retten, sondern nur mit dem Fusedoctor.
Hat jemand von euch eine Erklärung für das Verhalten?
Kann beim Übertakten beim Setzen der Oszillatorbits im Controller was 
kaputt gegangen sein?
Warum ich noch STK500.exe verwende?
- Es muss unter Windows laufen - weil an dem Arbeitsplatz auch andere 
Arbeiten durchgeführt werden
- Es ist das einzige Tool das ICH BISHER gefunden habe, das sich in 4 
Instanzen starten lässt. (#)
- es sollte zur Zeit der in Dienststellung fast nichts kosten. - damals 
Firmenphilosophie, die sich halt irgendwann mal rächt

(#) Beim verwendeten MKII Clone lässt ich die Seriennummer ändern. Dann 
kann ich die Batchdatei mit vier verschiedenen Seriennummern starten.
Epilog:
Ich hatte das selbe Problem schon mal bei jemandem anders. Dort wurde 
monatelang ATM328 im TQFP-32 zu schnell geflashed (Fuses) – ohne 
Probleme. Plötzlich gab es Probleme die auf zu schnellen Clock beim Fuse 
setzten zurückzuführen waren. Damals konnte ich von 10 Controllern 9 mit 
externen Takt retten und einen mit dem Fusedoctor. Bei dem hat sich SPI 
ausgeschaltet. Danach funktionierte dieser im Gegensatz zum oben 
beschrieben Effekt ohne Probleme.

: Bearbeitet durch Moderator
Beitrag #7781820 wurde von einem Moderator gelöscht.
von Jobst M. (jobstens-de)


Lesenswert?

Und mit welchem Takt läuft der AVR?

In seiner Werkskonfiguration läuft er mit 1 MHz. Da ist alles über 
250kHz auf SCK Glücksspiel.

Steht auch alles im Datenblatt.

Gruß
Jobst

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


Lesenswert?

Robert H. schrieb:
> Bei ein paar ging das nicht: Diese habe ich ausgelötet und auf eine
> Adapterplatine gelötet
> Dann habe ich diese in meinem Fusedoctor im Parallel-HV Mode ausgelesen.
> Und was mich hier dann gewundert hat ist, dass hier auch nur die
> Clockbits verstellt waren.

Auf was waren sie denn verstellt? Wenn du sie aus Versehen auf den 
internen 128-kHz-Oszillator gedreht hast (und dann vielleicht auch noch 
CKDIV8 an ist ;-), dann müsstest du schon extrem langsam mit dem SPI 
arbeiten, um eine Kommunikation zu ermöglichen. Da dauert dann selbst 
das Rücksetzen der Fuses schon locker einige Minuten.

> Aber wenn ich danach nochmal per ISP die Fuses wieder auf externen
> Oszillator umstelle, kann ich den Controller nicht mit einem externen
> Takt retten, sondern nur mit dem Fusedoctor.
> Hat jemand von euch eine Erklärung für das Verhalten?

Wenn sie wirklich auf den externen Oszillator gedreht waren, dann wäre 
es in der Tat unverständlich, warum der Controller mit einem externen 
Takt nicht wieder „auf die Beine“ kommt.

von Robert H. (softtroniker)


Lesenswert?

> In seiner Werkskonfiguration läuft er mit 1 MHz. Da ist alles über
> 250kHz auf SCK Glücksspiel
Ja, das war ja der Fehler, das in der Batchdatei der Clock des ISP zum 
Fuses schreiben zu hoch eingestellt war. Erst nach dem Setzen des 
Oszillators sollte zum Schreiben des Flash der Clock des ISP erhöht 
werden.

> Auf was waren sie denn verstellt? Wenn du sie aus Versehen auf den
> internen 128-kHz-Oszillator gedreht hast

Eingestellt, sollte der interne Oszillator auf "Int. RC Osc. 8Mhz;...."
werden. Aber durch den zu hohen Takt beim Flashen stand der Clock immer 
auf
"Ext. Crystal Osc....."
Dass er mal auf "Int. RC Osc. 128 kHz;" stand habe ich nie erlebt.

> dann müsstest du schon extrem langsam mit dem SPI arbeiten, um eine
> Kommunikation zu ermöglichen.
Ich habe es auch mit langsamen Clockfrequenzen probiert. Bis runter zu 
~2.1kHz. Ohne Erfolg. Das GUI ISP Tool von ATMEL Studio brachte schon 
nach wenigen Sekunden ein TimeOut.

> Wenn sie wirklich auf den externen Oszillator gedreht waren, dann wäre
> es in der Tat unverständlich, warum der Controller mit einem externen
> Takt nicht wieder „auf die Beine“ kommt.
Das ist das was mich am meisten wundert. Ich "repariere" die ATMs mit 
dem Fusedoctor (auf Werkseinstellungen) und kann dann den Controller 
wieder mit dem MKII und dem GUI ISP Tool von ATMEL Studio ansprechen. 
(125kHz ISP Clock)
Dann verstelle ich wirklich unter Kontrolle dieser Oberfläche auf "Ext. 
Crystal Osc.8.0- ..." und versuche dann mit dem Frequenzgenerator zu 
retten und ich schaffe es nicht. Wobei dieses Verfahren ja bei einem 
Großteil meiner "verfusten" Controller funktioniert hat.

Wenn ich nochmals Luft habe, dann werde ich nochmal etwas "Forensik" 
betreiben um auf eine Ursache zu kommen.

Allen erstmal vielen Dank
Robert

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robert H. schrieb:
> Ich habe es auch mit langsamen Clockfrequenzen probiert. Bis runter zu
> ~2.1kHz. Ohne Erfolg. Das GUI ISP Tool von ATMEL Studio brachte schon
> nach wenigen Sekunden ein TimeOut.

Ich denke, dass das GUI schlicht nicht darauf ausgelegt ist, so langsam 
zu arbeiten, und vorher "kalte Füße" bekommt.

Ich hatte das mal irgendwann mit AVRDUDE getestet und glaube, dass man 
dort auch mit sehr langsamem ISP-Takt arbeiten konnte, aber es dauert 
eben eeeeewig, denn rundherum wird ja noch ein bisschen mehr ISP-Traffic 
erzeugt, auf den gewartet werden muss.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Robert H. schrieb:
> Erst nach dem Setzen des
> Oszillators sollte zum Schreiben des Flash der Clock des ISP erhöht
> werden.

Achtung: Die Änderung an diesen Fuses wird IMHO teilweise erst nach 
einem Power-Cycle wirksam.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Achtung: Die Änderung an diesen Fuses wird IMHO teilweise erst nach
> einem Power-Cycle wirksam.

Nein, nach dem Ende der aktuellen ISP-Sitzung. Einen power cycle braucht 
nur das Gefummel mit der DWEN-Fuse.

von Peter D. (peda)


Lesenswert?

Jörg W. schrieb:
> Wenn sie wirklich auf den externen Oszillator gedreht waren, dann wäre
> es in der Tat unverständlich, warum der Controller mit einem externen
> Takt nicht wieder „auf die Beine“ kommt.

Ich hatte mal mit Stromsparen experimentiert und einen ATtiny25 mit 
32kHz Quarz und Taktteiler benutzt. Danach war ISP blockiert.
Die 32kHz Fuse erlaubt max 100kHz und der Vorteiler wird wohl nur bei 
Power-On, aber nicht bei externem Reset zurück gesetzt.
Ich kam daher nur mit HVP wieder ran.
Bei kleinem Takt kann man erst auch nur die Fuses rücksetzen und muß zum 
Flash schreiben wieder den ISP-Takt hochsetzen.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Robert H. schrieb:
> Hat jemand von euch eine Erklärung für das Verhalten?

Nein! Ich nicht.

Wenn man die Fuses per HVPP wieder auf Auslieferungszustand stellt, dann 
sollte auch alles wieder wie im Auslieferungszustand funktionieren, auch 
Fuses per ISP verstellen.
Habe es nie anders erlebt, und nie anders gehört.

Also nein!
Ich weiß nicht was bei dir schief läuft.
Kann nur vermuten.....

Aber wie fast immer, zu wenig Information für eine tiefe Diagnose, zu 
wenig um zu testen.
Dabei: ATmega328 habe ich sowieso nicht, nur als ATmega328P.
Da kann ich sagen, die P Variante tut was es soll, wie erwartet.

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.