Hi..
Mal von C ganz angesehen, sowas ist doch eigentlich normal. Nur teste
ich noch, ob ein gültiges Calibrationsbyte im Flash liegt, wobei ich
darauf spekuliere, dass $ff als Calibrationsbyte nicht vorkommt.
reset: ;Initialisierung
ldi zl,low(1022) ;Pointer auf
ldi zh,high(1022) ;Calibrationsbyte
lpm ;nach r0 holen
ldi zl,255 ;Referenz
cpse zl,r0 ;Calibrationsbyte gültig (<>$ff)?
out osccal,r0 ;ja, kalibrieren
... ;weitere Initialisierungen...
Gilt so für Tiny12 und Tiny15, kostet außer 6 Worten Flash keine
Ressourcen, da zu diesem Zeitpunkt noch kein Register für andere Zwecke
benutzt wird und die Inhalte der hierfür benutzten Register nicht mehr
gebraucht werden...
Übrigens vermisst AVR-Studio (4.08) bei mir keine .s Datei, ich
programmiere aber auch in Assembler.
Testen, ob die Calibration erfolgreich ist, kannst du durch ein
Programm. Aktiviere einen Timer, lass in seiner ISR einen Pin toggeln,
miss dessen Frequenz und errechne anhand der Timereinstellungen die
AVR-Taktfrequenz. Diese sollte der kalibrierten Oscillatorfrequenz
entsprechen (Tiny12: 1,2MHz, Tiny15: 1,6MHz).
Da mein ISP-Programm beim Löschen gleich das Calibrationsbyte ausliest
und ins Flash schreibt, komme ich mit dieser Automatisierung sehr gut
zurecht,zumindest solange ich die AVRs selbst update.
...HanneS...