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.)
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ß
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