mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 und interner Oszillator


Autor: Andreas Wiese (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin gerade an meinem ersten Projekt mit  dem Mega8. Nun hab ich eine 
Frage zu dem internen Oszillator. Was muss ich beachten, wenn ich den 
Oszi einfach von 1 auf 8 MHz takten will. Reicht es die entsprechenden 
Fuse-Bits zu setzen? Was hat es mit der Kalibrierung auf sich, da komm 
ich nicht ganz hinter.
Da ich jetzt öfter gelesen habe, dass sich der Controller nach dem 
ersten Versuch nicht mehr beschreiben lies, bin ich ein bisschen 
vorsichtig geworden, da ich nur die serielle Programierungsmöglichkeit 
über Pony-Prog habe.
Wäre schön, wenn mir jemand helfen könnte.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

zum verstellen der Fuse-Bits:
Die werden in Pony-Prog invertiert angezeigt. Soviel vorweg.
Du ließt also zuerst die Fuse-Bits ein (ganz wichtig) und drehst dann 
entsprechend an den Bits für den internen Oszilator (und nur an denen) 
Dann schreibst du die Fuse-Bits wieder. Dann sollte dein Takt verändert 
sein und der Controller sollte sich auch noch über das serielle 
Interface ansprechen lassen.
An OSCCAL mußt du nur ran wenn du den Oszilator noch etwas genauer haben 
willst. Du mißt dabei eine Frequenz die du per Software erzeugst und 
vergleichst diese mit dem theoretischen Sollwert. Jetzt drehst du 
solange an OSCCAL bis der Meßwert und der theoretische Wert so genau wie 
möglich übereinstimmen.

Matthias

Autor: Andreas Wiese (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
vielen Dank für deine Hilfe, jetzt läuft er ohne Probleme auf 8 Mhz. Mit 
OSCCAL das kann ich mir für meinen Zweck schenken.

Gruß
Andreas

Autor: Skragan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin gerade bei derselben sache: klappt alles soweit, aber wie messe ich
die frequenz, wenn ich den internen osc. nutze ? würde ich assembler
schreiben, könnte ich ja die befehlsdauer ausrechnen. aber wenn man in
bascom programmiert, wie findet man dann raus, mit welcher frequenz er
nun genau läuft ?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum lest ihr nicht das Calibrationsbyte aus dem Signature-Bereich aus
(H-Byte an Adresse 3 für 8MHz), schreibt es in die letzte Flash-Zelle
(L- und H-Byte, wie es der Hersteller auch macht) und lest es in der
Initialisierung dort aus (Z-Pointer auf 2*falshend) und schreibt es ins
osccal-Register?

...

Autor: Skragan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo, calbyte lesen und schreiben ja kein thema (gibts da bei bascom
eigentlich ein reserved word ?), nur mit dem lesen des osccal weiß ich
immer noch nicht, mit welcher frequenz er genau läuft - die muss ich ja
messen durch z.b. einen pintoggle. da ich ja aber die befehlslänge nicht
weiß (in bascom), müsste ich ja den ganzen code in assembler auf den
theoretischen wert durchrechnen und dann messen. das ist mir irgendwie
zu... umständlich :)

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die von ATMEL ermittelten Calibrationsbytes stehen in den H-Bytes der
Adressen 0...3 im Signature-Bereich des AVR. Darauf kann nur ein
Programmiergerät bzw. seine (PC-) Software zugreifen.

Du musst also mittels Programmer das Calbyte ermitteln und von Hand an
eine (reservierte) Speicherstelle (im Flash) eintragen. Ich nutze dazu
immer das L-Byte der letzten Flash-Zelle. ATMEL schreibt das Calbyte in
das H-Byte und L-Byte der letzten Flash-Zelle, das geht aber beim ersten
Löschen verloren.

Dein AVR-Programm (das selbst geschriebene) muss die vereinbarte
Speicherzelle auslesen und das Byte in das I/O-Register OSCCAL
schreiben. In ASM sieht das so aus:

RESET:
 ldi zl,low(2*flashend)     ;Adresse auf Kalibrationsbyte L
                            ;(Taktfrequenzeinstellung AVR)
 ldi zh,high(2*flashend)    ;und H (da schreibt der Brenner das
                            ;automatisch hin...)
 lpm                        ;Kalibrationsbyte lesen
 ser zl                     ;Referenz für Vergleich Kalibration
 cpse r0,zl                 ;Kalibrationsbyte gültig?
                            ;(nein wenn $ff...)
 out osccal,r0              ;ja, Chip kalibrieren...
 ...                        ;weitere Befehle der Reset-Routine

Wie das in BASCOM geht, weiß ich leider nicht.

...

Autor: Skragan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich werde mir das morgen mal anschauen, danke erstmal für die tips !

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.