Hallo zusammen, wie oft kann das OSCCAL neu beschrieben werden. Nutzt sich das auch ab, wie das EEPROM oder ist das egal?
@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
Genauer gesagt in I/O-Bereich des RAMs, in dem sämtliche Hardware-Register liegen.
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.
>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.
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).
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.
>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.
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.
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.
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.
>>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.
Henker holt das Beil, es gibt ein Haar zu spalten. Wenn der OP keine klaren Fragen stellt, kann er keine 100% sichere Antwort erwarten.
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.
>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.
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.
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.
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.
>>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!
>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.
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
Mensch Jack, putz Deine Brille und hör auf zu stänkern!
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
>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.
@ 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
>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.
>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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.