Forum: Mikrocontroller und Digitale Elektronik Anfänger: Externer Baudratenquarz auf STK500


von Helmuth (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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?

von Peter R. (pnu)


Lesenswert?

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.

von Andreas M. (elektronenbremser)


Lesenswert?

4 MHz bzw. 3.6864 MHz müsste doch mid frequenz sein.

von Peter R. (pnu)


Lesenswert?

>irgendwie unbrauchbar
wenn der atmega verfused ist, kann er mit dem STK500 jederzeit in den 
Auslieferungszustand zurückprogrammiert werden.

von Helmuth (Gast)


Lesenswert?

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.

von ... (Gast)


Lesenswert?

Helmuth schrieb:
>> Auslieferungszustand zurückprogrammiert werden.
>
> Wäre nett, wenn Du mir sagst wie.

Eine Variante ist hier beschrieben:
http://www.mikrocontroller.net/articles/AVR_Fuses#Reaktivieren_bei_fehlerhaften_Taktquellen-Fuse-Einstellungen

Die andere Variante nennt sich "high voltage parallel programming" oder 
kurz HVPP und ist in der Hilfe zum STK500 beschrieben.

von ... (Gast)


Lesenswert?

Achso, für kleine AVRs mit wenig Pins gibts auch noch das serielle 
Pendant zu HVPP, dann halt HVSP. Ebenfalls in der Hilfe vom AVRStudio 
beschrieben.

von m. (Gast)


Lesenswert?

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.

von Helmuth (Gast)


Lesenswert?

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

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.