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?
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.
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... |
...
Ja. Genau. Und welcher wert steht an Flashend ? Wie kommt der dahin ?
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... ...
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.