Forum: Mikrocontroller und Digitale Elektronik ATMega1284p mit externem Quarz


von Tom (Gast)


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.

von Andreas B. (bitverdreher)


Lesenswert?

An den Fuses liegt es nicht.
Beschaltung des externen Quarzoszillators?

Oder hast Du tatsächlich nur einen Quarz angeschlossen? Dann hilft nur 
noch einen richtigen Takt anzulegen.

: Bearbeitet durch User
von Horst (Gast)


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.

von Tom (Gast)


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?

von Andreas B. (bitverdreher)


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.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Ein Quarz benötigt eine Schaltung, die ihn zum Schwingen anregt.
In einem Quarz-Oszillator ist diese Schaltung integriert. Deswegen hat 
der auch zwei Anschlüsse mehr, für die Stromversorgung.

von c-hater (Gast)


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.

von Stefan F. (Gast)


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.

von Tom (Gast)


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?

von Abblock Aufseher (Gast)


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.

von c-hater (Gast)


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.
von Georg G. (df2au)


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.

von Reinhard R. (reirawb)


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

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Georg G. schrieb:

> Er wäre aber nicht der Erste, der sich bei den Bürde-Kondensatoren
> geirrt hat - wobei 10pF Abweichung nicht tödlich sind.

Für den LowPower-Oszillator SIND 10pF daneben i.d.R. tödlich. Genau 
das ist wohl das Problem des TO...

von Stefan F. (Gast)


Lesenswert?

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

Drückt mehr Energie in den Schwingkreis.

Falls du das ganze auf einem Steckbrett aufgebaut hast, unterschätze 
nicht die Kapazitäten der Steck-Kontakte.

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.