Das ist ein weit verbreiteter Irrtum!Am Anfang eines jeden Programmes taktet man ja den Chip mit z.B.:
$crystal = 8000000
Die $Crystal-Direktive hat keinen Einfluss auf die Taktfrequenz des Controllers! Sie ist "nur" dazu da um Bascom mitzuteilen, mit welcher Taktfrequenz der Controller läuft. Das ist für alle zeitbezogenen Befehle sehr wichtig (wie z.B. waitms 100), denn Bascom muss ja ausrechnen, wieviele Zyklen z.B. für 100 Millisekunden vergehen müssen. Stimmt die Angabe bei $Crsytal mit der tatsächlichen Taktfrequenz nicht überein, kommt bei zeitbezogenen Befehlen natürlich nur Unsinn raus.
Die Taktfrequenz stellst Du in den Fusebits ein, und da gibt es für den Mega8 die Möglichkeit, ihn mit dem eingebauten RC-Oszillator mit einer Taktfrequenz von 1MHz zu betreiben. Dies ist sogar der Auslieferungszustand, allerdings ist der RC-Oszillator naturgemäß nicht besonders genau. Aber wenn´s auf ein paar Prozent Abweichung nicht ankommt, leistet er gute Dienste. Den RC-Oszillator kann man außerdem auch auf 2, 4 und 8 MHz einstellen
Wenn´s eine "besondere" Taktfrequenz sei soll, muss man den Controller entweder mit einem externen Quarz betreiben, oder mit einem externen Taktsignal (z.B. aus einem Quarzoszillator) versorgen. Infos dazu gibt´s im Datenblatt!
Lesezeichen