mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie OSCCAL einstellen?


Autor: Felix Jankowski (feejai)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie muss ich OSCCAL einstellen, dass mein ATMega 8 mit ungefähr 12 Mhz
läuft, wenn die Fuses auf 8 Mhz interner Oszillator eingestellt sind?

Ich wollt das folgendermaßen machen:

  ldi  temp0,235
  out  OSCCAL,temp0

Danke für eure Hilfe,

Felix

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann man so nicht genau sagen. OSCCAL ist dazu da, die Frequenz
genau einzustellen, nicht um die Frequenz weit von der Grundfrequenz
(8MHz) zu entfernen.
Nichtsdestotrotz: Meine Atmegas hier schaffen bei OSCCAL = 255 ungefähr
14 Mhz, der eine mehr, der andere weniger. Was 12MHz sind? Ausprobieren!

Autor: Klaus2m5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Felix,

warum nimmst Du nicht gleich 255? Ich würde dann allerdings bei der
ersten Inbetriebnahme Deines Projekts laut pfeifend den Raum
verlassen.

Wie der Name des OSCCAL (Oscilator Calibration) schon dumpf erahnen
lässt, muß man die tatsächlich erzielte Frequenz messtechnisch
ermitteln (oder die Vorgabe aus den signature bytes übernehmen). Von
einer Übertaktung kann ich Dir nur dringend abraten, da Flash und
EEPROM sonst ungeahnte Möglichkeiten der Interpretation Deines
Programmes eröffnen.

Gruß, Klaus

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie muss ich OSCCAL einstellen, dass mein ATMega 8 mit ungefähr 12
> Mhz läuft, wenn die Fuses auf 8 Mhz interner Oszillator
> eingestellt sind?

Das hängt von der Betriebsspannung, der Temperatur und dem
individuellen Chip ab. Das Register ist ja dazu da, um den Oszillator
zu kalibrieren, weil er so große Toleranzen hat. Deshalb gibt's
natürlich keinen festen Wert, mit dem man 12 Mhz errreicht.

@Klaus2m5:

Von was für einer ÜBertaktung sprichst du? 12 Mhz ist noch deutlich
unterhalb der spezifizierten Maximalfrequenz des Atmega8. Selbst bei
einem OSCCAL-Wert von 255 ist es laut Datenblatt nicht möglich, den
Prozessor zu übertakten.

Autor: Felix Jankowski (feejai)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauch 12 Mhz für den USB-Joystick von IGOR. Deswegen will ich ihn
auf 12 Mhz einstellen, weil ich momentan kein quarz habe. Wie kann man
sowas messen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du keinen Messpark hast, musst du improvisieren.
zb. Mach dir ein Blinklicht, mit einer bekannten
Sollfrequenz bei 12 Mhz, zb. 1 Sekunde. (Timerwert
bzw. Prescaler darfst du bestimmen - Datenblatt).
Dann nimmst du eine Uhr und zählst die Anzahl der Blinker
in 1 Minute. Das sollten 60 sein. Zählst du 58, dann schwingt
der RC-Oszillator zu langsam, erhöhe OSCCAL. Zählst du 62
dann schwingt er zu schnell, verringere OSCCAL. usw. usw.

Autor: Klaus2m5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf

Aus dem Datenblatt (ATMEGA 8 complete) Seite 31 (OSCCAL):

The calibrated Oscillator is used to time EEPROM and Flash access. If
EEPROM or Flash is written, do not calibrate to more than 10% above
the nominal frequency. Otherwise, the EEPROM or Flash write may fail.

Inzwischen haben wir ja gehört, das es für eine USB Emulation sein
soll. Wenn schon der interne Oszillator nicht gut genug für 9600 Baud
RS232 ist, wie gut wird er dann mit 1,5Mb USB klar kommen???

@Felix

nimm bitte einen Quarz, ohne den wird das nix!!

Autor: Felix Jankowski (feejai)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,ich habs mit dem UART getestet. Bei 57600 Baud funktioniert er
korrekt bei 235-244. Aber ab und zu sind unerklärlicherweise Fehler
drin. Mit dem USB geht es noch nicht. Wie kann man das genauer messen?

Autor: Christoph Wagner (christoph)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finger weg von der Idee !!!

Für eine USB-Lösung via Firmware (wie es das IGOR-Teil ist) muss man
unbedingt einen Quarz verwenden. Das USB-Timing ist noch wesentlich
kritischer als das der UART. Da würden bei einer kalibrierten
Geschichte per OSCCAL schon bei einem Grad eine Abweichung eintreten,
die man so nicht haben will. Notlösung : nehme einen Quarz mit 13,5 ;
15 ; 16,5 oder 18 MHz und fülle an den Timing-kritischen Sachen
ausreichend nop-Instruktionen auf. Das sollte dann auch verwenden. Auf
alle Fälle braucht USB eine exakte Frequenz (durch einen Quarz). Ein
Quarz mit weniger Frequenz geht nicht. 12 MHz ist das Minimum.

Autor: Felix Jankowski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Danke euch allen!

Mit Quarz geht es nun einwandfrei. Das mit dem internen Oszillator war
echt ne Schnapsidee. Der schwankt laufend in der Frequenz. Für UART
reichts aber. Falls es noch jemand braucht: Wenn man OSCCAL auf 240
einstellt, läuftm mein Mega8 mit ca. 12 Mhz.

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.