Hallo! Ich möchte meinen Atmega mit 8Mhz internem RC-Oszillator betreiben. Der hat aber nach dem Reset in OSCCAL den Wert für 1Mhz. Jetzt müsste ich dazu das "Signature High Byte" der Adresse 0x0003 auslesen. Wie komme ich an diese Werte (mit AVRDude)? Sind das die High8-bit der Device-Signatur (aber die Signatur ist ja nur 0x00-0x02)? Danke!
OSCCAL ist die falsche Baustelle. Sieh mal im Datenblatt vom ATmega8 nach bei "Calibrated Internal RC Oscillator" (Seite 30). Tabelle 9 listet die CKSEL3..0-Werte.
Hallo! Ist mir schon klar, wie ich die 8Mhz einstelle. Ich wollte nur den zu den 8Mhz passenden Kalibrierungwert auslesen und in OSCCAL schreiben. Ich wollte das einfach mal interessehalber ausprobieren. Sonst nehm ich eh einen Quarz, wenn der Takt genau sein soll.
Den Wert musst du selbst bestimmen und setzen, siehe hier (http://www.atmel.com/Images/doc2555.pdf).
Dopplereffekt schrieb: > Den Wert musst du selbst bestimmen und setzen, siehe hier Ja eben, deshalb will er ja wissen, wie man das Calibrationsbyte für 8MHz per AVRDUDE aus dem High-Byte der Adresse 3 des Signature-Bereichs ausliest. Mit AVR-Studio4 ist das kein Akt, mit meinem Eigenbau-Brenner war das auch kein Akt, denn die Befehlssequenz steht haargenau im Datenblatt des Mega8. Wie man das per Dude macht, kann ich Dir leider nicht sagen, ich benutze den Dude nicht. Vielleicht steht's ja in der Doku... ...
Hannes Lux schrieb: > Ja eben, deshalb will er ja wissen, wie man das Calibrationsbyte für > 8MHz per AVRDUDE aus dem High-Byte der Adresse 3 des Signature-Bereichs > ausliest. "man avrdude" fördert das hier zutage:
1 | -U memtype:op:filename[:format] |
2 | Perform a memory operation as indicated. The memtype field specifies the memory type to operate |
3 | on. The available memory types are device-dependent, the actual configuration can be viewed with |
4 | the part command in terminal mode. Typically, a device's memory configuration at least contains |
5 | the memory types flash and eeprom. All memory types currently known are: |
6 | calibration One or more bytes of RC oscillator calibration data. |
7 | eeprom The EEPROM of the device. |
8 | efuse The extended fuse byte. |
9 | flash The flash ROM of the device. |
10 | fuse The fuse byte in devices that have only a single fuse byte. |
11 | hfuse The high fuse byte. |
12 | lfuse The low fuse byte. |
13 | lock The lock byte. |
14 | signature The three device signature bytes (device ID). |
15 | fuseN The fuse bytes of ATxmega devices, N is an integer number for each fuse supported by |
16 | the device. |
17 | application The application flash area of ATxmega devices. |
18 | apptable The application table flash area of ATxmega devices. |
19 | boot The boot flash area of ATxmega devices. |
20 | prodsig The production signature (calibration) area of ATxmega devices. |
21 | usersig The user signature area of ATxmega devices. |
Es muss also "prodsig" als "memtype" angegeben werden. Auf diese Weise liest man den Kalibrierungswert aus und schreibt ihn (ebenfalls mit AVRDUDE) ins EEPROM. Das Programm auf dem Mikrocontroller kann sich dann den Wert aus dem EEPROM holen und ihn ins Register OSCCAL schreiben. Sinnigerweise sollte man das Fusebit EESAVE auf 0 setzen, damit der EEPROM-Inhalt beim späteren Neuschreiben des Flashspeichers nicht verloren geht. Alternativ kann man den Kalibrierungswert natürlich auch gleich als Konstante ins Programm schreiben. Das muss man aber für jeden Chip einzeln machen, wenn das Programm auf mehreren Mikrocontrollern mit kalibriertem 8-MHz-Oszillator laufen soll. Ein dritter Weg wäre, den Mikrocontroller per Programm sich selbst kalibrieren zu lassen. Dazu muss man ihm einmal eine konstante Zeitquelle per I/O-Pin zur Verfügung stellen.
Markus W. schrieb: > Es muss also "prodsig" als "memtype" angegeben werden. Es geht um einen ATmega8, da ist es "calibration", nicht "prodsig".
Bei den (neueren) ATMEGAS, die ich kenne, wird der von der Factory vorkalibrierte Wert bei jedem Reset ins OSCAL geschrieben. OSCAL läßt sich per in-Befehl auslesen. Man kann jederzeit, eine stabile Refernz vorausgesetzt, den internen Oscillator über OSCAL nachjustieren. Hatte erst vor kurzem bei einem Tiny44 Versuche diesbezüglich unternommen. Eine Stufe waren so 40kHz beim 8MHz Oszillator. Und Vorsicht Oscal kennt 2 Bereiche: 0...127 und 128...255, die sich etwas überlappen, ein Blick isn DB ist dringend nötig!
R. Max schrieb: > Markus W. schrieb: >> Es muss also "prodsig" als "memtype" angegeben werden. > > Es geht um einen ATmega8, da ist es "calibration", nicht "prodsig". Du hast völlig Recht, "prodsig" ginge zwar auch (darin enthalten sind die Signatur und die Kalibrierungsbytes), aber "calibration" wäre in diesem Fall einiges einfacher. Anton schrieb: > Bei den (neueren) ATMEGAS, die ich kenne, wird der von der Factory > vorkalibrierte Wert bei jedem Reset ins OSCAL geschrieben. Ja, das ist auch bei den alten der Fall. Übernommen wird aber immer nur die Kalibrierung für den Default-Oszillator, das ist beim ATmega8 der 1-MHz-Oszillator. Der TO will aber den 8-MHz-Oszillator verwenden.
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.