OSCCAL Register beim Tiny15

OP #897959
Lesenswert?
• ▲
▼
Soweit ich verstanden habe, müsste irgendwo im Programm stehen:
   ldi   r16,99       ;99 ist der ausgelesene Wert für Osccal
   out   OSCCAL,r16   ;diesen Wert in OSCCAL schreiben

Wie würde man das für die Serienfertigung (mit Ponyprog etc) 
automatisieren?
In der Serienfertigung hätte man doch nicht Zeit, jeden Chip auszulesen 
und mit einem Hexeditor, den gelesenen Wert in eine bestimmte 
Speicheradresse zu schreiben. Oder habe ich da was missverstanden?
Gast #897971
Lesenswert?
• ▲
▼
Ja. Du laedst zuert mal ein kleines Programm, das den Wert fuer OSCCAL 
bestimmt. ZB ein Timer interrupt generiert ein Puls an einem pin, 
welcher als Frequenz gemessen wird, dann wird OSCCAL als konstante ins 
tatsaechliche Programm eingefuegt. Das wird dann als Zweites 
programmiert.
#897988
Lesenswert?
• ▲
▼
Ich habe es meist so gemacht:
1
;--- Calibration des internen RC-Oszillators.
2
;
3
;Das Calibrationsbyte muss von der Programmer-Software aus dem Signature-
4
;Bereich des AVR gelesen werden und in das Low-Byte der letzten
5
;Flash-Zelle geschrieben werden.
6

7
 ldi zl,low(2*flashend)     ;Adresse auf Kalibrationsbyte L
8
 ldi zh,high(2*flashend)    ;und H 
9
 lpm                        ;Kalibrationsbyte lesen
10
 ser zl                     ;Referenz für Vergleich auf Gültigkeit
11
 cpse r0,zl                 ;Kalibrationsbyte gültig? (nein wenn $ff...)
12
 out osccal,r0              ;ja, Chip kalibrieren...
13
;--- Ende Calibration...

...
#898138
Lesenswert?
• ▲
▼
3358 wrote:
> Ja. Genau. Und welcher wert steht an Flashend ? Wie kommt der dahin ?

Zu Fuß...
1
;Das Calibrationsbyte muss von der Programmer-Software aus dem Signature-
2
;Bereich des AVR gelesen werden und in das Low-Byte der letzten
3
;Flash-Zelle geschrieben werden.

Soll heißen:
- Der Mensch, der vor dem Rechner sitzt, liest mit Hilfe einer
  Programmer-Software (die meist auf einem PC läuft) das Calibrations-
  byte aus dem Signature-Space (High-Byte, siehe Beschreibung des
  ISP-Programmierprotokolls im Datenblatt des AVRs) aus und merkt es
  sich,
- er schreibt das gemerkte Byte in das vorletzte Byte des von Ponyprog
  angezeigten Hex-Dumpes oder mit anderen geeigneten Mitteln in die
  Hexdatei an Adresse RAMEND*2

Warum eigentlich die letzte Flash-Zelle?
Weil ATMEL bei neuen AVRs das Calibrationsbyte auch in die letzte 
Flash-Zelle schreibt, und zwar in das H-Byte und L-Byte. Bei neuen AVRs 
(Serienfertigung) kann daher diese Prozedur entfallen. Man muss nur 
darauf achten, dass man beim Brennen den AVR nicht löscht. Denn dann war 
ATMELs Mühe für die Katz...

...
#898151
Lesenswert?
• ▲
▼
3358 wrote:
> Ja. Genau. Und welcher wert steht an Flashend ? Wie kommt der dahin ?

Den trägt Atmel dort ein.
Du must den Attiny15 programmieren ohne ihn vorher zu löschen, dann 
klappt es.
Lies mal einen fabrikneuen Attiny15 aus, dann kannst Du es sehen.
Nach dem ersten Löschen ist es natürlich weg.


Peter
OP #899931
Lesenswert?
• ▲
▼
Peter Dannegger wrote:
> 3358 wrote:
>> Ja. Genau. Und welcher wert steht an Flashend ? Wie kommt der dahin ?
>
> Den trägt Atmel dort ein.
> Du must den Attiny15 programmieren ohne ihn vorher zu löschen, dann
> klappt es.
> Lies mal einen fabrikneuen Attiny15 aus, dann kannst Du es sehen.
> Nach dem ersten Löschen ist es natürlich weg.
>
>
> Peter


Habe es mal zu Testzwecken ausgelesen. Stimmt.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren