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.
Ist eher unwahrscheinlich, dass es an den Atmels liegt. Kenne solche Probleme nicht. Würde da eher in deinem Umfeld Fehlersuche betreiben.
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
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? ;-))
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.
>Ich zitiere erst mal ein paar Sätze von Dave vanHorn (Englisch ist >hoffentlich kein Problem): Doch ist es.
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).
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.
Belustigung ist gut ;) Das macht Google aus dem Text
1 | |
2 | „Es gibt ein wenig Designarbeit, die erfordert wird, um sie recht zu |
3 | erhalten: |
4 | |
5 | Zuerst stellt der Kristall die Kappe Werte, in ihm ist Ladenkappe |
6 | spezielles fest. Wenn dein Kristalldosen't Ladenkappe Spezifikt. haben, |
7 | dann ist es ein Reihe Modusfelsen, und du solltest nicht ihn in einem |
8 | parallelen Modusstromkreis so benutzen. Es funktioniert nicht bei der |
9 | Typenschildfrequenz seit der ähnlichkeit und Reihe Resonanzpunkte können |
10 | nicht bei der gleichen Frequenz sein, und sie kann möglicherweise nicht in |
11 | diesem Modus sogar oben zuverlässig beginnen. |
12 | |
13 | Zweitens vom Gesichtspunkt des Kristalles, sind die Kappen in der Reihe, |
14 | also müssen sie fast zweimal der Wert sein, der durch den Kristall |
15 | spezifiziert wird. Fast weil es immer irgendeine Menge der Streukapazitanz |
16 | auf dem Brett gibt. Du kannst 5pF schätzen und dort beginnen. CL = (2*Cs) - 5 |
17 | |
18 | Drittens mußt du Antrieb Energie überprüfen, ist es möglich, einen Kristall |
19 | mit zu vielem Antrieb zu beschädigen oder sogar zu zerbrechen. Dieses |
20 | bezieht a mit ein Maß des Ansteuerungsstroms und des Kristallwiderstands, |
21 | sehen Leistungsblatt. Energie ist selbstverständlich I^2 * R, in dem R der |
22 | Kristallwiderstand an der Resonanz ist. Du kannst einen kleinen |
23 | Wertwiderstand in der Reihe mit dem Mitnehmerstift und Maßspannung über ihr |
24 | hinzufügen. |
25 | |
26 | Viertens ist es immer eine gute Idee, eine Seitenrandüberprüfung zu tun, |
27 | die miteinbezieht, Reihe Widerstand zwischen dem Mikroausgang Stift und dem |
28 | Kristall hinzuzufügen. Du justierst diesen Wert aufwärts, bis der |
29 | Oszillator gerade beginnt. Dieser Wert sollte drei mal mindestens den Wert |
30 | ESR des Kristalles sein, und höhere Verhältnisse sind besser. |
31 | |
32 | |
33 | Mit dem AVR insbesondere, gibt es eine weitere Betrachtung, die CKOPT |
34 | Sicherung sollte programmiert werden. Der Rückstellung (unprogrammed), |
35 | Zustand ermöglicht einem Niederleistungs„vittoz“ Modusoszillator, das |
36 | gewöhnlich ungefähr am Umfang 1/2VCC funktioniert, und wird bedeutende |
37 | Probleme verursachen, es sei denn der Kristall ist spezifisch bestimmt für |
38 | diesen Modus.“ |
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
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!
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 :)
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?
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.
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.