Forum: Mikrocontroller und Digitale Elektronik Mega8 und interner Oszillator


von Andreas Wiese (Gast)


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.

von Matthias (Gast)


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

von Andreas Wiese (Gast)


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

von Skragan (Gast)


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 ?

von ...HanneS... (Gast)


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?

...

von Skragan (Gast)


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 :)

von ...HanneS... (Gast)


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.

...

von Skragan (Gast)


Lesenswert?

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

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.