Forum: Mikrocontroller und Digitale Elektronik errechen von OSCCAL wert?


von Rene S. (gigastulle)


Lesenswert?

Hallo Zusammen ich hab hier schon gestöbert aber so richtig hat mir das 
nicht geholfen :(

Ich benutze einen Atiny15 und würde gerne die Taktfrequenz anheben, da 
er zur zeit nicht mit den angegeben 1,6Mhz läuft sondern nur mit 
1,12Mhz.

Aus dem Datenblatt habe ich ja entnommen das das mit dem OSCCAL-register 
möglich ist. wenn ich das datenblat richtig gelesen habe erhöht sich der 
derzeitige takt (in dem fall die 1,12Mhz) um je ein 1% wenn ich das 
OSCCAL-register um 1 erhöhe...IST DAS RICHTIG ???

Ich habe mir einen wert von 42 errechnet der in dem falle nötig wäre um 
den Prozessor auf die 1,6MHz zu bekommen aber nüscht is hab gerade ma 
1,3Mhz oder so

DESHALB MEINE FRAGEN !!!
- Wie berechnet man den wert der ins OSCCAL mus ???
-Gibt es eine bestimmte stelle im Program wo das gemacht werden muss ???
-Stimmt es das man den wert nich zu hoch wählen sollte, das das den 
Prozessor beschädigen könnte ???

Vielen dank schon ma im Vorraus
MFG Rene

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Erstens:
Falsches Forum, hat in der Codesammlung nix zu suchen.

Zweitens:
Im Datenblatt ist eine Kurve angegeben wie sich der Takt mit dem OSCCAL 
Wert verändert. diese Kurve ist glaub ich exponentieller Natur.

von Oops (Gast)


Lesenswert?

Hi,

>um je ein 1% wenn ich das OSCCAL-register um 1 erhöhe
ist mir nicht klar wo Du das her hast. Das Datenblatt sagt nur: "the 
system clock rate can be tuned with less than 1% steps of the nominal 
clock."
Also weniger als 1 Prozent.

Wenn Du genau liest, ist eigentlich nirgendwo ein definitiver Wert 
angegeben.

>das das den Prozessor beschädigen könnte
Da weiss ich auch nicht wo Du das her hast. Im Datenblatt steht 
sinngemäß nur das es zu Fehlfunktionen "Malfunction" aber nicht zu 
Beschädigungen "Damage" kommen kann.

Wenn also 42 zu wenig ist, dann probier es einfach mal mit einem höheren 
Wert.
Aus der Frequenz bei 42 kannst Du Dir ja die tatsächliche Auflösung 
ausrechnen. Ist die 42 eigentlich dezimal oder hex? Denk, dran das macht 
einen Unterschied.

Gruss
Oops

von Oops (Gast)


Lesenswert?

Hallo Hauke,

nein, nicht im Tiny15 Datenblatt.
Aber sehr wahrscheinlich nicht-linear.

Gruss
Oops

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Hmm ok ich bin jetzt von den Controllern ausgegangen die ich sonst immer 
nutze und hatte das im Kopf das da nen OSCCAL vs. FREQUENCY Diagramm 
drin war, hab jetzt nicht noch nmal explizit in das tiny15 Datenblatt 
geguckt.

von Rene S. (gigastulle)


Lesenswert?

Die 42 ist Dez also 2C in Hex :D
Also wie es aussieht, mus ich rumprobieren da es nicht möglich ist den 
wert zu errechnen den die angabe von unter 1%....läst ja viel speilraum

Bleibt mir woll nur Probiren Probiren Probieren und Ozzi ranhängen und 
so lange dran rumstellen bis did passt :D

Vielen Dank für eure schnelle Hilfe !!!

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Bei Atmel auf der Homepage gibts außerdem irgendwo ne Application Note, 
wie man den internen Takt per OSCCAL auf einen externen Takt 
synchronisieren kann.

von Oops (Gast)


Lesenswert?

@  Rene:

>Probieren Probieren Probieren

Nein. Du musst nicht endlos rumprobieren.
Stichwort: Binäre Suche (Google).

Bei 8 Bit hast Du spätestens nach 8 mal probieren die Lösung.

Gruss
Oops

von Benedikt K. (benedikt)


Lesenswert?

Oops wrote:

> Nein. Du musst nicht endlos rumprobieren.
> Stichwort: Binäre Suche (Google).
>
> Bei 8 Bit hast Du spätestens nach 8 mal probieren die Lösung.

Nicht ganz. Bei etlichen AVRs ist der Oszillator so spezifziert, dass 
ein höherer Wert nicht unbedingt eine höhere Frequenz liefert. Nur jeder 
um 2 höhere Wert muss laut Spec eine höhere Frequenz liefern. Um den 
Zielbereich herum muss mal also etwas ausprobieren.

von Oops (Gast)


Lesenswert?

@Benedikt:

Nur damit ich das letzte Wort habe ;-):

>Nur jeder um 2 höhere Wert muss laut Spec eine höhere Frequenz liefern.
Nicht beim Tiny15. Oder wo steht das?

Ansonsten wären es eben 7 Schritte binärer Suche plus einmal 
ausprobieren :-)

Ich hoffe Du nimmst das so witzig wie es gemeint ist, Bendedikt.

Gruss
Oops

von Benedikt K. (benedikt)


Lesenswert?

Oops wrote:

>>Nur jeder um 2 höhere Wert muss laut Spec eine höhere Frequenz liefern.
> Nicht beim Tiny15. Oder wo steht das?

Das steht in irgendeiner AppNote. Da wird das erwähnt, dass man nicht 
nur +/-1 machen soll, sondern auch den Umkreis ein kleinwenig absuchen 
soll.

von Rene S. (gigastulle)


Lesenswert?

wie bei acht bit nur 8 mal probieren ???
Ich dachte ich kann das register von 0 bis 255 beliebig beschreiben ???
oder darf ich immer nur eine 1 schreiben und mus die dann im register 
hin und her schieben ??? man jetzt bin ich aber verwirt

von Benedikt K. (benedikt)


Lesenswert?

Rene Schir wrote:
> wie bei acht bit nur 8 mal probieren ???

Ja, indem man anfängt und z.B. den Wert 128 reinschreibt. Dann prüft man 
ob die Frequenz zu hoch oder zu niedrig ist.
Wenn zu hoch, dann löscht man die 128 wieder. Im nächsten Schritt 
schreibt man 64 zusätzlich rein (also 64 oder 192 je nach vorherigem 
Ergebnis). Man prüft wieder usw.
So macht das auch der ADC.

> Ich dachte ich kann das register von 0 bis 255 beliebig beschreiben ???

Ja, kann man auch machen, dauert nur länger.

Allerdings ist die schnelle Version eigentlich nicht zulässig. Irgendwo 
steht, dass man die Werte nicht sprunghaft ändern sollte, auch wenn ich 
damit bisher noch nie Probleme hatte.

von Rene S. (gigastulle)


Lesenswert?

Ja gut klingt lögisch :D Danke werd did ma Probieren :D

von Oops (Gast)


Lesenswert?

@Benedikt

>...wenn ich damit bisher noch nie Probleme hatte.
Ich eben auch nicht. Das mit dem rumprobieren um ein paar Schritte links 
und recht erinnere ich allerdings auch.

Naja, haben wir halt beide ein bischen recht. ;-)

Gruss
Oops

von Oops (Gast)


Lesenswert?

Werd's mir doch nicht mit dem RFM Spezi verderben.

Gruss
Oops

von Rene S. (gigastulle)


Lesenswert?

Ok wenn ihr beide ein bischen recht habt dann danke ich euch beiden ein 
bischen LOL

von Oops (Gast)


Lesenswert?

@Rene

Pass übrigens mit der Temperatur auf. Die hat einen recht starken 
Einfluss auf die Oszillatorfrequenz.
Die von Hauke angeregte Synchronisation mit einem externen Takt, sei es 
auch die UART-Komminkation musste ich schon öfter anwenden.
Die Frequenz ist, glaube ich 25°C spezifiziert. Da Du wahrscheinlich 
etwa 21°C bei Dir zu Hause hast, ist die "Abweichung" die Du beobachtest 
normal.

Gruss
Oops

von Oops (Gast)


Lesenswert?

Oops:

grosser Einfluß

Kommunikation

Frequenz ist, glaube ich BEI 25°C spezifiziert

Gruss
Oops

von rene (Gast)


Lesenswert?

Ich hab auch mal was gemacht :
http://www.ibrtses.com/embedded/avrosccal.html

Nur so nebenbei. Man muss jeden Einzelnen AVR kalibieren, kann den Wert 
nicht auf das naechste Exemplar uebertragen.

von Oops (Gast)


Lesenswert?

@Rene:

>Ich hab auch mal was gemacht :
Wie, du hast was gemacht? Bist D R.Tschaggelar?

>Nur so nebenbei. Man muss jeden Einzelnen AVR kalibieren, kann den Wert
>nicht auf das naechste Exemplar uebertragen.
Ist bekannt. Stellen wir hier die Fragen oder Du? ;-)

Gruss
Oops

von Peter D. (peda)


Lesenswert?

Wenn der ATtiny jungfräulich ist, kann man das Kalibrationsbyte aus dem 
letzten Flash-Wort auslesen und nach OSCCAL schreiben, dann sollten die 
1,6MHz ungefähr stimmen.
Das wurde extra für die Serienproduktion so vorgesehen.

Wenn man ihn aber schon gelöscht hat, muß man es per Programmer 
auslesen.

Die neueren AVRs schreiben es aber automatisch beim Reset rein, da muß 
man garnichts machen.


Peter

von Hannes L. (hannes)


Lesenswert?

Warum nehmt Ihr nicht einfach den Calibrationswert, den der Hersteller 
für jedes Exemplar ermittelt und im H-Byte der Adresse 0 des 
Signature-Bereiches dauerhaft abgelegt hat?

...

von Oops (Gast)


Lesenswert?

Geht leider nicht. CAL-Byte im Flash ist für 25°C bei 5V.

Gruss
Oops

von Peter D. (peda)


Lesenswert?

Oops wrote:
> Geht leider nicht. CAL-Byte im Flash ist für 25°C bei 5V.

Oha, ein Glaskugelbesitzer.

Rene hat ja nicht gesagt, daß er ihn nicht bei 5V betreiben will.


Kannst Du noch andere Sachen hellsehen, ich hätte da Interesse.


Peter

von Oops (Gast)


Lesenswert?

@Peter

Er hat auch nicht gesagt, das er ihn bei 25°C betreiben will.
Habe noch ne zweite Glaskugel.

Oh, muss eben noch Lotto abgeben.

Gruss
Oops

von Rene S. (gigastulle)


Lesenswert?

Hannes Lux wrote:
> Warum nehmt Ihr nicht einfach den Calibrationswert, den der Hersteller
> für jedes Exemplar ermittelt und im H-Byte der Adresse 0 des
> Signature-Bereiches dauerhaft abgelegt hat?
>
> ...

Und wie geht das ??? verstehe irgend wie nur Bahnhof :(

von Hannes L. (hannes)


Lesenswert?


von H. G. (ledi)


Lesenswert?

Hallo Peter!

Du schreibst:
>>Wenn der ATtiny jungfräulich ist, kann man das Kalibrationsbyte aus dem
letzten Flash-Wort auslesen und nach OSCCAL schreiben, dann sollten die
1,6MHz ungefähr stimmen.
Das wurde extra für die Serienproduktion so vorgesehen.<<


Ich verwende einen AT90PWM316 und betreibe mehrere RGB-Leds, die ich per 
Funk (2,4GHz Funkmodul) alle 6 Sekunden synchronisiere.

Mein Problem ist nun, das die internen Oscillatoren nicht genau 
schwingen (also zwischen 7,9 und 8,1 MHz).
Dadurch laufen auch die LEDs nicht synchron.

Kann ich den Controller mit dem Kalibrationsbyte kalibrieren?
Und wie geht das?

von Karl H. (kbuchegg)


Lesenswert?

H. G. schrieb:

> Kann ich den Controller mit dem Kalibrationsbyte kalibrieren?
> Und wie geht das?

Einfach das OSCCAL Register beschreiben. So wie es im Datenblatt steht.
Den Wert musst du durch Versuch und Irrtum bestimmen.

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.