Forum: Mikrocontroller und Digitale Elektronik ATMega88V und OSCCAL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Klaus K. (klkl)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
:-) hatte ich doch Recht....

von J. Zimmermann (Gast)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.