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.
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
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
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 ?
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? ...
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 :)
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.