Forum: Mikrocontroller und Digitale Elektronik Timer2 für atmega8 will nicht


von derHoffmann (Gast)


Lesenswert?

Hallo mc Gemeinde

Um es gleich vorweg zu nehmen, ich bin am verzweifeln. Es geht um 
folgendes:

Ich arbeite mit einem Atmega 8 und ich brauche einen genauen 
Sekundentakt. Um den Takt zu erhalten, verwende ich einen 32.786kHz 
Uhrenquarz.

Das ergibt bei einem Teiler von 128 einen periodischen Ueberlauf von 
modulo 256 eine Frequenz von genau 1Hz. Ich warte also den Overflow2 ab 
und zähle dann eine Sekunde hoch.

Aber...der Timer stimmt nicht. Und zwar geht mein Timer so etwa 7 
Sekunden pro Stunde zu schnell.

So ungenau kann ja kein Uhrenquarz sein.

Den Timer habe ich sicher richtig initialisiert.

Meine Frage ist, kann es sein, dass ich die Ports an denen der 
Uhrenquarz liegt sonst beeinflusse. Der Uhrenquarz liegt an Port B(1<<7) 
und (1<<6). Wenn ich irgendwo eine Null auf diese Ports gebe, kann das 
was ausmachen?

Und muss ich diese Ports als Eingang oder als Ausgang definieren. So wie 
ich das verstanden habe, handelt es sich um keine eigentlichen IO-Ports 
mehr, wenn ich den Asynchronen-Timer initialisiere (1<<AS2)?

Danke für Hinweise.

von Hubert G. (hubertg)


Lesenswert?

Mit dem Einstellen der Fuses sind die entsprechenden Pin konfiguriert. 
Es sind keine weiteren Einstellungen (Eingang / Ausgang) notwendig.
Sind externe Kondensatoren dran oder ist CKOPT aktiviert?

von derHoffmann (Gast)


Lesenswert?

Hallo Hubert,

danke für die Antwort erstmal. Nein externe Kondensatoren habe ich keine 
dran und den Quarz habe ich direkt am Mc . Kannst du mir sagen wie ich 
CKOPT aktiviere?

Ich arbeite mit dem avr Studio und schreibe in C.

danke schön.

von Sebastian G. (jaseg)


Lesenswert?

CKOPT ist ein Fusebit. Im Zweifelsfall: Datenblatt nochmal genau lesen.

von derHoffmann (Gast)


Lesenswert?

Hallo Sebastian,

auch danke an dich fürs Antworten.
Nur, wie schalte ich das Fusebit ein... sorry für die ev. ein wenig 
blöde Frage, aber ich bin noch ein ziemlicher Anfänger...

Danke

von Sebastian G. (jaseg)


Lesenswert?

So wie du auch die CKSEL Fuses programmierst. Ich weis nicht, wie man 
das in AVRStudio macht, aber normalerweise sollte der Programmer das 
machen. Ich weis aber nicht, ob dieses Bit jetzt an oder aus sein soll 
-- hierzu würde ich nochmal im Datenblatt nachschlagen.

PS: Da!
http://www.mikrocontroller.net/articles/AVR_Fuses#AVR_Studio

von derHoffmann (Gast)


Lesenswert?

ok gut.

Dann setze ich mal die Fuses für einen  "External Low-frequency 
Crystal".

mal schauen ob es tut wie es soll.

von Sebastian G. (jaseg)


Lesenswert?

Wenn du vorher keine Fuses gesetzt hast sollte der AVR auf dem internen 
1MHz-RC-Oszillator laufen. Lies dir auf jeden Fall vorher den oben 
genannten Artikel durch, da du dich durch "versetzen" der Fuses auch 
schnell aus dem µC "aussperren" kannst.

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.