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:
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
> -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?
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
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""
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
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?
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.
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.
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
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)
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).
Ü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
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..
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?!?
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
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!