Hallo zusammen,
nachdem ich mir nun schon den zweiten Atmega8 irgendwie unbrauchbar
gemacht habe, bitte ich um Eure Hilfe für die richtigen Einstellungen.
Ich bin gerade dabei das AVR-Tutorial (USART und ADC) durchzuarbeiten
und habe mir dafür eine Schaltung mit dem Atmega8 aufgebaut, die
folgendes macht: Auslesen von zwei ADC Kanälen und Datenübermittlung per
USART. Ich benütze ein STK500 als Programmer.
Bisher habe ich als Frequenz 4 MHz eingestellt. Das hat auch wunderbar
funktioniert. Die Daten wurden wie gewünscht von meinem Terminalprogram
empfangen. Um die Genauigkeit zu verbessern wollte ich nun mit einem
externen Baudratenquarz (3.6864 MHz)arbeiten, den ich wie im Tutorial
gezeigt, an XTAL1/XTAL2 mit je einem 22pF Kondensator gegen Ground
angeschlossen habe.
Auf dem STK500 gibt es zum Anschluß eines externen Quarzes einen mit
"Crystal" bezeichneten Sockel. Damit das Board den Quarz als Taktquelle
verwendet, müssen sowohl der Jumper XTAL1 gesetzt sein, als auch die
Pins 2 und 3 von OSCSEL verbunden sein.
Wenn ich nun versuche in AVR-Studio die entsprechenden Fuses zu setzen
erhalte ich eine Fehlermeldung (siehe Anhang). Was mache ich falsch?
Liegt es an einer Einstellung oder an der Reihenfolge (erst Fuses, dann
Jumper oder umgekehrt). Ich habe mich durch diverse Threads gelesen, bei
denen es um ähnliche Probleme ging, konnte aber mein Problem nicht
beseitigen bzw. aufspüren, was ich falsch mache.
Ich wäre über konkrete Lösungshilfen äusserst dankbar, da es als
Anfänger ziemlich verwirrend ist, sich aus Expertenthreads die nötigen
Infos zu destillieren.
Danke und Gruß
H.
Helmuth schrieb:> Um die Genauigkeit zu verbessern wollte ich nun mit einem> externen Baudratenquarz (3.6864 MHz)arbeiten, den ich wie im Tutorial> gezeigt, an XTAL1/XTAL2 mit je einem 22pF Kondensator gegen Ground> angeschlossen habe.
Du musst doch nur den Quarz in den Sockel stecken. Das STK500 hat die
Kondensatoren schon drauf. Oder benutzt Du das STK500 nur zum
programmieren (Controller in externer Schaltung)? Dann muss der Quarz
natürlich in diese Schaltung und nicht aufs STK500.
Helmuth schrieb:> Damit das Board den Quarz als Taktquelle> verwendet, müssen sowohl der Jumper XTAL1 gesetzt sein, als auch die> Pins 2 und 3 von OSCSEL verbunden sein.
Das passt soweit. Kannst Du an den XTAL-Pins des Controllers messen, ob
da auch was schwingt?
Ich selbst habe keinen STK500, kann also nur "stochern":
Vielleicht ist der baudrate Quarz nicht so verlustfrei wie der 4
MHz-Quarz.
Da wäre das Setzen von CKOPT eine Hilfe, damit schwingen auch
"schlechtere" Quarze.
Reihenfolge wäre dann: mit internem Oszillator die fuses setzen,
anschließend
ist der interne Oszillator weg.
Jetzt die für die fuses passende Schaltung herstellen: Quarz in Sockel,
Jumper - dann müsste die Arbeit über den ISP wieder klappen.
Chris schrieb:> Du musst doch nur den Quarz in den Sockel stecken. Das STK500 hat die>> Kondensatoren schon drauf. Oder benutzt Du das STK500 nur zum>> programmieren (Controller in externer Schaltung)? Dann muss der Quarz>> natürlich in diese Schaltung und nicht aufs STK500.
Ich benutze das STK500 zum programmieren und setze dann den µC in die
eigentliche Schaltung mit dem externen Quarz ein.
Wenn ich den Quarz in den Sockel setze sind die Fuses aber doch noch
lange nicht gesetzt. Und wenn ich die Einstellungen wie im Anhang
gezeigt vornehme, dann bekomme ich nach dem drücken von "verify" die
gezeigte Fehlermeldung
Peter R. schrieb:> Reihenfolge wäre dann: mit internem Oszillator die fuses setzen,>> anschließend>> ist der interne Oszillator weg.> Jetzt die für die fuses passende Schaltung herstellen: Quarz in Sockel,>> Jumper - dann müsste die Arbeit über den ISP wieder klappen.
Wenn ich den verfusten Controller wieder einsetze dann kann ich jumpern
was ich will, aber ich bekomme über ISP keine Verbindung mehr zum µC.
Peter R. schrieb:> wenn der atmega verfused ist, kann er mit dem STK500 jederzeit in den>> Auslieferungszustand zurückprogrammiert werden.
Wäre nett, wenn Du mir sagst wie. Das löst zwar nicht das eigentliche
Problem, aber ich hab zumindest wieder ein paar mehr Controller zum
probieren.
Mal 'ne blöde Frage, aber könnte es evtl. sein, dass du vor dem
Verifizieren nicht auf 'Program' klickst? Die Fehlermeldung in
geht_nicht.jpg sieht so aus (die ausgelesenen Werte entsprechen nicht
den eingestellten), hätte sonst auch eine Fehlermeldung beim
Programmieren gegeben und du schreibst nur von 'Verify'. Ich arbeite
auch mit dem STK500 in der Weise, wie du geschrieben hast und auch mit
Quarz im Sockel, hatte aber noch nie Probleme, außer ich hatte irgendwas
nicht richtig eingestellt oder vergessen die Fuses zu programmieren.
m. schrieb:> Mal 'ne blöde Frage, aber könnte es evtl. sein, dass du vor dem>> Verifizieren nicht auf 'Program' klickst?
Könnte durchaus sein, dass ich das versehentlich gemacht habe.
Jedenfalls konnte ich dank des Tips mit der High Voltage Programmierung
die verfusten µC's wieder hinbiegen. Klasse :-)
Zu meinem Anfangsproblem: Die Fuses hab ich jetzt auf 0xD9 und 0xCE
gesetzt. Mit
#define F_CPU 3686400UL
#define BAUDRATE 38400UL
und
int ubrr = (F_CPU/(16*BAUDRATE)-1);
erhalte ich in meinem Terminalprogramm völlig regelmäßig die Werte der
beiden ADC-Kanäle. Deshalb gehe ich mal davon aus, dass jetzt alles
richtig eingestellt ist.
Vielen Dank für die Unterstützung (obwohl ich gar nicht weiß, wie der
Fehler zustande gekommen ist, der offensichtlich vorlag).