Forum: Mikrocontroller und Digitale Elektronik Wie OSCCAL einstellen?


von Felix J. (feejai)


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

von Jan M. (mueschel)


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!

von Klaus2m5 (Gast)


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

von Rolf Magnus (Gast)


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.

von Felix J. (feejai)


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?

von Karl H. (kbuchegg)


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.

von Klaus2m5 (Gast)


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!!

von Felix J. (feejai)


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?

von Christoph W. (christoph)


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.

von Felix Jankowski (Gast)


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.

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.