Forum: Mikrocontroller und Digitale Elektronik Programm wird bei geänderter Frequenz nicht mehr ausgeführ


von Paul P. (cesupa)


Lesenswert?

Hallo,

derzeitig versuche ich einen externen Quarz(16MHz) an meinen Atmega8 
anzuschließen, das funktioniert soweit ganz gut, zumindest antwortet der 
Atmega nach dem Setzen der Fuse Bits(0xee) noch :). Wenn ich dann aber 
versuche ein einfaches Programm, das eine LED zum leuchten bringen soll 
zu übertragen funktioniert dies zwar auch wunderbar, aber die LED will 
nicht leuchten. Am Pin sind auch nur ungefähr 0,2V statt 4-5V. Wenn ich 
das ganze mit dem internen Quarz(8MHz) mache, dann funktionierts. Lasse 
ich das Programm drauf und schalte wieder auf den externen Quarz um 
leuchtet die LED komischerweise immer noch, nur wenn ich das Prog lösche 
und erneut überspiele leuchtet sie wieder nicht :-( Kann mir einer von 
euch sagen, was ich dagegen unternehmen könnte?

Gruß
cesupa

von Mario (Gast)


Lesenswert?

Gib mal die GENAUE Typenbezeichung des AVRs... Könnte sein, dass du ein 
L-Typ hast, der kann nur 8MHz...

von AVR Geist (Gast)


Lesenswert?

Es gibt keinen internen Quarz.
Sondern nur einen int. RC Oszillator.

von Paul P. (cesupa)


Lesenswert?

Also, auf dem Atmega8 steht drauf:

ATMEL 0547I
ATMEGA8-16PU

Gruß
cesupa

von Jörg X. (Gast)


Lesenswert?

CKOPT -Fuse (in dem anderen Fuse-byte) programmieren
Externer Quarz heißt im Datasheet (und nur da ;) ) "Crystal Oscillator", 
das Kapitel erklärt auch die Fuses ganz gut.
btw. Quarzoszillator (wie in den meisten shops) heißt im Datasheet 
"external clock", das sollte man nicht verwechseln...

hth. Jörg

von Paul P. (cesupa)


Lesenswert?

Ähm, sorry, ich versteh noch nicht viel von Mikrokontrollern. Die Fuse 
Bits hab ich auf 0xee gestellt, so stehts meiner Meinung nach auch im 
Datasheet drin, funktioniert ja auch. Aber was ist dieses CKOPT ??? Im 
Datasheet steht ja auch ich muss CKOPT programmiert verwenden, wenn ich 
einen 16MHz Quarz benutze, wie genau mache ich das?

Gruß
cesupa

von Jörg X. (Gast)


Lesenswert?

Der Atmega8 hat zwei Fuse bytes:
 Im "Fuse Low Byte" stehen die Einstellungen für den Brown-out-detektor, 
die Start-up-time und die Bits um die Taktquelle auszuwählen (Kapitel: 
"Memory programming"->"Fuse bits")
 Im "Fuse High Byte" steh u.A. CKOPT.
Was du wie einstellen musst hängt vor allem von dem Programm ab, dass du 
zum programmieren benutzt. Deshalb schau mal hier: 
http://www.mikrocontroller.net/articles/AVR_Fuses#Taktquellen_Fuse_Einstellung

hth. Jörg

von Paul P. (cesupa)


Lesenswert?

Also ich mache das ganze unter Linux mit UISP. Die Fuse-Bits setze ich 
für den externen Quarz so hier:

uisp -dprog=dapa --wr_fuse_l=0xee

Was muss ich hierbei ändern um CKOPT korrekt einzustellen?

Gruß
cesupa

von Jörg X. (Gast)


Lesenswert?

LIES erst das Fuse High Byte AUS - wenn ich raten müsste ( ich nutze 
weder Linux noch uisp) mit "uisp -dprog=dapa --re_fuse_h" - aber da 
gibt's bestimmt 'ne doku ;).
Der Defaultwert für das Fuse-Highbyte sollte 0xD9 sein (0b11011001)
CKOPT (datasheet, bei mir "Table 87.") soll programmiert werden, also 
muss in dem High byte das Bit 4 auf Null gesetzt werden-> 0b110_0_1001 = 
0xc9.
Schreib AUF GAR KEINEN FALL in das Fuse high byte beim mega8 einen Wert 
der kleiner ist als 0x80 ! (RSTDISBL Fuse).

hth. Jörg

ps.: lies das Datasheet (nochmal)
pps.: und nochmal ;)

von Paul P. (cesupa)


Lesenswert?

So, hab jetzt das Fuse High Byte neu gesetzt, nach 0xc9. Funktioniert 
leider immer noch nicht. Werde mir dann mal das Datasheet reinziehen. 
Wäre euch aber dennoch sehr dankbar wenn euch noch einige Ideen bzw. 
Lösungsvorschläge einfallen, die ihr hier dann posted.

Schöne Grüße
cesupa

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.