mikrocontroller.net

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


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Frank L. (hermastersvoice)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim PIC liegt OSCCAL auch im RAM...

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

Autor: Aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.