Forum: Mikrocontroller und Digitale Elektronik AtMega168PB merkwürdige Ausfälle


von ben (Gast)


Lesenswert?

Hallo,

wir verwenden in einem Produkt einen ATMega168PB mit externem 16Mhz 
Quarz.

Bei der Produktion haben wir hohe Ausschussraten mit µCs, die sich nicht 
mehr programmieren lassen.

Wir hatten zunächst Kontaktschwierigkeiten des Programmieradapters 
vermutet, können das aber dank einer neuen Programmiervorrichtung 
ziemlich sicher ausschließen.

Das Programmieren läuft folgendermaßen per avr-dude ab:
1
avrdude -C avrdude.conf -p m168pb -F -P /dev/parport0 -c usbasp -e
2
3
avrdude -C avrdude.conf -p m168pb -P /dev/parport0 -c usbasp -F -u -U efuse:w:0xFC:m -U hfuse:w:0xDC:m -U lfuse:w:0xD7:m 
4
5
--> ab hier etwa 30% Ausfälle
6
7
avrdude -C avrdude.conf -p m168pb -P /dev/parport0 -c usbasp -F -U flash:w:Bootloader.hex:a
8
9
avrdude -C avrdude.conf -p m168pb -P /dev/parport0 -c  usbasp -F -U lock:w:0xFC:m

Das löschen und Fuses setzen funktioniert noch bei jedem Controller. 
Etwa 30% der Controller reagieren jedoch nach dem Setzen der Fuses nicht 
mehr und lassen sich auch nicht mehr ansprechen ("Target does not 
answer").

Der Quarz schwingt jedoch auch bei den Ausgefallenen Baugruppen, wie wir 
mit dem Oszilloskop messen können.(!) Die Versorgungsspannaug sind 
stabile 5V


- Woran könnte das liegen? Wie können wir in Zukunft weitere Ausfälle 
vermeiden?

Vielen Dank

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

> -P /dev/parport0 -c usbasp

Das ist aber seltsam. Der USBASP ist doch ein USB Gerät.

Solange der µC noch jungfräulich ist muss er mit verringerter 
Taktfrequenz programmiert werden. Das geht je nach USBASP Modell 
vollautomatisch, oder mit dem Parameter -B16 oder mit einem Jumper.

Sind die µC mit Abblock-Kondensator ausgestattet?
Ist die Stromversorgung stabil?
Wie lang sind die Leitungen zwischen Programmer und µC?
Hängen an den Leitungen MISO, MOSI und SCK noch weitere Lasten?

von ben (Gast)


Lesenswert?

Programmer ist auf Langsam mit Jumper, habe ich auch mit dem Oszilloskop 
geprüft
Natürlich gibt es Abblockkondensatoren
Ja, die Stromversorgung ist stabil
Programmierleitung ist etwa 15cm lang
MOSI ist belastet, da als PWM Ausgang verwendet. Last ist ein RC Filter: 
6.2k und 100nF

von Reiner_Gast (Gast)


Lesenswert?

Liegt es evtl. daran, das über die Fuses ein Full-Swing Crystal 
eingestellt wurde und nicht ein Ext. Crystal Oszillator?

Hier gab es einen wohl einen schon mal einen ähnlichen Eintrag: 
Beitrag ""Full Swing Crystal" und "Crystal Oscillator""

von ben (Gast)


Lesenswert?

Reiner_Gast schrieb:
> Liegt es evtl. daran, das über die Fuses ein Full-Swing Crystal
> eingestellt wurde und nicht ein Ext. Crystal Oszillator?

Die Fuses sind auf folgendes gesetzt (laut 
http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega168p)

Ext. Full-Swing Crystal, Start-up time: 16KCK + 0ms
Brown-out detection level 4.3V

Und der Quarz schwingt zumindest korrekt laut Oszi

von Peter D. (peda)


Lesenswert?

ben schrieb:
> Ext. Full-Swing Crystal

Die PB-Typen können nur noch "Low Power Crystal Oscillator".

von ben (Gast)


Lesenswert?

Peter D. schrieb:
> ben schrieb:
>> Ext. Full-Swing Crystal
>
> Die PB-Typen können nur noch "Low Power Crystal Oscillator".

Oha! Das heißt die Fuses sind falsch?

von Einer K. (Gast)


Lesenswert?

ben schrieb:
> Die Fuses sind auf folgendes gesetzt (laut
> http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega168p)
Hast du nicht einen PB ?
Ist der gleich mit der P Variante?


Denn:
lfuse: 11010111
Ist im Datenblatt nicht definiert.

14.2 Clock Sources
> Low Power Crystal Oscillator 1111 - 1000
Ich würde also lfuse: 11011XXX erwarten

> Low Frequency Crystal Oscillator 0101 - 0100
Du schreibst 0111
Erstens ist 16MHz nicht low und zweitens ist die Bitfolge nicht 
definiert.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

ben schrieb:
> Oha! Das heißt die Fuses sind falsch?

Ja. Oder der ATMega ist falsch - wg. PB.

Leider fehlt die PB-Variante in 
http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega168p

: Bearbeitet durch Moderator
von Bernd S. (wirrer_haarschopf)


Lesenswert?

Da liest der Bastler und staunt, so bereiten also "Profis" die 
Produktion vor. Interessant!

von Soul E. (Gast)


Lesenswert?

Dagegen hilft ein Review der Controllerbeschaltung und -konfiguration 
durch den Controllerhersteller sowie ein Review der 
Oszillatorbeschaltung und -konfiguration durch den Quarzhersteller.

Meist fragt auch der Kunde beim Audit, ob diese Reviews durchgeführt 
wurden.

von ben (Gast)


Lesenswert?

Vielen Dank für die Hilfe! das wird es wohl gewesen sein.

Scheinbar läuft der 'Full Swing Mode' bei der PB Version nicht korrekt, 
weswegen Atmel den 'Im Datenblatt deaktiviert' hat.

Wir hatten zunächst den P - Typ bei der Entwicklung. Und da es bei 
manchen PBs funktioniert, war das auch kein Eindeutig klarer Fehler

Danke

von Einer K. (Gast)


Lesenswert?

Dennoch ist es mir ein Rätsel, wieso man nicht ins Datenblatt schaut, 
wenn man den Prozessor wechselt und danach Probleme hat, wo keine sein 
dürften.

Und dann auch noch den falschen Prozessor im FuseCalculator auswählt.
Nein!
Dass es da keinen PB gibt ist kein gutes Argument dafür, den falschen 
auszuwählen.

Wie auch immer, ich glaube die Kröte ist jetzt geschluckt, und die Saat 
der Sorgfalt ausgebracht.
(aber, ich möchte gar nicht wissen, was da sonst noch im argen liegt)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Arduino F. schrieb:
> Dennoch ist es mir ein Rätsel, wieso man nicht ins Datenblatt schaut,

Wenn man anderen Quellen glauben möchte, war der Full Swing Modus 
durchaus im Datenblatt dokumentiert. Er wurde erst still und heimlich 
von Atmel entfernt, als Atmel erkannte, dass die PB-Variante nicht 
sicher genug im Full Swing lief.

Google einfach mal nach "ATmega 328PB full swing" (168PB geht genauso).

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Übrigens interessant in diesem Zusammenhang: Die "Clock Failure 
Detection", die neu für die PB-Variante war:

"CFD – Clock Failure Detection mechanism

Clock Failure Detection and Switching Mechanism is a new feature 
introduced in ATmega328PB. This digital logic detects the failure of the 
Low power crystal oscillator, Full swing crystal oscillator, and 
external clocks. If a failure is detected, this logic will automatically 
switch the clock to 1 MHz internal RC system clock.

The Clock Failure Detection mechanism for the device is enabled by an 
active high fuse. When the CFD fuse is enabled, 128 kHz oscillator will 
be enabled and the CFD circuit works using that clock. CFD will be 
automatically disabled when the chip enters power save/down sleep mode. 
It will be enabled by itself when the chip returns to active mode. CFD 
will be enabled only when the system frequency is greater than 256 kHz."

Aus: https://www.radiolocman.com/review/article.html?di=162667

von ben (Gast)


Lesenswert?

Frank M. schrieb:
> "CFD – Clock Failure Detection mechanism

Klingt ja erstmal gut, konnte allerdings im 168PB Datenblatt nichts 
darüber finden..


Gerade versucht die 'Toten' Atmels per 4MHz Clock in XTAL1 
wiederzubeleben, hilft leider nicht..

von Äxl (geloescht) (Gast)


Lesenswert?

ben schrieb:
> Gerade versucht...
---
Wenn er auf der internen Quelle läuft, dann programmier ihn mit 4Khz.
Habt ihr da nur selbstgebasteltes Prüf/Programmier-Equipment?
Wenigstens n altes STK500 wird doch da irgendwo aufzutreiben sein?!?

von Peter D. (peda)


Lesenswert?

ben schrieb:
> Gerade versucht die 'Toten' Atmels per 4MHz Clock in XTAL1
> wiederzubeleben

Probier mal XTAL2.

von ben (Gast)


Lesenswert?

Peter D. schrieb:
> Probier mal XTAL2.

Hilft leider nicht

von Einer K. (Gast)


Lesenswert?

ben schrieb:
> Hilft leider nicht

Dann Datenblatt: "Parallel Programming"

Denn das geht noch, wenn sonst nix mehr geht.

von ben (Gast)


Lesenswert?

Arduino F. schrieb:
> ben schrieb:
>> Hilft leider nicht
>
> Dann Datenblatt: "Parallel Programming"
>
> Denn das geht noch, wenn sonst nix mehr geht.

Ist mir bekannt danke, bei einem eingelötetem TQFP aber nicht mehr 
trivial

von Stefan F. (Gast)


Lesenswert?

Wozu gibt es bei anderen AVR's überhaupt die Option "Full-Swing" und 
welche Variante sollte man bevorzugen wenn man unsicher ist?

von Soul E. (Gast)


Lesenswert?

Stefan U. schrieb:

> Wozu gibt es bei anderen AVR's überhaupt die Option "Full-Swing"
> und
> welche Variante sollte man bevorzugen wenn man unsicher ist?

Letztendlich wird da die Treiberleistung des chip-internen 
Quarzoszillators eingestellt. Stell es Dir vor wie einen 74HCU04 mit 
Gegenkopplungswiderstand, und über die Fuses kannst Du den 
Widerstandswert verstellen oder zwei HCU04 parallel schalten.

Im Datenblatt ist eine Tabelle mit Empfehlungen, welche Einstellung für 
welche Quarzfrequenz passt.

Für die Serie zählt aber die Vorgabe des Quarzherstellers!

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.