Forum: Mikrocontroller und Digitale Elektronik ATMega88V und OSCCAL


von Klaus K. (klkl)


Lesenswert?

Hallo zusammen

Ich habe ein älteres Projekt mit einem ATmega88V übernommen, das jetzt 
nachgefertigt werden soll. Die Hardware ist identisch (noch aus der 
alten Produktion), bei der Programmierung habe Ich aber ein Problem. Es 
gibt ein Hex file und den Source, kompilieren kann ich noch nicht (IAR 
compiler...)

Die alten Platinen funktionieren, die neuen (von mir programmiert) sind 
etwas anders. Einige Timings scheinen ca halb so schnell wie bei der 
funktionierenden Version, andere stimmen aber überein. Die Fuses sind 
identisch (mindestens 100 mal verglichen...). Nach langem Suchen bin Ich 
mir recht sicher, das es mit OSCCAL zusammen hängt.

Es gibt im Program bei Startup eine Routine die OSCCAL setzt
1
  U8               u8_Count;
2
  U8 const __flash *pu8_Flash;
3
  //auslesen und im Register OSCCAL ablegen
4
  pu8_Flash = (const __flash U8 * )0x1FFF;
5
  u8_Count  = *pu8_Flash;
6
  OSCCAL = u8_Count;
mit dem AVR Studio 7 kann Ich das Calibration Byte auslesen und nach 
0x1fff schreiben.
Ich kann auch eine Reaktion auf das nach 0x1fff geschriebene Byte sehen. 
Die Timings, die bei einem nicht veränderten 0x1fff schlecht sind, 
werden mit dem veränderten 0x1fff noch schlechter ... :-)
Leider erlaubt mir das AVR Studio nicht den Wert beliebig einzustellen, 
sonst könnte Ich vielleicht einen Wert finden, der funktioniert....

Langsam bin Ich mit meinem Latein am Ende.
Hat jemand einen Tip, was Ich noch versuchen könnte?

Vielen Dank schon mal.
Gruß Klaus

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Damit dein Programmschnippsel Sinn macht, muss irgendjemand den 
Oszillator ausmessen und den optimierten Wert für OSCCAL im Flash 
hinterlegen. Und dieser Wert wird für jedes Exemplar anders sein.

Normalerweise macht man das, indem ein Abgleichprogramm auf den Chip 
geladen wird, das dann den OSCCAL Wert für deine Taktfrequenz ermittelt 
und (bei mir ist das so) im EEPROM zur weiteren Verwendung hinterlegt. 
Danach wird dann das eigentliche Nutzprogramm geflasht, das den OSCCAL 
Wert aus dem EEPROM holt und verwendet.

Zu dem Thema gibt es umfangreiche Appnotes.

von Klaus K. (klkl)


Lesenswert?

Hallo

Ich habe das bisher so verstanden, das dieser optimierte Wert schon 
irgendwo liegt, aber bei Startup (zumindestens bei meinen 8MHz, interner 
Ossz) nicht automatisch gesetzt wird. Das macht dann der Codeschnipsel.

Das AVR Studio bietet ja die Möglichkeit den Wert auszulesen und an eine 
beliebige Stelle zu schreiben. Wenn Ich einen beliebigen Wert nach 
0x1fff schreiben könnte wäre Ich auch schon weiter und könnte 
experimentieren, auf diesem Weg kann man aber nur den ausgelesenen Wert 
(woher auch immer der kommen mag) schreiben.

Gruß Klaus

von Georg G. (df2au)


Lesenswert?

Der Hersteller ermittelt die OSCCAL Werte für einige Taktfrequenzen und 
speichert sie an einem speziellen Ort. Welche Frequenzen das sind, sagt 
dir das Datenblatt. Einer dieser Werte (siehe Datenblatt) wird beim 
Start geholt und nach OSCCAL kopiert.

Zum Experimentieren machst du dir das Leben wesentlich leichter, wenn du 
die Werte im EEPROM ablegst und mit der passenden Fuse Einstellung das 
Löschen des EEPROMs beim Neuprogrammieren verhinderst.

Nochmals der Rat, die Appnotes zu dem Thema zu lesen.

von Klaus K. (klkl)


Lesenswert?

Dank dir für deine Hilfe.
Mein Problem hat eine andere Ursache. Mit dem Veraendern von OSCCAL 
verändert sich die gesamte Geschwindigkeit des Chips (wie ich das auch 
erwarten würde). Das hatte Ich vorher anders gemessen.

Gruß Klaus

von c-hater (Gast)


Lesenswert?

Klaus K. schrieb:

> Das hatte Ich vorher anders gemessen.

Wer misst, misst Mist. ;o)

Das ist eine absolut grundlegende Elektroniker-Weisheit.

Du bist offensichtlich kompletter Anfänger. Jeder andere macht natürlich 
als erstes eine Plausibilitäts-Analyse seiner Messungen.

Nicht, dass das der Weisheit letzter Schluss wäre... Aber gegen wirklich 
dumme Fehler hilft es durchaus...

von Klaus K. (klkl)


Lesenswert?

Danke für die aufbauenden Worte

Sich über die Fehler anderer lustig zu machen ist immer ein besonderes 
Vergnügen....
Charakterfehler ?

von c-hater (Gast)


Lesenswert?

Klaus K. schrieb:

> Sich über die Fehler anderer lustig zu machen ist immer ein besonderes
> Vergnügen....
> Charakterfehler ?

Du bist nicht nur fachlich unfähig, sondern obendrein ein Sensibelchen. 
Du solltest es einfach vermeiden, den Kampf mit der Physik unseres 
Universums aufzunehmen.

Mein Gott, du bist so blöd, dass du nichtmal begriffen hast, was ich dir 
sagen wollte: Fehler passieren. Immer. Keiner ist davor sicher, 
natürlich auch ich nicht. Es ist (leider) sehr leicht, zu einer falschen 
Einschätzung zu gelangen. Aber: es gibt Strategien, die eigenen Fehler 
zu eleminieren. Der Trick ist: sich selber (insbesondere die eigenen 
Annahmen) jederzeit in Frage zu stellen. Jedem wirklich wissenschaftlich 
arbeitenden Menschen geht dieser Ansatz mit der Zeit in Fleisch und Blut 
über.

Das ist, was dir offensichtlich noch fehlt...

von Klaus K. (klkl)


Lesenswert?

:-) hatte ich doch Recht....

von J. Zimmermann (Gast)


Lesenswert?

c-hater:
> Der Trick ist: sich selber (insbesondere die eigenen
> Annahmen) jederzeit in Frage zu stellen.
Wie wärs, wenn Du diese Weisheit endlich mal auf Dich selbst anwendest?
mfg
Achim

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.