ich hänge jetzt mal die datei an.in der an leitung steht!!!
OSCCAL wert vom attiny15 0x7C.
----------------------------------------------------------------------
Beim Ausmessen (bei der Herstellung) wird das Calibrationsbyte zwar noch
in die letzte EEP-Zelle und in die letzte Flash-Zelle (Low und High)
geschrieben, wird aber von den meisten ISP-Programmen beim ersten
Zugriff gelöscht und ist daher bei Verwendung von Ponyprog & Co nicht
wirklich verwendbar.
Um den Tiny15 zu calibrieren, muss man:
- mit ISP-Programm das Calibrationsbyte aus dem Signature-Space
ermitteln
- im AVR-Programm das Calibrationsbyte in das I/O-Register OSCCAL
schreiben
Kleines Handycap dabei: Das AVR-Programm kann das Calibrationsbyte nicht
lesen, das kann nur ein Programmer (ISP, HV-Ser.) von außen. Ein
Programmer kommt zwar an das Calibrationsbyte heran, hat aber keinen
Zugriff auf . Daher ist das Calibrieren des Tiny15 nicht ohne
Mitwirkung des Menschen automatisierbar. Im DCC-Programm findet man im
Reset-Block folgende Sequenz:
ldi TEMP1, EEOSCCAL ;hole Oszillator Calibrierung
rcall readEEProm
out OSCCAL, Temp2
Das lässt darauf schließen, dass der Calibrationswert im EEPROM an der
Adresse EEOSCAL erwartet wird. Die Suche nach EEOSCCAL ergab folgenden
Treffer:
.equ EEOSCCAL = 5 ;Speicherplatz OSCCAL im EEPROM
Nun wissen wir, dass es sich um Adresse 5 handelt, also das 6. Element
des EEPROM. Nun müssen wir ermitteln, woher das EEPROM seine Daten
bekommt und finden das hier:
;** hier beginnt das EEProm **
.ESEG
.ORG $0000
.db 0x01, 0x00 ; CV1 Adresse und CV2 StartSpeed
.db 0x80, 0x80 ; CV3 IncVAL und CV4 DecVal
.db 0x80, 0x71 ; CV5 MaxSpeed und CV6 OSCCAL
.db 0xFF, 0x01 ; CV7 Hersteller und CV8 Typ ID
.db 0xFF, 0xFF ; CV9 Frei und CV10 Frei
.db 0xFF, 0xFF ; CV11 Frei und CV12 Frei
.db 0xFF, 0xFF ; CV13 Frei und CV14 Frei
.db 0xFF, 0xFF ; CV15 Frei und CV16 Frei
.db 0x00, 0x02 ; CV17 HI-Byte und CV18 LO-Byte
.db 0x00, 0xFF ; CV19 Consist und CV20 Frei
.db 0xFF, 0xFF ; CV21 Frei und CV22 Frei
.db 0xFF, 0xFF ; CV23 Frei und CV24 Frei
.db 0xFF, 0xFF ; CV25 Frei und CV26 Frei
.db 0xFF, 0xFF ; CV27 Frei und CV28 Frei
.db 0x00, 0xFF ; CV29 Configuration Data und CV30 Frei
Und wenn wir uns die Datenzeilen ansehen, stellen wir fest, dass immer
zwei Bytes in einer Zeile notiert sind. Das 6. Element mit der Adresse 5
steht demnach in der dritten Zeile an zweiter Position und hat in diesem
Quelltext den Wert 0x71. Auch im Kommentar erkennt man, dass es sich um
den OSCCAL-Wert handelt, allerdings im DCC-Slang gleich noch mit einem
"CV"-Namen versehen.
Deine Aufgabe ist es nun
- mit einem ISP-Programm (z.B. Ponyprog2000) das Calibrationsbyte Deines
Tiny15 zu ermitteln,
es in den Quelltext einzutragen,
den Quelltext neu zu assemblieren,
die neu assemblierte Hexdatei in den Tiny15 zu brennen...
Ich lege in meinen Programmen das Calibrationsbyte übrigens immer in die
letzte Flash-Zelle, so kann ich bei neuen AVRs gleich die
Herstellerwerte benutzen. Manchmal ist es eben vorteilhaft, sich an
gewisse Konventionen zu halten.
--------------------------------------------------------------
gruß thomas