Forum: Mikrocontroller und Digitale Elektronik OSCCAL Register beim Tiny15


von Peter X. (vielfrass)


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?

von 3358 (Gast)


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.

von Hannes L. (hannes)


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...

...

von 3358 (Gast)


Lesenswert?

Ja. Genau. Und welcher wert steht an Flashend ? Wie kommt der dahin ?

von Hannes L. (hannes)


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...

...

von Spess53 (Gast)


Lesenswert?

Hi

Die Brennsoftware für die ATMEL-Programmer gestattet das Lesen des 
OSCAL-Wertes und das Speichern an einer Adresse im Flash oder EEPROM.

MfG Spess

von Peter D. (peda)


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

von Peter X. (vielfrass)


Angehängte Dateien:

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.

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
Noch kein Account? Hier anmelden.