Mega8 und interner Oszillator

Gast #29453
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.
Gast #29454
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
Gast #29456
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 ?
Gast #29457
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?

...
Gast #29458
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 :)
Gast #29459
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.

...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.