PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taktproblem mit ATMega8



robodriver
04.11.2007, 12:25
Hallo Leute,

ich habe hier ein Takt-Problem mit meinem ATMega8 und kann mir das alles wirklich nicht mehr erklären. Was sagt ihr dazu:

Meine Beschaltung ist wie folgt:
Ein 4MHz Quarz mit 2 Kondensatoren an XTAL1 und XTAL2 geschalten, so wie im Datenblatt angezeigt.
Die Fusebits stehen bei mir noch auf default, also eigentlich 1MHz interner RC-Oszillator. Das Programm läuft mit dieser Konfiguration, allerdings etwa 3,5 mal langsamer als er sollte.

So, nun wollte ich das ganze mal etwas ausbessern und habe folgendes gemacht:
Die Fusebits auf 4MHz externen Oszillator (ist dass das gleiche wie ein Quarz???) gesetzt (CKSEL=1101 SUT=11)
Mit dieser Konfiguration läuft das Programm gar nicht mehr.

So, nun habe ich den Quarz weg gelöstet und die Fuses wie folgt gesetzt:
CKSEL=0011 SUT=10 Also eigentlich doch Interner 4MHz RC-Oszillator...

Allerdings läuft auch unter dieser Konfiguration gar nichts mehr.

woran könnte das alles liegen?
Ich will eigentlich nur entlich mal ein Programm genau in der Geschwindigkeit laufen lassen wie ich es im Programm angebe. Dieses Timingproblem habe ich schon seit ewigkeiten.
Hoffe ihr könnt mir sagen was ich hier falsch mache.

Gruß Robodriver

Besserwessi
04.11.2007, 16:29
Wenn die Fuses auf externer Oszillator eingestellt sind, genügt ein einfacher Quarz mit KOndensatoren nicht, sondern es wird ein kompletter externer Generator (z.B. so ein etwas größerer Metallkasten mit 4 Anschlüssen) erwartet. Damit sollte nicht einmal mehr das Programieren und Auslesen der ID funktionieren. Kann der Programmierer (welches Programm ?) den Chip noch erkennen ?

Zum Glück ist CKSEL=1101 nicht der externe Oszillator (sondern 1-3 MHz Quarz), sonst müsste ein externer Takt an einen der Clock Pins, vermutlich XTAL1 (im Datenblatt nachsehen welcher). Ein 4 MHz Quarz hätte damit normalerweise auch laufen sollen.

Wenn der Oszillator nicht schwingt, sollte aber auch das Programmieren nicht mehr gehen. Eventuell ist also das Fuse Setting gar nicht angekommen.


Das richtige Fuse setting ist external Crystal/Resonator (3-9 MHz), also CKSEL=1111. Und SUT = 01 , 10 oder 11 . Je nachdem ob Brownout gewünscht.

robodriver
04.11.2007, 16:49
Also ich habe einen separaten Brenner. Das heißt auf dem Ist eine eigene Takterzeugung drauf.

Ja, mit den Settings externem Oszillator spricht der Brenner nicht mehr an. ist aber halb so wild, weil ich einen Oszillator da habe. Den hab ich dann einfach angeschlossen und dann konnte ich die Einstellungen auch wieder zurück nehmen.
Ansonsten habe ich die Fuses jetzt mal auf CKSEL=1111 und SUT=11 gesetzt. Und es scheint mit dem Externen Quarz zu laufen und die Wait-Zeiten scheinen auch zu stimmen.

Ich habe jetzt aber zwischenzeitlich mal nochmal probiert auf Internen RC-Oszillator zu schalten. Dann spricht aber mein I²C Hardware nicht mehr auf ankommende Daten an (Interrupt) kann das sein das diese eine Externe Takterzeugung braucht oder habe ich jetzt durch die genaueren Zeiten vielleicht einen schnelleren Sender als Empfänger?

Besserwessi
04.11.2007, 19:48
Der externe Takt hat kaum vorteile gegenüber den Quarz am Oszillator. Außer wenn ein sehr niedriger oder extrem stabiler Takt oder eine Syncronisation mit einer anderen Quelle nötig ist, geht es auch ohne externen Takt. Das die I2C Verbindung nicht mehr klappt kann eventuell an der Frequenz liegen, aber nicht an der Quelle des Taktes.

robodriver
04.11.2007, 19:56
Hm, in BASCOM hab ich 4 MHz definiert und in den Fuses habe ich auch 4 MHz internen Tatk eingestellt.

Mit der Einstellung 1MHz interner Takt und extern den Quarz mit 2 Kondensatoren dran lief die Software einwandfrei. Obwohl die Wait-Zeiten halt das 4 fache des angegebenen benötigten