ATMega1284p mit externem Quarz

Gast #5876100
Lesenswert?

Guten Abend,

an meinem ATMega1284 hängt ein 12,288 Mhz Quarz.
Nachdem ich die Fuses verändert habe, funktioniert die Kommunikation gar 
nicht mehr.

>avrdude: stk500v2_command(): command failed
>avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: >Unknown 
status 0x00
>avrdude: initialization failed, rc=-1
>         Double check connections and try again, or use -F to override
>         this check.
>
>
>avrdude done.  Thank you.

Die Fuses hatte ich auf folgende Werte gesetzt:
-U lfuse:w:0x7f:m -U hfuse:w:0x99:m -U efuse:w:0xff:m

was eigentlich "Ext. Crystal Osc.; Frequency 8.0- MHz; Start-up time: 
16K CK + 65 ms; [CKSEL=1111 SUT=11]" entsprechen sollte.

Was habe ich falsch gemacht und wie komme ich da am besten wieder raus?

Beste Grüße.
Gast #5876139
Lesenswert?

Tom schrieb:
> was eigentlich "Ext. Crystal Osc.; Frequency 8.0- MHz; Start-up time:
> 16K CK + 65 ms; [CKSEL=1111 SUT=11]" entsprechen sollte.

Tut es, aber das willst Du garnicht haben.

Tom schrieb:
> Was habe ich falsch gemacht

Du willst den 'Full Swing Oscillator' 0x7F 0x99 0xF7

Tom schrieb:
> wie komme ich da am besten wieder raus?

Externen Takt anlegen und Fuses neu setzen.
Gast #5876163
Lesenswert?

Nur für das Verständnis: Warum muss ein externer Takt angelegt werden, 
wenn der Quarz diesen schon liefern sollte? Externer Takt wäre doch wohl 
eher notwendig, wenn die Einstellung ext. Clock gewesen wäre?

Welche Frequenz soll der zu anliegende Takt haben? Rechteck?
#5876165
Lesenswert?

Ein Quarz liefert keinen Takt, sondern ist Bestandteil eines 
Quarzoszillators.
Du hast Ext. Crystal Osc gefust. Das meint einen Quarzoszillator.
Für einen Quarz mußt Du etwas mit Crystal full swing osc. fusen.
1MHz Rechteck sollte es tun. Bei kleineren Frequenzen mußt Du mit den 
ISP Takt des STK500 runtergehen.
Gast #5876180
Lesenswert?

Tom schrieb:

> Nur für das Verständnis: Warum muss ein externer Takt angelegt werden,
> wenn der Quarz diesen schon liefern sollte?

Weil er ihn halt offensichtlich nicht liefert.

Das Problem ist eine Fehlanpassung, sprich: die verwendeten 
Bürdekondensatoren passen nicht wirklich zum Quarz. Der LP-Oszillator, 
den du da gefused hast, reagiert sehr empfindlich auf so eine 
Fehlanpassung. Er schwingt dann einfach nicht.

Ein Weg wäre, auf FullSwing umzufusen, denn der ist deutlich toleranter 
gegenüber nicht optimal angepassten Quarzen. Bloß brauchst du halt erst 
mal einen Takt, um das tun zu können. Dazu kannst du temporär von außen 
einen Takt einspeisen, der Quarz und die Bürdekondensatoren brauchen 
dazu nicht entfernt zu werden.

Der richtige Weg ist aber: die Bürdekondensatoren zu tauschen, bis die 
Sache auch als LP-Oszillator anschwingt. Dann ist der Quarz deutlich 
besser angepasst, was immer sinnvoll ist. Ganz egal, ob dann letztlich 
FullSwing oder LP gewählt wird.
Gast #5876187
Lesenswert?

c-hater hat Recht. Die Fuses wurden für einen Quarz eingestellt.

Die meisten Beiträge darüber sind davon ausgegangen, dass "External 
Clock" eingestellt wurde, das ist aber nicht der Fall.

WIe dem auch sei, du kannst den Chip wieder beleben, indem du einen Takt 
(z.B. von einem fix und fertigen Quarz-Oszillator) an den Pin XTAL1 
anlegst.
Gast #5876325
Lesenswert?

Okay. Nur um sicher zu gehen, dass ich das Problem genau verstanden 
habe:
Die Kapazitäten am Quarz wurden so schlecht gewählt, dass der MCU diesen 
nicht zu schwingen bekommt. Hätte ich nun aber genau die richtige 
Kapazität gewählt, dann hätte das ganze auch funktioniert?

Was macht Full Swing jetzt anders, dass dieser fehlertoleranter ist?
Gast #5876328
Lesenswert?

Tom schrieb:
> Okay. Nur um sicher zu gehen,  ..........

Nur um sicher zu gehen, mal so am Rande: nachdem du dich
bereits beim Quarz-Takt nicht besonders professionell angestellt
hast muss man auch die Frage stellen ob du deinem Controller
ausreichend Abblock-Kondensatoren nach Hersteller-Empfehlung
spendiert hast .... das hat nämlich massiven Einfluss auf
die zuverlässige Funktionsweise .... auch beim Flashen.

Was? Abblock-Kondensatoren? Was ist das? Braucht es bei mir
nicht, bei mir geht's auch ohne.
Gast #5876332
Lesenswert?

Tom schrieb:

> Okay. Nur um sicher zu gehen, dass ich das Problem genau verstanden
> habe:
> Die Kapazitäten am Quarz wurden so schlecht gewählt, dass der MCU diesen
> nicht zu schwingen bekommt. Hätte ich nun aber genau die richtige
> Kapazität gewählt, dann hätte das ganze auch funktioniert?

So isses (unter der Annahme, das keine grundsätzlichen Schaltungsfehler 
vorliegen).

> Was macht Full Swing jetzt anders, dass dieser fehlertoleranter ist?

Der packt schlicht mehr Energie rein.

Der Vorteil ist: der Oszillator läuft auch in stark störungsverseuchter 
Umgebung stabil (aber auch nur dann, wenn der Quarz korrekt angepasst 
ist!). Der Nachteil: er braucht deutlich mehr Strom als der 
LowPower-Oszillator.
Beitrag #5876347 wurde von einem Moderator gelöscht.
#5876365
Lesenswert?

Arduino Fanboy D. schrieb im Beitrag #5876347:
> Also gefust für Oszillator und Quarz dran gebaut.
> Das läuft nicht.

Bitte sieh dir die vom TO genannten Fuse Werte an. Er hat nicht auf 
externen Takt gefused sondern auf Quarz. Insoweit ist alles in Ordnung.

Er wäre aber nicht der Erste, der sich bei den Bürde-Kondensatoren 
geirrt hat - wobei 10pF Abweichung nicht tödlich sind. Meist hat man um 
Zehnerpotenzen falsch gewählt / gelesen.
#5876368
Lesenswert?

Arduino Fanboy D. schrieb im Beitrag #5876347:
> Du sagst, du hast einen Quarz montiert.
> Du sagst, du hast für einen externen Oszilator gefust.

Nö, hat er nicht.

Im Ausgangspost steht
> -U lfuse:w:0x7f:m -U hfuse:w:0x99:m -U efuse:w:0xff:m
d.h. CKSEL3..0 = 1111, was lt. DB "Low Power Crystal Oscillator 8.0 - 
16.0MHz" heißt, also Quarz. Für Quarzoszillator müsste "external Clock 
CKSEL3..0 = 0000" programmiert sein, oder übersehe ich da was?

Warum der Quarz nicht schwingt, ist vielleicht eine Frage der Schaltung, 
des Aufbaus oder anderer Faktoren, über die wir allerdings -wie leider 
oft üblich- im Unklaren gelassen werden.

Übrigens ist CKDIV8 unprogrammiert, d.h. der Takt -wenn er denn Läuft- 
wird noch durch 8 geteilt, der TO hat also  1,536 Mhz Takt zur 
Verfügung.

Reinhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren