Einrichten einer externen Taktquelle auf einem ATmega8

Ich versuche, V-USB auf meinem ATmega8-16PU ( Datenblatt ) einzurichten , und könnte etwas Hilfe beim Anschließen einer externen Kristalluhrquelle gebrauchen. Ich habe versucht, das Datenblatt nach bestem Wissen und Gewissen zu verstehen, und habe einige Schlussfolgerungen gezogen, die ich schätzen würde, wenn jemand sie überprüfen und kritisieren könnte. Als Referenz verwende ich einen 16-MHz- oder 20-MHz-Quarz, zwischen denen ich auch Hilfe brauche.

Hier ist mein bisheriger Plan, basierend auf meinem Verständnis:

  • Befestigen Sie meinen externen Kristall (zwei Pins eins) an den XTAL1- und XTAL2-Pins des IC
  • Verwenden Sie zwei 22pF-Keramikkondensatoren
  • Basierend auf Tabelle 2 auf Seite 26 muss CKSEL3..0 1111-1010 sein
  • CKOPT wird unprogrammiert sein (basierend auf der Beschreibung oben auf Seite 27), weil ich keinen großen Ausgangshub benötige, ich treibe nichts anderes mit dem Quarz an
  • CKSEL3..1 muss 101, 110 oder 111 sein, weil mein Quarz größer als 1 MHz ist
  • CKSEL0 muss auf 1 gesetzt werden und SUT1..0 auf 11 (basierend auf Tabelle 5 auf Seite 28), weil ich die maximale Startzeit zulassen möchte, um auf Nummer sicher zu gehen

Richtig, also habe ich mir diese Notizen gemacht und weiß nicht, wohin ich von hier aus gehen soll. Zum Beispiel:

  1. Was sind all diese Dinge (CKSEL3..1, CKSEL3..0 usw.) und woher weiß ich, welchen Wert ich für CKSEL3..0 und CKSEL3..1 wählen soll, wenn ich eine Reihe von Optionen zur Auswahl habe? ?
  2. Was muss ich ändern und wie setze ich die Fuse-Bits, um diese Einstellungen zu aktivieren? Ich benutze Avrdude um meinen Mikrocontroller zu programmieren.
  3. Muss ich einen Watchdog verwenden? Wenn ich das tue, scheint es keine Einstellungen zu geben, um es zu aktivieren oder zu deaktivieren (unten auf Seite 26), oder ist es immer aktiviert?

Danke an alle. Tut mir leid wegen all dieser Fragen, ich bin sehr neu in all dem, aber ich bin entschlossen, es zu lernen.

Antworten (1)

CKSEL steht typischerweise für Taktauswahl. Es gibt mehrere Auswahlmöglichkeiten, die über einen internen Multiplexer ausgewählt werden können – einige zum Testen, andere für alternative Quellen.

Da Sie ein xtal verwenden, können Sie den Code angeben, um diese Option auszuwählen: die sich in den ersten 2 Zeilen von S. 26 befinden. Sie können die 3 unteren Zeilen von Tabelle 4 für einen Kristall verwenden. Jeder ist wie gezeigt auf einen bestimmten Frequenzbereich abgestimmt. Wenn Ihre Quarzreferenz so ausgelegt ist, dass sie um 4 MHz oszilliert, würden Sie die Sel-Bits auf Code setzen, z. B. 111. 16 MHz funktioniert nur mit niedrigem CKOPT unter Verwendung eines der drei Auswahlcodes in Zeile 4 der Tabelle.

Externe Kappen sollten gemäß derselben Tabelle 12-22 pF und nicht 22 uF für das xtal betragen. Es gibt auch nur eine maximale Oszillatorgrenze von 16 MHz an, daher würde ich kein 20-MHz-xtal verwenden.

Sieht für mich so aus, als wäre die Watchdog-Timer-Funktionalität intern.

*Anmerkung: xtal und crystal werden hier synonym verwendet.

Danke für die Antwort. Leider beantwortet es einige meiner Fragen nicht. Zuerst habe ich die 22uF auf pF bearbeitet, war ein Fehler, sorry. Zweitens steht in der ersten Zeile auf Seite 26, dass ich CKSEL3..0 als 1111 - 1010 wählen kann. Was bedeutet das, warum gibt es mir einen Bereich? Drittens, woher wissen Sie, dass eine Frequenz um 4 MHz 111 entspricht? Viertens scheint es, dass die 16-MHz-Grenze nur für Resonatoren gilt - ist das richtig? Wo steht, dass für externe Quarze eine 16-MHz-Grenze gilt? Was mache ich als nächstes, nachdem ich meine Einstellungen ausgewählt habe? Nochmals vielen Dank, sehr geschätzt.
CKSEL hat 4 Bits, die Sie über ff-Bits auswählen können. Der Bereich dieser 4 Bits ist wie gezeigt: 1111-1010 für Ihre App (siehe Zeile 1 Tabelle 2), das Bit oder MSB ganz links ist für Sie immer 1, da Sie nur die richtigen 3 für Ihren Frequenzbereich auswählen müssen ( in Tabelle 4 erläutert). Da Sie gesagt haben, dass Sie >= 1 MHz und CKOPT = 0 verwenden werden, sollte jeder der Bitcodes 101.110.111 für Ihre App geeignet sein. Sehen Sie sich Tabelle 4, Seite 27, genau an. Hinweis: CKSEL 3..1=111 entspricht dem Bereich 3,0-8 MHz. Sie werden diejenige verwenden, die 16 MHz entsprechen soll, die direkt darunter liegt, wenn ich Sie verstanden habe.
Wie im Datenblatt erwähnt, bietet es Ihnen einige interne Schaltungen, um die von Ihnen bereitgestellte externe Frequenz und Reichweite zu optimieren. Diesen Wert teilen Sie ihm über die Bits mit. Wenn Sie dachten, das war nützlich, können Sie mir einen Stoß geben, da ich neu hier bin.
Danke, scheint alles super geklappt zu haben. FWIW, hier ist der avrdude-Befehl, den ich verwendet habe: avrdude -c usbasp -p m8 -U lfuse:w:0b11111111:m -U hfuse:w:0b11001001:m... kann für zukünftige Leser dieser Frage verwendet werden. Zur Verdeutlichung: Dieser Befehl wurde verwendet, um mit dem USBasp-Programmierer einen externen 16-MHz-Quarz auf meinem ATMega8 einzurichten.