PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8: Kalibrierwerte f. RC-Oszi. durch Programm auslesen?



Alu0406
28.08.2007, 11:37
Hallo,

kennt jemand eine Möglichkeit die Werks-Kalibrierwerte des Atmega8 mittles eines im selben Contoller laufenden Programmes auszulesen?
Standartmäßig überträgt der Atmega8 automatisch den Wert für 1MHz in das Register OSCCAL.
Nun soll die Frequenz 8Mhz betragen und der Korrekturwert lässt sich nur mit einem Programmer auslesen.

Gibts da eine Lösung??
Danke für Eure Hilfe....

alu0406

Hanni
28.08.2007, 12:20
ldi r16, 0x55 ; den Kalibrierwert laden
out OSCCAL, r16 ; und setzen ...


Hoffe geholfen zu haben.

Grüße,
Hanni

Alu0406
29.08.2007, 17:42
Hallo Hanni,

vielen Dank für die Infos!
Ich kenne mich in Assembler nicht gut aus aber wenn ich das richtig lese lädt der Code den Wert des Registers 0x55 ins Arbeitsregister 16 als Variable und dann die Variable ins Register OSCCAL......
Im DataSheet ist das R 0x55 allerdings für Powermodes und Interrupts angegeben... ????
Ich suche einen Zugriff auf die in der Fertigung ermittelten und im AVR abgelegten Kalibrierwerte.

Grüße
Andreas

Hanni
29.08.2007, 18:38
Net ganz ;)

Ich lade ins Register 16 den Wert 55 (den hab ich mal aus der Luft gegriffen).
Diesen schreibe ich dann in das OSCCAL Ding rein.

Ergo müsstest du dir vorher mal die Arbeit machen und den Wert mit nem Programmer auslesen, damit du ihn richtig setzen kannst.

Ob es eine direkte Möglichkeit gibt den Wert, der sich irgendwo bei der Signatur versteckt, im Programm auszulesen entzieht sich meiner Kenntnis.

Grüße,
Hanni

Alu0406
29.08.2007, 21:28
:-b Das genau war meine Frage........trotzdem Danke.

Hanni
30.08.2007, 18:19
Heir mal nen Auszug aus dem Datenblatt:


During Reset, the 1 MHz calibration value
which is located in the signature row High byte (address 0x00) is automatically loaded
into the OSCCAL Register. 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.

Ich denke das dürfte alle Klarheiten beseitigen ;)

Grüße,
Hanni

izaseba
30.08.2007, 18:58
Hallo,
man kann den Internen Oscilator ganz nett mit einem Uhrenquarz abgleichen.
Man häng den Quarz am Takteingang des Timers 2 und läßt den im Asynchronen Modus laufen.
Danach startet man Timer1 und 2 gleichzeitig und schaut, ob die verstrichene Zeit gleich ist.
Je nach dem dreht man an OSCAL, bis beide Timer synchron laufen.
So wird das beim Butterfly gemacht, und ich muß sagen UART mit 19200 Bauds läuft perfekt mit dem internen Takt ;-)
Nachteil, man hat den Uhrenquarz dran, Vorteil, man hat gleichzeitig eine ziemlich genaue Uhr .

Gruß Sebastian

Alu0406
31.08.2007, 06:56
Hallo Sebastian und Hanni,

vielen Dank für Eure Infos!

Ich seh schon es wird kein Weg an Handarbeit vorbeifühern... :shock:

Die ZUFUß-Lösungen hab ich schon gemacht, aber es geht um eine größere Menge von Atmegas.....
Die Genauigkeit der Werkswerte würde mir reichen aber ich denke nun darüber nach doch jedem Contoller für 30Ct einen Quarz und ein paar C`s zu spendieren...... O:)

Schönes Wochenende!!