Forum: Mikrocontroller und Digitale Elektronik ATMega16 -- Quarze, Quarzoszillatoren, Fuses


von LukeNukem (Gast)


Lesenswert?

Hallo Forum,

ich hoffe, ich bin hier richtig; wenn nicht, bitte Bescheid sagen und / 
oder ins richtige Forum verschieben. Herzlichen Dank.

Nun, ich bin ein Anfänger in der Elektronik und schätze dieses Forum als 
-- für mich jedenfalls -- nahezu unerschöpfliche Wissensquelle. Leider 
muß ich nochmal alle Fehler wiederholen, die die geschätzten Anwesenden 
wohl bereits hinter sich oder nie gemacht haben. ;-) Deswegen habe ich 
heute meinen ATMega16 zeitweilig ins Nirvana geschickt.

Wie auch immer, ich möchte derlei unangenehme Erfahrungen in Zukunft 
gern vermeiden. Ich habe hier einen 8-MHz-Quarz (das Teil mit zwei 
Beinchen) und zwei 22pF-Kerkos als Lastkapazitäten und bin ein wenig 
verwirrt, wie ich meine Fuses dafür setzen muß. Das Datenblatt des uC 
verwirrt mich eher, als das es hülfe, und der "AVR Fuse Calculator" von 
Engbedded kennt die "External Clock" sowie den "External 
Chrystal/Resonator" mit "Low-", "Medium-" und "High-Frequency".

Sehe ich das richtig, daß mit "External Clock" ein externer Taktgeber 
gemeint ist, also etwa ein NE555 oder ein Pin von einem ATTiny mit PWM? 
Und: ist mein 8-MHz-Quarz nun ein "Medium-" oder ein "High-Frequency" 
"External Chrystal/Resonator"?

Auch bezüglich der CKOPT-Fuse habe ich noch Fragen. Da an meinem uC ein 
PWM-geregelter Gleichstrommotor über einen L293D und eine Halogen-Lampe 
über einen IRL540N hängen werden, rechne ich mit Ripples und Störungen, 
also wohl mit dem, was das ATMega16-Datenblatt ein "noisy environment" 
nennt -- in dem ich CKOPT laut Datenblatt setzen sollte. Habe ich das 
tatsächlich richtig verstanden?

Beste Grüße und lieben Dank,
Luke


PS: Heute habe ich mir meinen ATMega16 "verfust", wie man hier wohl 
sagt: lfuse=0xE8 und hfuse=0x99 sind nicht für, wie gewünscht, einen 
externen 8-MHz-Quarz, sondern einen externen RC-Oszillator. Im 
Nachhinein habe ich mich jedenfalls ziemlich über meine eigene Doofheit 
geärgert. Wer Lesen kann, ist eben doch klar im Vorteil. (Nicht lachen, 
bitte.)

Ich bin übrigens ein bisschen stolz darauf, das ich das nicht nur selbst 
herausgefunden habe, sondern es obendrein geschafft habe, einen zur 
Fuse-Einstellung passenden RC-Oszillator zusammenzubasteln und meinen 
ISP-Programmer "mySmartUSB light" so anzustecken, daß ich die Fuses auf 
die Werkseinstellung zurücksetzen konnte. Ganz alleine! (Jetzt dürft Ihr 
mich gerne auslachen.)

von Düsendieb (Gast)


Lesenswert?

LukeNukem schrieb:
> Ganz alleine!

Na, dann weiter so!

von Joachim (Gast)


Lesenswert?

Also ich find das gut, was du dir bisher erarbeitet hast. Das schaffen 
bei weitem nicht alle Anfänger :) . Das Datenblatt hast du (glaube ich) 
richtig verstanden. Wobei: dieses CKOPT-Fuse hab ich bisher noch nie 
sinnvoll einsetzen können. Wenn deine Schaltung halbwegs ordentlich 
aufgebaut ist, dann ist der Krieg gegen die Störungen schonmal halb 
gewonnen.

Zu deinen Fragen mit dem "Medium-" oder "High-Frequency"
"External Chrystal/Resonator": das kann man sich mit Seite 26 des 
Datenblattes zusammenreihmen. Da stehen ja drei "Frequenzbereiche". Die 
werden dann ja low, med, und high sein :) . Und ja, dein NE555 ist ein 
"external clock" . Eigentlich sagen einem die Bilder ja fast alles...

Ich schreib zwar auch immer gern und viel, aber versuch doch mal, deine 
Fragen so zu stellen, daß man sie in deinem Text leichter findet. Das 
macht das beantworten leichter ;) ...

Gruß

von LukeNukem (Gast)


Lesenswert?

Hallo,

vielen Dank, morgen mittag probier ich's aus.

Liebe Grüße,
Luke

von LukeNukem (Gast)


Lesenswert?

Hallo,

so, genug probiert, aber irgendwas klappt dort immer noch nicht und 
jetzt bin ich mit meinem bisschen Latein am Ende. Auf der seriellen 
Schnettstille bekomme ich nur reproduzierbaren Zeichensalat, bei egal 
welcher Baudrate (probiert: 2400, 4800, 9600, 34200 Bd, mit 
util/setserial.h und auf die im AVR-GCC-Tutorial angegebenen 
Präprozessormakros). Meine Fuses stehen derzeit auf lfuse=0xFF und 
hfuse=0xC9; CKOPT, JTAGEN, SUT[0:1] und CKSEL0 machen dabei nur einen 
Unterschied beim Zeichensalat. Deswegen nehme ich an, daß da trotzdem 
irgend etwas mit dem Takt nicht stimmt.

Geprüft und befunden habe ich folgendes: Der Quarz schwingt mit 8 MHz, 
sagt mein DMM, ein Oszilloskop habe ich leider nicht. Mit einer 
programmierten CKOPT-Fuse (0) liegen an XTAL1 und XTAL2 je ca. 580mV, 
mit unprogrammierter (1) etwa 2,5V an. Eine kleine Hauptschleife

while(TRUE) { PORTC |= (1<<PC1); PORTC &= ~(1<<PC1); }

gibt an dem betreffenden Pin eine Frequenz von 1,33 MHz aus. Wenn ich 
das richtig verstanden habe und ein Schleifendurchlauf hier sechs 
CPU-Takte braucht, würde das doch passen. Für die serielle Verbindung 
verwende ich einen Wandler von USB auf RS-232, den Linux als pl2303 
erkennt und als USB-TTY einbindet. Darauf greife ich per gtkterm zu.

Hat jemand eine Idee, wo der Hund denn stecken könnte?

Liebe Grüße und vielen Dank,
Luke

von LukeNukem (Gast)


Lesenswert?

Hallo,

Problem gelöst: es lag an der Invertierung des Signals. ;-)

Liebe Grüße,
Luke

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.