www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Das Mysterium CKOPT


Autor: Clifford (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tag. Ich habe eine Frage zu der Fuse CKOPT. Wenn die nicht programmiert 
ist habe ich es schon mehrfach erlebt das ein Controller eine Zeit lang 
lief und von einem Moment zum anderen den Dienst verweigerte. Wenn ich 
dann mit einem Oszillator einen Takt an XTAL1 gebracht habe konnte ich 
wieder auf den Controller zugreifen. Wenn ich dann CKOPT programmiert 
habe gab es nie wieder Probleme.

Die Funktion von CKOPT ist mir klar. Aber wieso gibt es solche Probleme 
wenn die Fuse unprogrammiert ist? Kann das am Quarz liegen? Oder müssen 
die Kondensatoren anders sein (ich hab immer 2x 22pF). Oder ist das 
wieder ein Versuch von Atmel etwas besser zu machen und das macht dann 
nur mehr Probleme? Bei den neueren (zb Mega168) findet man die Fuse 
nämlich schon nicht mehr.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eher unwahrscheinlich, dass es an den Atmels liegt. Kenne solche 
Probleme nicht. Würde da eher in deinem Umfeld Fehlersuche betreiben.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den neueren AVRs ist diese Fuse schon mit in die 
Frequenzauswahlfuses eingearbeitet.

Es ist nunmal so, daß Quarze mit höherer Frequenz niederohmiger sind, 
und da muß man eben ein bischen mehr Strom fließen lassen, damit es 
stabil schwingt.

Ist ja auch im Datenblatt so angegeben, daß man bei hohen Frequenzen die 
CKOPT setzen soll.

Wenn jemand das Datenblatt nicht liest, dafür kann doch Atmel nichts.


Peter

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, nach dem "Rumtheoretisieren" besser ein paar Fakten:

Ich zitiere erst mal ein paar Sätze von Dave vanHorn (Englisch ist 
hoffentlich kein Problem):

"There is a bit of design work required to get it right:

First, the crystal determines the cap values, in it's loading cap
spec. If your crystal dosen't have a loading cap spec, then it's a
series mode rock, and you shouldn't use it in a parallel mode circuit
like this. It won't operate at the nameplate frequency since the
parallel and series resonant points cannot be at the same frequency,
and it may not even start up reliably in this mode.

Second, from the crystal's point of view, the caps are in series, so
they need to be almost twice the value specified by the crystal.
Almost, because there is always some amount of stray capacitance on
the board. You can guess at 5pF and start there. CL = (2*Cs)-5

Third, you need to check drive power, it is possible to damage or
even shatter a crystal with too much drive. This involves a
measurement of drive current and crystal impedance, see data sheet.
Power is of course I^2 * R where R is the crystal impedance at
resonance. You can add a small value resistor in series with the
drive pin, and measure voltage across it.

Fourth, it's always a good idea to do a margin check, which involves
adding series resistance between the micro's output pin and the
crystal. You adjust this value upward till the oscillator just starts.
This value should be at least three times the crystal's ESR value,
and higher ratios are better.

With the AVR in particular, there is one more consideration, the
CKOPT fuse should be programmed. The default (unprogrammed) state
enables a low power "vittoz" mode oscillator that typically operates
at about 1/2VCC amplitude, and will cause significant problems unless
the crystal is specifically designed for this mode."

Dave setzt AVRs in kommerziellen Designs ein, seit es sie gibt und hatte 
mit der CKOPT-Fuse schon mächtig viel "Spass" (was ihn eine 
Rückrufaktion kostete). Er wird deshalb nicht müde z.B. in der 
Yahoo-Newsgroup "AVR-Chat" immer wieder darauf hinzuweisen, dass CKOPT 
nicht im Defalult-State bleiben darf.

Noch ein Wort zum erwähnten "Vittoz-Mode":
Eric A. Vittoz ist ein schweizer Wissenschaftler der u.a. in Richtung 
Ultra-Low-Power Quarzoszillatoren für (Armband-)Uhren forscht. Daher der 
Name für den (dummerweise bei manchen AVRs per Default eingeschalteten) 
Oszillator-Typ mit reduzietrter Schwingungsamplitude (und entsprechend 
erhöhter Störempfindlichkeit).

Mehr als ihr jemals über Quarze und Oszillatorschaltungen wissen wolltet 
findet ihr hier: 
http://gaia.ecs.csus.edu/~bist/pll_team_docs/papers.html, bei Oliver 
Betz (http://www.oliverbetz.de/quarz/quarz.htm) und im "Quarz-Kochbuch" 
von Bern Neubig, welches man mittlerweile frei im Netz findet: 
http://www.qsl.net/dk1ag/

Noch Fragen, Kienzle? ;-))

Autor: Clifford (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein Hauser ;)

Naja, 100% hab ich das noch nicht verstanden, aber ich sehe schon das da 
noch ein bissel Arbeit auf mich zukommt. Danke für die Links, die werd 
ich mir mal anschauen.

Autor: Kein Ami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich zitiere erst mal ein paar Sätze von Dave vanHorn (Englisch ist
>hoffentlich kein Problem):

Doch ist es.

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Ami wrote:
>>(Englisch ist hoffentlich kein Problem)
>
> Doch ist es.

Schade.

Dann musst Du wohl einen Übersetzer finden (oder einen der 
elektronischen verwenden, aber die taugen meiner Meinung nach eher zur 
Belustigung denn zum Verständnis).

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz zusammengefasst: Bei einem Quarz sollte man immer CKOPT setzen und 
hat keine Probleme. Das ist zumindest meine Erfahrung. Ich muss 
allerdings dazu sagen, dass ich nur normale Quarze mit 4MHz aufwärts 
nutze.

Autor: Clifford (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Belustigung ist gut ;)

Das macht Google aus dem Text
  
„Es gibt ein wenig Designarbeit, die erfordert wird, um sie recht zu 
erhalten: 

Zuerst stellt der Kristall die Kappe Werte, in ihm ist Ladenkappe
 spezielles fest. Wenn dein Kristalldosen't Ladenkappe Spezifikt. haben, 
dann ist es ein Reihe Modusfelsen, und du solltest nicht ihn in einem 
parallelen Modusstromkreis so benutzen. Es funktioniert nicht bei der 
Typenschildfrequenz seit der ähnlichkeit und Reihe Resonanzpunkte können 
nicht bei der gleichen Frequenz sein, und sie kann möglicherweise nicht in 
diesem Modus sogar oben zuverlässig beginnen. 

Zweitens vom Gesichtspunkt des Kristalles, sind die Kappen in der Reihe, 
also müssen sie fast zweimal der Wert sein, der durch den Kristall 
spezifiziert wird. Fast weil es immer irgendeine Menge der Streukapazitanz 
auf dem Brett gibt. Du kannst 5pF schätzen und dort beginnen. CL = (2*Cs) - 5 

Drittens mußt du Antrieb Energie überprüfen, ist es möglich, einen Kristall
 mit zu vielem Antrieb zu beschädigen oder sogar zu zerbrechen. Dieses 
bezieht a mit ein Maß des Ansteuerungsstroms und des Kristallwiderstands, 
sehen Leistungsblatt. Energie ist selbstverständlich I^2 * R, in dem R der 
Kristallwiderstand an der Resonanz ist. Du kannst einen kleinen 
Wertwiderstand in der Reihe mit dem Mitnehmerstift und Maßspannung über ihr
 hinzufügen. 

Viertens ist es immer eine gute Idee, eine Seitenrandüberprüfung zu tun, 
die miteinbezieht, Reihe Widerstand zwischen dem Mikroausgang Stift und dem
 Kristall hinzuzufügen. Du justierst diesen Wert aufwärts, bis der 
Oszillator gerade beginnt. Dieser Wert sollte drei mal mindestens den Wert 
ESR des Kristalles sein, und höhere Verhältnisse sind besser. 


Mit dem AVR insbesondere, gibt es eine weitere Betrachtung, die CKOPT 
Sicherung sollte programmiert werden. Der Rückstellung (unprogrammed), 
Zustand ermöglicht einem Niederleistungs„vittoz“ Modusoszillator, das 
gewöhnlich ungefähr am Umfang 1/2VCC funktioniert, und wird bedeutende 
Probleme verursachen, es sei denn der Kristall ist spezifisch bestimmt für 
diesen Modus.“ 

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann es natürlich auch kompliziert machen oder sich einfach nach dem 
Datenblatt richten:

"The CKOPT Fuse selects between two different Oscillator amplifier 
modes. When CKOPT is programmed, the Oscillator output will oscillate a 
full rail-to-rail swing on the output. This mode is suitable when 
operating in a very noisy environment or when the output from XTAL2 
drives a second clock buffer. This mode has a wide frequency range. When 
CKOPT is unprogrammed, the Oscillator has a smaller output swing. This 
reduces power consumption considerably. This mode has a limited 
frequency range and it cannot be used to drive other clock
buffers."


In deutsch:

Ohne CKOPT hat man nur nen eingeschränkten Frequenzbereich und ne höhere 
Störempfindlichkeit und kann keine zusätzlichen Lasten treiben. Dafür 
sinkt die Stromaufnahme etwas.

Oder einfach gesagt, wenns nicht wirklich auf jedes µA ankommt, einfach 
CKOPT brennen, das ist zuverlässiger.


Peter

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der teil hier ist google noch am besten gelungen:

Zweitens vom Gesichtspunkt des Kristalles, sind die Kappen in der Reihe,
also müssen sie fast zweimal der Wert sein, der durch den Kristall
spezifiziert wird. Fast weil es immer irgendeine Menge der 
Streukapazitanz
auf dem Brett gibt. Du kannst 5pF schätzen und dort beginnen. CL = 
(2*Cs) - 5

;)

Ich setze das CKOPT fuse auch immer, auf einem Brett von mir 
funktioniert der 16MHz Kristall so auch komplett ohne externe Kappen ;)
Der Streukapazitanz auf dem Brett sei dank!

Autor: Clifford (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ok, ich hab hier grad so einen Fall reparieren können. Ich hab einen 
anderen AVR so programmiert das er einfach an einem Port einen Takt 
rausgibt und hab den an XTAL1 gehalten. Dann konnte ich wieder auf den 
AVR zugreifen und CKOPT programmieren. Jetzt läuft er wieder :)

Autor: Moe -- (dosenwurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich das richtig verstanden: Für die Kondensatoren muss ich den Wert
der aufm Quarzt aufgedruckt ist verdoppelt und 5 abziehen?
In sämtlichen Schaltungsbeispielen die ich bis jetzt gesehen hab wird
mit 2x22pF Quarzen gearbeitet - auf meinem 16 Mhz Quartz steht 32pF -
ich bräuchte also theoretisch 2x59pF?

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Portpins inkl. den Leierzügen haben auch noch Kapazitäten, die du 
berücksichtigen musst. Mit 32 pF kommt es dann ganz gut hin, wenn du 
22pF nimmst. So 10pF Portpinkapazität, wenn man kurze Leiterzüge 
verwendet, ist glaube ich typisch.

Autor: MartinS. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für diesen Fred und diesen Tipp!

Habe erst Fehler in meinem Code gesucht (modifizerte 
UART-Buffer-Routinen von Peter Danegger), da es immer wieder zu 
spontanen Resets gekommen ist.

Ein Hinweis noch den ich hier nicht so klar gefunden habe - findet sich 
aber natürlich im Datenblatt:

Da einige neue AVRs keine CKOPT Fuse haben, wie Peter schreibt, ist das 
in die CKSEL Fuses gewandert -> in AVR-Studio musste ich statt "Ext. 
Crystal Oszillator" -> "Full Swing Cristal Oscillator" auswählen.

Seitdem läuft UART stabil und selbst bei 115200 ist das 
AVR-Software-Loopback fehlerfrei.

Danke!, Martin.

Autor: Gast? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darf ich euch noch ein weiteres Mysterium zur Untersuchung anbieten?

Meistens arbeite ich mit fertigen Oszillatoren, die im 14-Pin großen 
DIP-Gehäuse.
Bei einem Prototypen auf Streifenraster saß neben dem Atmega eine Mosfet 
H-Brücke, die reichlich Störungen verursacht hat.
Der Oszillator war fast direkt am Atmega angeschlossen, die Leiterbahn 
war höchstens 10-15mm lang.

Vor allem wenn der Motor blockierte, haben die Störungen den Atmega zum 
Absturz gebracht. Dadurch ist die Regelung natürlich völlig 
durcheinander geraten und der Motor schaukelte sich auf, was noch mehr 
Störungen verursachte.

Jetzt kommts: Nachdem ich die CKOPT-Fuse gesetzt hatte, war der Atmega 
wesentlich weniger anfällig für Störungen!

Wie ist das möglich? Die Firmware wurde nicht verändert, nur die Fuse 
gesetzt.
Eigentlich wird der Takt doch von außen vom Oszillator eingespeist, der 
Atmega braucht dazu keinen Schwingkreis...

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die fuse ckopt stellt doch die Stromaufnahme des Oszillators auf 
"deutlich größer" ein, sie schaltet ja die interne Hardware des 
Kontrollers um.

Das wirkt sich natürlich auch bei externem Takt aus: der auf mehr Strom 
geschaltete Oszillator wird bei ext. Osz. als Eingangsverstärker 
benutzt. Sein Eingangswiderstand ist wegen des größeren Stroms geringer 
und damit nimmt der Eingang weniger Störsignal auf.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.