Taktraten und Quarze

Gast #637998
Lesenswert?
• ▲
▼
Hallo Mikrocontrollerfreunde,

ich habe ein Problem mit meinem Atmega644 und würde darüber hinaus auch 
eine Wissenslücke füllen wollen. Beim Programmieren habe ich mich immer 
wieder über den zu schnellen Takt geärgert und habe die Fusebits auf 
CKSEL=1101 SUT=11 (3.0 - 8MHz) gestellt. Das funktionierte auch ganz 
gut. Als ich jedoch Probleme mit der Baudrate bekam, wollte ich ihn noch 
weiter runtertakten. Mit der Auswahl CKSEL=1011 SUT=11 (0.9 - 3MHz) 
sollte er nun wohl auf 3 MHz laufen. Aber leider ist er mit dem AVRISP 
MKII nicht mehr erreichbar (Programmierfrequenz wurde auf 250KHz 
runtergeschraubt). Der Atmega hat einen 18,432MHz als Taktgeber.

Nun die passenden Fragen:
- Muss ich jetzt einfach einen 3MHz Quarz einbauen, um den Atmega644 
wieder zu erreichen?
- Fangen (zu große) Quarze ab bestimmten (niedrigen) Taktfrequenzen 
nicht mehr an zu schwingen?
- Gibt es irgendwo eine Website, auf der ich mich über solche 
Zusammenhänge informieren kann?

Gruß,
Dorschkopp
Gast #638003
Lesenswert?
• ▲
▼
Hallo Alex,

ja genau das habe ich getan. Was aber wiederum bedeuten würde, dass ich 
einfach einen 3MHz Quarz verlöten muss um wieder an den Mikrocontroller 
zu kommen. :) Der hat ja jetzt in den Fusebits 0.9 - 3MHZ eingestellt.

Hast du noch eine interessante Seite zu dem Thema?

Gruß,
Dorschkopp
Gast #638015
Lesenswert?
• ▲
▼
Hallo,

ein Quarz schwingt auf seiner mechanisch bedingten Freuquenz oder 
garnicht.
Mit den Fuses änderst Du die Parameter des Oszillators für den Quarz.

Die sind für die jeweiligen Frequenzbereiche des rangelöteten Quarzes 
optimiert. Wenn dem die nicht mehr passen, schwingt er eben garnicht 
mehr an, wenn er anschwingt, schwingt er immer auf seiner aufgedruckten 
Frequenz, also bei Dir auf 18,xxx MHz.

Außerdem: was bitte ist an einem schnellen AVR-Takt störend??? Dann geht 
wenigstens das Programmieren schneller, weil man den ISP-Takt höher 
setzen kann...


Ansonsten ja, einen Quarz mit niedriegerer Frequenz ranhängen und 
richtig fusen. Sollte alles greifbare gehen, vermutlich auch bis 8MHz.
Gruß aus Berlin
Michael
Gast #638017
Lesenswert?
• ▲
▼
Ach noch eine Anmerkung dazu:

Warum kann man dann im µC keine Taktraten einstellen sondern nur "grob 
über den Daumen 3.0 -8MHZ? Bzw. 8.0-X MHz? Wird der Quarz dann nicht 
auch kurzzeitig mit anderen Frequenzen betrieben, als die die oben drauf 
steht?
Gast #638020
Lesenswert?
• ▲
▼
@Michael
Danke, das war eine der Aussagen, die ich hören wollte :)
Zu den Taktraten: (mal abgesehen davon, dass ich ja den CLDIV hätte 
benutzen können) Ich hatte am Anfang versucht mir Ergebnisse an Ports 
via LED anzeigen zu lassen. Du kannst dir vorstellen, wie lehrreich das 
ist wenn man trotz Prescaler von 1024 ein durchgehendes Leuchten sieht 
;)
Gast #638021
Lesenswert?
• ▲
▼
Der Quarz allein bestimmt, mit welcher Frequenz er schwingen will!
Die Einstellungen der Fuse-bits ändert vermutlich nur die µC-interne
Oszillatorschaltung (also Kapazitäten usw.) und stellt damit lediglich 
einen optimalen Zustand für den jeweiligen Frequenzbereich des Quarzes 
her!
#638035
Lesenswert?
• ▲
▼
Jan Raddatz wrote:
> Hi Dorschkopp,
> anstatt den Takt des uC zu quälen könntest Du doch auch nen simplen
> sleep nach dem Schalten der LED's in Dein Programm einbauen oder?
> Wieso hast Du das nicht gemacht?
Nen simplen sleep, soso. Überleg mal, ob die Beschäftigung mit den 
sleep-Modes und den Möglichkeiten, den µC aus dem sleep auch wieder 
zurückzuholen, für jemanden, der gerade versucht, die Funktionsweise der 
Taktquelle zu begreifen, nicht vielleicht ein bisschen viel ist.

Vielleicht solltest Du Dich aber selber mal damit befassen. sleep ändert 
nämlich gar nichts an der Problematik, eben weil man den µC ja auch 
irgendwie wieder aufwecken muss. Ob der µC aktiv ist, bis der Timer 
überläuft oder ob er solange schläft, spielt in diesem Zusammenhang gar 
keine Rolle. Verzögerungen kann man durch einfaches Zählen der 
Timer-Interrupts erreichen...
#638048
Lesenswert?
• ▲
▼
Hmm dann habe ich Dein Problem vieleicht nicht ganz verstanden. Du 
schreibst, daß Du Dich über den hohen Takt ärgerst und Deine blinkenden 
LED's nicht richtig sehen kannst weil die zu schnell blinken.

Mit simplem Sleep meinte ich eigentlich ne Reihe von NOP's in einer 
Schleife verpackt als delay wie duselbaer schreibt.

Vieleicht hab ich aber auch Dein Problem bzw. Dein Ziel einfach falsch 
verstanden.
Kann ja mal passieren :)

Gruss
Jan
#638049
Lesenswert?
• ▲
▼
duselbaer wrote:
> Ich glaube nicht, dass er wirklich sleep() gemeint hat, vielmehr eine
> der Delay-Funktionen... Im Standard-C heisst das halt sleep()
Dann muss er das auch schreiben. sleep im Zusammenhang mit AVR-µCs hat 
eine ziemlich genau definierte Bedeutung und hat nichts mit Standard-C 
zu tun.
Gast #638055
Lesenswert?
• ▲
▼
Ich habe es mit Timerinterrupts (hochzählen von Registern) gemacht. Da 
ich aber keinen höheren Prescaler als 1024 wählen kann kam ich dann vom 
µs in den ms Bereich. Meine Augen konnten es auf jeden Fall nicht 
wahrnehmen :)

Da ich mich mit Assembler versuche könnte ich höchstens nop statt sleep 
nehmen ;) (So cirka 10238819283432mal hintereinander)

Gruß,
Dorschkopp
#638067
Lesenswert?
• ▲
▼
Dorschkopp wrote:
> Ich habe es mit Timerinterrupts (hochzählen von Registern) gemacht.
Das ist schonmal genau die richtige Methode...

> Da ich aber keinen höheren Prescaler als 1024 wählen kann kam ich dann vom
> µs in den ms Bereich. Meine Augen konnten es auf jeden Fall nicht
> wahrnehmen :)
Ein 8-Bit-Timer mit Prescaler 1024 macht bei der von Dir angegebenen 
Taktfrequenz ungefähr alle 14 ms einen Overflow. Wenn Du die Overflows 
mit einem 8-Bit-Register zählst, läuft das Register alle 3,6 s über. Das 
sollte wahrnehmbar sein.

CKDIV8 ist schon mal ne gute Möglichkeit, den Takt runterzusetzen. Aber 
hast Du auch schon mal an den internen RC-Oszillator gedacht? Solange Du 
nicht asynchrone serielle Datenübertragung machst, kann der nämlich 
eigentlich für alle Anwendungen gut verwendet werden...
Gast #638248
Lesenswert?
• ▲
▼
Conrad hatte nur einen 2MHz Quartz, ich hatte gerade ein bisschen 
Probleme mit dem Entlöten des alten Quarzes aber jetzt komme ich wieder 
sauber auf den Mikrocontroller.

Vielen Dank für das Erklären der Umstände...

(1,53€ Lehrgeld ;) )

Gruß,
Dorschkopp

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren