Forum: Mikrocontroller und Digitale Elektronik Atmega168PA-AU funktioniert nicht mit externem Quarz


von Tilman (Gast)



Lesenswert?

Hallo zusammen,

bei meiner selbst erstellten PCB kann ich den Atmega (168PA-AU) nicht 
mehr beschreiben, seit ich ihn auf den externen Quarz umgestellt habe.
Auf einem zweiten Aufbau der PCB mit internem Quarz verhält sich der uC 
wir zu erwarten und lässt sich flashen.

Anbei ein Ausschnitt der PCB.

Als Quarz verwende ich den folgenden: 
https://lcsc.com/product-detail/Crystals_Yangxing-Tech-X5032110592MSB2GI_C112574.html

In der "Description" sind 20pF genannt, ich nehme also an, dass die LC 
ist. Mit der Faustformel komme ich auf 20pF*2-5pF=35pF, also habe ich 
33pF gewählt.

Habt ihr eine Idee, wo das Problem liegen könnte?

Als zweiten Anhang noch ein Screenshot von den Settings von MiniCore. In 
der IDE steht zwar "Clock -> External ...", aber in der Dokumentation 
(https://github.com/MCUdude/MiniCore#supported-clock-frequencies) ist 
von External crystal/oscillator die Rede. Oder kann es doch daran 
liegen? 
https://www.mikrocontroller.net/articles/Quarze_und_AVR#Einstellung_der_Fuses

Den externen Quarz benötige ich, da die Schaltung UART nutzt.

Ich freue mich über jede Antwort! Lasst mich wissen, falls weitere 
Informationen benötigt werden.

von Michael U. (amiga)


Lesenswert?

Hallo,

extern Clock ist nicht Crystal sondern ein extern angelegter Takz.
Schau ins Datenblatt des Mega168PA, ich kenne die MiniCore-IDE nicht.
Du wirst einen externen Takt anlegen müssen um die Fuses wieder zu 
korrigieren.

Gruß aus Berlin
Michael

von Axel S. (a-za-z0-9)


Lesenswert?

Tilman schrieb:
> bei meiner selbst erstellten PCB kann ich den Atmega (168PA-AU) nicht
> mehr beschreiben, seit ich ihn auf den externen Quarz umgestellt habe

D.h. der Quarz(oszillator) schwingt nicht. Kann an allem möglichen 
liegen. Am wahrscheinlichsten sind Kurzschlüsse (bzw. Lötstellen 
allgemein) oder ein defekter Quarz. Kann man mit den Oszi oder 
Logikprüfstift am Ausgang des Oszillators leicht verifizieren.

> In der "Description" sind 20pF genannt ... also habe ich 33pF gewählt.

Daran liegt es nicht. OK, es sei denn sie haben nicht 33pF. Wenn das 
aus Versehen 100nF sind, klappts natürlich nicht ...

von Klaus S. (kseege)


Lesenswert?

Tilman schrieb:
> Ich freue mich über jede Antwort!

Da bin ich aber gespannt. Die sichere Methode ist aus meiner Sicht:
Quarz und Kondensatoren ablöten, externen Takt von irgendwo (1MHz vom 
Oszi zur Tastkopfkalibration) holen und mit XTAL1 verbinden.  Dann mit 
dem Flasher die Fuses überprüfen. 0000 in CLKSEL0-3 (also alle 4 
programmiert!) heißt: "Externer Oszillator" und ist somit falsch. 0010 
ist die Einstellung für den internen Oszillator 8Mz und die Einstellung 
011 steht in meinem Datenblatt für den benötigten Full-Swing-Oscillator. 
Das ist hoffentlich richtig, aber ein wenig verdächtig, da es als 
einziger Wert nur 3stellig angegeben ist.
Wenn aber schon 0011 in den Fuses steht, liegt es wohl an der 
Schwingbedingung für den Quarz, also Lötstellen und Kondensatoren 
überprüfen.

Viel Glück!

von Jobst M. (jobstens-de)


Lesenswert?

Klaus S. schrieb:
> Quarz und Kondensatoren ablöten

Nicht notwendig. Einfach Takt anlegen.

Gruß
Jobst

von H. H. (Gast)


Lesenswert?

Klaus S. schrieb:
> Quarz und Kondensatoren ablöten, externen Takt von irgendwo (1MHz vom
> Oszi zur Tastkopfkalibration) holen und mit XTAL1 verbinden.

Wenn 1MHz eingespeist wird, dann muss man den 11MHz Quarz nicht 
auslöten, und die Kondensatoren auch nicht.

von Axel S. (a-za-z0-9)


Lesenswert?

Jobst M. schrieb:
> Klaus S. schrieb:
>> Quarz und Kondensatoren ablöten
>
> Nicht notwendig. Einfach Takt anlegen.

Wenn XTAL2 "aus Versehen" auf GND gelegt wurde, z.B. weil man sich mit 
dem Gehäuse des Quarzes einen Kurzschluß gebaut hat, dann klappt das 
nicht. Ist aber nur geraten, den der TO zeigt den Aufbau nicht.

Michael U. schrieb:
> extern Clock ist nicht Crystal sondern ein extern angelegter Takz

Das ist die übliche Fehlinterpretation. Es wird nicht dazu gesagt, was 
denn nun "external" ist. Nur der Quarz oder auch der Oszillator?

Abgesehen davon ist das anscheinend eine Arduino-IDE. AFAIK ist es bei 
Arduino gar nicht vorgesehen, den AVR mit einem externen Takt zu 
versorgen. Entweder interner RC-Oszillator oder interner Oszillator mit 
externem Quarz.

von EAF (Gast)


Lesenswert?

Axel S. schrieb:
> Abgesehen davon ist das anscheinend eine Arduino-IDE. AFAIK ist es bei
> Arduino gar nicht vorgesehen, den AVR mit einem externen Takt zu
> versorgen. Entweder interner RC-Oszillator oder interner Oszillator mit
> externem Quarz.
Das ist eine Boarddefinition, welche der IDE hinzugefügt werden kann.
Ist also nicht wirklich Arduino. Nur die IDE.
In der Boarddefinition findet sich eine boards.txt Datei.
Dort sind die verwendeten Fuses Varianten aufgeführt.

Man kann also herausfinden, wie das gemeint ist.
(wenn man will)
Zudem zeigt es (AVRdude) die Fusess beim "Bootloader brennen" in den 
ausführlichen Meldungen.

von Jobst M. (jobstens-de)


Lesenswert?

Axel S. schrieb:
>> Nicht notwendig. Einfach Takt anlegen.
>
> Wenn XTAL2 "aus Versehen" auf GND gelegt wurde, z.B. weil man sich mit
> dem Gehäuse des Quarzes einen Kurzschluß gebaut hat, dann klappt das
> nicht. Ist aber nur geraten, den der TO zeigt den Aufbau nicht.

Wenn External Clock ausgewählt wurde, ist XTAL2 völlig irrelevant.
Über weitere Fehler spekuliere ich erstmal nicht weiter.

Axel S. schrieb:
> Das ist die übliche Fehlinterpretation. Es wird nicht dazu gesagt, was
> denn nun "external" ist. Nur der Quarz oder auch der Oszillator?

Das steht ziemlich eindeutig im Datenblatt.


Gruß
Jobst

von EAF (Gast)


Lesenswert?

Jobst M. schrieb:
> Axel S. schrieb:
>> Das ist die übliche Fehlinterpretation. Es wird nicht dazu gesagt, was
>> denn nun "external" ist. Nur der Quarz oder auch der Oszillator?
>
> Das steht ziemlich eindeutig im Datenblatt.

Ja!
Nur ist hier das Menu gemeint, was du wohl obersehen hast.
Und da ist "External" halt eben ein "Full Swing Crystal"

Hier der Nachweis:
https://github.com/MCUdude/MiniCore/blob/master/avr/boards.txt#L364

von Klaus S. (kseege)


Lesenswert?

EAF schrieb:
> Nur ist hier das Menu gemeint, was du wohl obersehen hast.
> Und da ist "External" halt eben ein "Full Swing Crystal"
>
> Hier der Nachweis:
> https://github.com/MCUdude/MiniCore/blob/master/avr/boards.txt#L364

Das verstehe ich nicht. In der angegebenen boards.txt steht eindeutig:

168.menu.clock.11_0592MHz_external.bootloader.low_fuses=0b1111{...}

In der Übersichtstabelle des Datenblatts für den ATmega18PB (die ich 
vorher nicht so schnell gefunden hatte) steht ebenso eindeutig für 
CKSEL3-0:

Low Power Crystal Oscillator 1111 - 1000
Full Swing Crystal Oscillator 0111 - 0110
Internal 128kHz RC Oscillator 0011

Nach meinem Verständnis stellt damit MiniCore den 
LowPowerCrystalOscillator als Betriebsmodus für "External" ein. Und der 
ist nach meinem Halbwissen kritischer als der FullSwingOscillator in der 
externen Beschaltung, um sicher anzuschwingen.

Damit ist auch klar, daß die von mir in meinem vorigen Posting schon als 
verdächtig eingestuften 011 im Datenblatt vermutlich falsch sind.


Gruß Klaus (der soundsovielte)

von Klaus S. (kseege)


Lesenswert?

Klaus S. schrieb:
> Datenblatts für den ATmega18PB

Dreckfuhler

Das benutzte Datenblatt 8271E–AVR–07/2012 ist für den ATmega168PA,
also wohl das richtigerweise Zuständige.

von H. H. (Gast)


Lesenswert?

Klaus S. schrieb:
> Nach meinem Verständnis stellt damit MiniCore den
> LowPowerCrystalOscillator als Betriebsmodus für "External" ein. Und der
> ist nach meinem Halbwissen kritischer als der FullSwingOscillator in der
> externen Beschaltung, um sicher anzuschwingen.

Und der vom TE verwendete Quarz soll auch mit 100µW belastet werden, so 
wie die gängigen HC-49/S Quarze.

von EAF (Gast)


Lesenswert?

Klaus S. schrieb:
> Das verstehe ich nicht. In der angegebenen boards.txt steht eindeutig:
>
> 168.menu.clock.11_0592MHz_external.bootloader.low_fuses=0b1111{...}
>
> In der Übersichtstabelle des Datenblatts für den ATmega18PB (die ich
> vorher nicht so schnell gefunden hatte) steht ebenso eindeutig für
> CKSEL3-0:

https://www.engbedded.com/fusecalc/
Low Fuses 0xF7

Und du wirst sehen externe Crystal!
Denn eine Programmierte Fuse ist 0 und eine unprogrammierte eine 1
So wie es für Flash Zellen eben üblich ist.

von Klaus S. (kseege)


Lesenswert?

EAF schrieb:
> https://www.engbedded.com/fusecalc/
> Low Fuses 0xF7
>
> Und du wirst sehen externe Crystal!
> Denn eine Programmierte Fuse ist 0 und eine unprogrammierte eine 1
> So wie es für Flash Zellen eben üblich ist.

Das hat ja keiner bestritten. Die Behauptung, die mir unverständlich 
erschien, war, daß die Zeile:

168.menu.clock.11_0592MHz_external.bootloader.low_fuses=0b1111{...}

in boards.txt einen FullSwingOscillator einstellen würde. Mein 
Denkfehler war, daß ich die 0b1111 für das LowNibble hielt und den 
Inhalt der geschweiften Klammer für einen Kommentar. Überraschung: Ist 
es nicht!

Wir können also festhalten, daß für die Schaltung des TO im 
LowerFuseByte 0xF7 stehen sollte. Ob das so ist, kann nur der TO 
nachkontrollieren.
Steht es so richtig drin, liegt der Fehler in der Oszillatorschaltung.

Gruß Klaus (der soundsovielte)

von EAF (Gast)


Lesenswert?

Klaus S. schrieb:
> Wir können also festhalten, daß für die Schaltung des TO im
> LowerFuseByte 0xF7 stehen sollte. Ob das so ist, kann nur der TO
> nachkontrollieren.
> Steht es so richtig drin, liegt der Fehler in der Oszillatorschaltung.

So sieht es aus.

Klaus S. schrieb:
> Überraschung: Ist
> es nicht!
Ist es nicht!

Beitrag #7089181 wurde vom Autor gelöscht.
von Jobst M. (jobstens-de)


Lesenswert?

EAF schrieb:
>> Das steht ziemlich eindeutig im Datenblatt.
>
> Ja!
> Nur ist hier das Menu gemeint, was du wohl obersehen hast.
> Und da ist "External" halt eben ein "Full Swing Crystal"
>
> Hier der Nachweis:
> https://github.com/MCUdude/MiniCore/blob/master/avr/boards.txt#L364

Nein, das habe ich nicht übersehen, ging zu dem Zeitpunkt (bis eben 
noch) allerdings  davon aus, dass das Menu korrekt ist.

Gruß
Jobst

von EAF (Gast)


Lesenswert?

Schön!
Dann sind ja jetzt alle Klarheiten beseitigt.

von Klaus S. (kseege)


Lesenswert?

EAF schrieb:
> Schön!
> Dann sind ja jetzt alle Klarheiten beseitigt.

Fehlt nur noch der TO!

von Tilman (Gast)


Lesenswert?

Vielen Dank für die ganzen Antworten!

Für die ausgewählte Variante werden folgende CKSEL Bits verwendet:
https://github.com/MCUdude/MiniCore/blob/18d2ac780376a985c0f343cabe95aee4d27dc3d7/avr/boards.txt#L289

Da das für die lfuse 0xF7 ergeben sollte, habe ich mich bei einem 
zweiten Board noch einmal getraut und es mit den Einstellungen wie im 
Eingangspost geflashed und ... es hat funktioniert!

> avrdude: 1 bytes of lfuse written
> avrdude: verifying lfuse memory against 0b11110111:
> avrdude: load data lfuse data from input file 0b11110111:
> avrdude: input file 0b11110111 contains 1 bytes
> avrdude: reading on-chip lfuse data:
>
> Reading | ################################################## | 100% 0.00s
>
> avrdude: verifying ...
> avrdude: 1 bytes of lfuse verified

Leider kann ich mit meinem ersten Board immer noch nicht reden. Ich habe 
auch schon versucht, mit einem anderen Arduino ein 1MHz Signal zu 
erzeugen und an XTAL1 zu hängen (und GND verbunden), leider erfolglos. 
Einen Oszi habe ich leider nicht. Lötstellen habe ich erneut 
durchgepiepst (ich habe nur den Atmega draufgelötet, den Quarz und die 
Kapazitäten hat jlcpcb draufgelötet, der Atmega wäre zu teuer gewesen).
Da ich nur 4 der 5 gelieferten Boards brauche, gebe ich mich damit 
zufrieden und werde auf den (aktuell) teueren Atmega verzichten müssen.

Vielen Dank nochmal! Hier bekommt man echt immer schnell kompetente 
Hilfe.

von Jobst M. (jobstens-de)


Lesenswert?

Tilman schrieb:
> Einen Oszi habe ich leider nicht. Lötstellen habe ich erneut
> durchgepiepst

1. Und mit der Lupe genau angesehen?

2. Welche Spannungen misst Du im eingeschalteten Zustand an XTAL1 und 2 
gegen GND. (DC!)

3. Welche Widerstände misst Du im ausgeschalteten Zustand von XTAL1 und 
2 gegen GND und zueinander?

4. Wo kommst Du her? Evtl. erklärt sich jemand in Deiner Nähe dazu 
bereit mal sein Scope dranzuhalten. Bzw. draufzuschauen.

5. Du kannst auch mal versuchen 1MΩ von XTAL1 zu XTAL2 zu ziehen. Das 
funktioniert normalerweise hier auch ohne, aber es ist ein Versuch wert.


Gruß
Jobst

von Hubert G. (hubertg)


Lesenswert?

Habe schon lange keinen Atmega retten müssen, aber die eingespeiste 
Taktfrequenz muss deutlich höher sein als der Takt des Programmer.

von Stefan F. (Gast)


Lesenswert?

Anbei meine Zusammenfassung, was man zu diesem Thema wissen sollte:
http://stefanfrings.de/avr_verfused/index.html

von Peter D. (peda)


Lesenswert?

Als externe Taktquelle kann man auch einen weiteren AVR nehmen, z.B. 
ATtiny25. Man muß nichtmal ein Programm schreiben, nur die CKOUT-Fuse 
enablen. Je nach CKDIV8-Fuse kommen dann 8MHz oder 1MHz raus.

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.