Forum: Mikrocontroller und Digitale Elektronik Wie oft kann das OSCCAL neu beschrieben werden


von Michael (Gast)


Lesenswert?

Hallo zusammen,

wie oft kann das OSCCAL neu beschrieben werden. Nutzt sich das auch ab, 
wie das EEPROM oder ist das egal?

von Falk B. (falk)


Lesenswert?

@Michael (Gast)

>wie oft kann das OSCCAL neu beschrieben werden.

Unbegrenzt.

> Nutzt sich das auch ab,

Nein.

>wie das EEPROM oder ist das egal?

OSCCAL liegt im RAM.

MFG
Falk

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Genauer gesagt in I/O-Bereich des RAMs, in dem sämtliche 
Hardware-Register liegen.

von Frank L. (hermastersvoice)


Lesenswert?

wie bitte? Im RAM? Und im Controller ist ein Akku um OSCCAL auch zu 
erhalten wenn man den Strom abschaltet? Irgendwas kann da nicht stimmen.

von jack (Gast)


Lesenswert?

>OSCCAL liegt im RAM.

Ja, aber:

Geändert wird das Calibration Byte, und das wird in einem Flash-Speicher
abgelegt. Ins OSCCAL-Register wird es dann beim Hardware-Reset
lediglich übernommen.

Mann muß also aufpassen, daß man das C.B. nicht 100mal am Tag ändert,
sonst ist vielleicht nach einem Jahr kaputt.

von Benedikt K. (benedikt)


Lesenswert?

jack wrote:

> Geändert wird das Calibration Byte,

Wie geht das?
Laut Datenblatt steht da nämlich was anderes:

The ATmega8 stores four different calibration values for the internal RC 
Oscillator. These bytes
resides in the signature row High byte of the addresses 0x0000, 0x0001, 
0x0002, and 0x0003
for 1, 2, 4, and 8 Mhz respectively. During Reset, the 1 MHz value is 
automatically loaded into
the OSCCAL Register. If other frequencies are used, the calibration 
value has to be loaded
manually, see “Oscillator Calibration Register – OSCCAL” on page 31 for 
details.

Demnach wird das vom Hersteller programmiert und kann nicht geändert 
werden (nur gelöscht wenn man beim ISP Mist baut).

von Severino R. (severino)


Lesenswert?

Benedikt K. wrote:

> The ATmega8 stores ...

Ich würde gerne wissen, mit welcher Intuition aus einer allgemein 
gefassten Frage auf einen konkreten Controller geschlossen werden kann.
Mir jedenfalls ist das nicht gelungen.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Geändert wird das Calibration Byte, und das wird in einem Flash-Speicher
>abgelegt. Ins OSCCAL-Register wird es dann beim Hardware-Reset
>lediglich übernommen.

>Mann muß also aufpassen, daß man das C.B. nicht 100mal am Tag ändert,
>sonst ist vielleicht nach einem Jahr kaputt.

Ausschlaggebend für die Frequenz des internen R/C-Oszillators ist der 
Wert, der nach dem Reset in OSCCAL steht, welches ein I/O-Register im 
RAM ist. Die Hardware des AVR übernimmt das in der Fabrik gebrannte 
Kalibrierungsbyte für 1Mhz beim Start des Controllers. Wenn man etwas 
anderes nach OSCCAL schreiben will, muß man entweder die eingebrannten 
Bytes aus der Signaturreihe auslesen und die Werte von der Firmware nach 
OSCCAL übertragen oder einfach eigene Werte einschreiben.

von jack (Gast)


Lesenswert?

Also zumindest für den 1MHz-Betrieb kann man beliebige Werte eintragen,
die dann zusammen mit den Fuses beim Programmiervorgang geschrieben
werden.

Ich hab das mal in Bascom gemacht, weil hier eine sehr komfortable
Anzeige der Fuses und des C.B. vorhanden ist.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Beim PIC liegt OSCCAL auch im RAM...

von Benedikt K. (benedikt)


Lesenswert?

Severino R. wrote:
> Benedikt K. wrote:
>
>> The ATmega8 stores ...
>
> Ich würde gerne wissen, mit welcher Intuition aus einer allgemein
> gefassten Frage auf einen konkreten Controller geschlossen werden kann.
> Mir jedenfalls ist das nicht gelungen.

Bei allen AVRs ist das so, und ich habe weder Zeit noch Lust, alle 
Zitate aus allen Datenblättern hier zu posten.

von Severino R. (severino)


Lesenswert?

Benedikt K. wrote:

> Bei allen AVRs ist das so, und ich habe weder Zeit noch Lust, alle
> Zitate aus allen Datenblättern hier zu posten.

Schon klar, ich frage mich ja auch nur, wie man aus "OSCCAL" automatisch 
auf AVR schliessen kann.
Und zu sagen, bei allen Mikrocontrollern, die ein OSCCAL besitzen, 
liege OSCCAL im RAM wäre wohl eine gewagte Behauptung, auch wenn ich das 
Gegenteil nicht beweisen kann und will.

Mit anderen Worten: Wenn eine solche Frage gestellt wird, sollte der 
Fragesteller einen konkreten Hinweis auf den Controller machen, denn 
wenn das Register im EEPROM oder im Flash liegen sollte, wäre die Anzahl 
Schreibzyklen sehr wohl controllerspezifisch.

von jack (Gast)


Lesenswert?

>>jack wrote:

>> Geändert wird das Calibration Byte,

>Wie geht das?

Ganz einfach, eben habe ich ich die 4 CBs in einen ATmega8 geschrieben
und wieder ausgelesen (Galep). Auomatisch wird halt nur der Wert für
1MHz beim Reset ins OSCCAL übernommen.

Wie man die anderen CBs ins OSCCAL kriegt, ist mir noch nicht klar.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Henker holt das Beil, es gibt ein Haar zu spalten.

Wenn der OP keine klaren Fragen stellt, kann er keine 100% sichere 
Antwort erwarten.

von Benedikt K. (benedikt)


Lesenswert?

Severino R. wrote:
> Benedikt K. wrote:
>
>> Bei allen AVRs ist das so, und ich habe weder Zeit noch Lust, alle
>> Zitate aus allen Datenblättern hier zu posten.
>
> Schon klar, ich frage mich ja auch nur, wie man aus "OSCCAL" automatisch
> auf AVR schliessen kann.

Ganz einfach: Nenn mir einen Controller (außer AVR) der OSCCAL und 
Calibration Bytes hat...

jack wrote:
>>Wie geht das?
>
> Ganz einfach, eben habe ich ich die 4 CBs in einen ATmega8 geschrieben
> und wieder ausgelesen (Galep). Auomatisch wird halt nur der Wert für
> 1MHz beim Reset ins OSCCAL übernommen.

Kann der wirklich die 4 Calibration Bytes schreiben (und nicht einen 
Wert im EEPROM oder am Ende des normalen Flahs)? Dann wie gesagt: Laut 
Datenblatt geht das nicht. Klar, es muss irgendwie gehen, denn Atmel 
beschreibst die ja auch.

von jack (Gast)


Lesenswert?

>Dann wie gesagt: Laut
>Datenblatt geht das nicht. Klar, es muss irgendwie gehen, denn Atmel
>beschreibst die ja auch.

Es geht auch "laut Datenblatt". Beim ATMega8 steht es auf S.225.

von Severino R. (severino)


Lesenswert?

jack wrote:

> Wie man die anderen CBs ins OSCCAL kriegt, ist mir noch nicht klar.

Aus dem Datenbuch ATmega8:

If the internal RC is used at other frequencies, the calibration values 
must be loaded manually. This can be done by first reading the signature 
row by a programmer, and then store the calibration values in the Flash 
or EEPROM. Then the value can be read by software and loaded into the 
OSCCAL Register.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Man kann keines der Kalibrierungs-Bytes beim AVR neu schreiben. Man kann 
es per AVRStudio4 zum Beispiel auf eine beliebige Flash- oder 
EEPROM-Adresse schreiben, auf die die Firmware später zugreift, nicht 
aber in die Signatur-Reihe. Die ist read-only.

von Severino R. (severino)


Lesenswert?

jack wrote:
>>Dann wie gesagt: Laut
>>Datenblatt geht das nicht. Klar, es muss irgendwie gehen, denn Atmel
>>beschreibst die ja auch.
>
> Es geht auch "laut Datenblatt". Beim ATMega8 steht es auf S.225.

Dort steht aber nur, dass man es manuell machen muss.
Und der Benutzer kann nicht das Calibration Byte schreiben, sondern muss 
die Werte vom CB ins Flash oder EEPROM kopieren und den passenden Wert 
dann programmgesteuert auslesen und ins OSCCAL schreiben.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>>Kann der wirklich die 4 Calibration Bytes schreiben (und nicht einen
>>Wert im EEPROM oder am Ende des normalen Flahs)?
>>Dann wie gesagt: Laut
>>Datenblatt geht das nicht. Klar, es muss irgendwie gehen, denn Atmel
>>beschreibst die ja auch.

>Es geht auch "laut Datenblatt". Beim ATMega8 steht es auf S.225.

Unsinn. Lies nochmal richtig!

>Dort steht aber nur, dass man es manuell machen muss.
>Und der Benutzer kann nicht das Calibration Byte schreiben, sondern muss
>die Werte vom CB ins Flash oder EEPROM kopieren und den passenden Wert
>dann programmgesteuert auslesen und ins OSCCAL schreiben.

Genau!

von jack (Gast)


Lesenswert?

>Man kann keines der Kalibrierungs-Bytes beim AVR neu schreiben. Man kann
>es per AVRStudio4 zum Beispiel auf eine beliebige Flash- oder
>EEPROM-Adresse schreiben, auf die die Firmware später zugreift, nicht
>aber in die Signatur-Reihe.

Unsinn.

>Die ist read-only.

Noch mehr Unsinn.

von Michael (Gast)


Lesenswert?

Hallo,

stimmt den Controllertyp habe ich vergessen. Ich meinte natürlich einen 
AVR. Es geht darum ein Datum im AVR mit einem Datum in einem Timekeeper 
zu vergleichen und je nach Abweichung den OSCCAL Wert zu anzugleichen. 
Der Vergleich wird jede Stunde gemacht. Aber wenn das OSCCAL im RAM 
liegt sollte es ja kein Problem sein.

Vielen Dank schonmal für die vielen Antworten

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Mensch Jack, putz Deine Brille und hör auf zu stänkern!

von Aha (Gast)


Lesenswert?

Was gibt's an diesem Osccal neu zu schreiben ? Falls man es denn 
wirklich besser machen will, so muss man mit einem Quarz synchronisiren. 
Ich hab eine Synchronisation in 60 Byte Code geschrieben, die den 
internen Oszillator auf einen 32kHz Quarz am Timer2 synchronisiert. Das 
wird beim Powerup durchgefuehrt. Der interne RC laeuft dann genau auf 
7.3728MHz

von jack (Gast)


Lesenswert?

>Mensch Jack, putz Deine Brille und hör auf zu stänkern!

Mein Gott, stell Dich nicht dümmer als Du bist,
probiers doch einfach aus.

von Falk B. (falk)


Lesenswert?

@ Aha (Gast)

>internen Oszillator auf einen 32kHz Quarz am Timer2 synchronisiert. Das
>wird beim Powerup durchgefuehrt. Der interne RC laeuft dann genau auf
>7.3728MHz

Das glaub ich mal nicht. Zumindest ist die Genauigkeit nicht zu halten. 
Diese Kalibrierung muss man vor allem bei wechselnder Temperatur 
zyklisch machen. So alle 1 Minute oder ähnlich. Und selbst wenn die 
Temperatur konstant ist, steht die Freqeunz eines RC-Oszillators nicht 
auf 0,01% genau über der Zeit, das schwankt schon im 0,1..0,5% Bereich.

MfG
Falk

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Mein Gott, stell Dich nicht dümmer als Du bist,
>probiers doch einfach aus.

Mach´s mir vor, dann glaube ich Dir, daß man die Bytes in der Signatur 
ändern kann.

von jack (Gast)


Lesenswert?

>Mach´s mir vor, dann glaube ich Dir, daß man die Bytes in der Signatur
>ändern kann.

Wenn Du einen Galep hättest, wärs ganz leicht, ansonsten muß ich mir
einen sicheren Beweis überlegen ;-)

von Benedikt K. (benedikt)


Lesenswert?

jack wrote:

> Wenn Du einen Galep hättest, wärs ganz leicht, ansonsten muß ich mir
> einen sicheren Beweis überlegen ;-)

Steht dazu was im Handbuch, (das vielleicht sogar online verfügbar ist)?
Ansonsten hätte ich gerne die Werte 0x55, 0xAA, 0x12 und 0x34 in den 
Calibration Bytes. Wenn du davon ein Screenshot lieferst (am besten von 
einem Standard Tool wie AVR Studio oder Ponyprog), das diese Werte der 
CB anzeigt, dann glaube ich das.

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.