Hallo Zusammen, habe folgendes Problem. Wollte einen Uhrenquarz an den Pins TOSC1/2 betreiben. Nutze hierzu den Timer2/B. Auszug aus dem Quellcode: int main(void) { ASSR|=(1<<EXCLK)|(1<<AS2); TCCR2B=(1<<CS22)|(1<<CS21)|(1<<CS20); Teiler 1024 TCNT=255; TIMSK2|=(1<<TOIE2); sei(); while(1) { //Leer } return 0; } ISR (TIMER2_OVF_vect) { //mach was } Wenn ich das ASSR auskommentiere, dann läuft der Timer einwandfrei. Dann nutzt er also den CPU Takt / 1024 Der Quarz ist an TOSC1/2 angeschlossen und über 2x22P C an Masse. Wo liegt mein Fehler. Hat vielleicht einer schon mal das Problem gehabt. Mit dem Oszilloskop kann ich keine Schwingung am Quarz messen. Ich bin echt ratlos. Woran kann das liegen das der Quarz nicht anschwingt?? Den vollständigen Code hab ich leider nicht hier. Falls notwendig kann ich das heute abend noch mal einstellen. Das Ganze wird mit 5V betrieben. Danke im Voraus!!
Horst Badberg schrieb:
> ASSR|=(1<<EXCLK)|(1<<AS2);
Schau nochmal ins Datenblatt. Das ist nicht die richtige Konfiguration
für einen externen Quarz.
Und dann schau anschliessend noch mal in das Kapitel zum asynchronen Timer, aber richtig tief und gründlich, denn da gibt's auch bei richtig gesetzten Bits ein paar Fallen.
Uhrenquarze werden ohne Kondensatoren nach Masse angeschlossen und EXCLK darf nicht gesetzt werden, siehe DB, ist nur für ext. zugeführten Clock.
Man seid ihr alle schnell!! Hut ab. Danke für die Antworten. ASSR|=(1<<AS2); hatte ich schon getestet. Läuft auch nicht! Werde das mal mit ohne Kondensatoren testen. Wenn es dann nicht läuft, dann kaue ich das DB heute mal durch. Ich berichte!!! LG Horst
Hallo! Das gleiche bastel ich auch gerade und bei mir siehr es so aus:
1 | // ASYNCRONEN TIMER2
|
2 | ASSR = (1<<AS2); |
3 | _delay_ms(100); |
4 | TCCR2B = (1<<CS22) | (1<<CS20); // TEILER 128 für 1sek |
5 | TIFR2 = (1<<TOV2); // Interrupts löschen (*) |
6 | TIMSK2 = (1<<TOIE2); |
Grüße Denny
>> ASSR|=(1<<AS2)
Wenn außerhalb der Main kein Zugriff auf das ASSR stattfindet, wäre es
sicherer die Veroderung wegzulassen:
ASSR=(1<<AS2)
Denny S. schrieb: > ASSR = (1<<AS2); > _delay_ms(100); Ist -- je nach Quarz -- schon recht knapp. Manche brauchen da auch schon mal 300...500 ms, bis sie stabil schwingen. Sollte man einfach im Hinterkopf behalten, man muss ja diese Zeit nicht unbedingt tottreten.
Hallo, es ist genauso, wie Denny es beschrieben hat. Bei mir müssen dieKondensatoren auf alle Fälle dran, sonst schwingt der Quarz nicht!! Vielen, vielen Dank an alle die geholfen haben. Als Anhang meine main.c So funktioniert es bei mir. Ein Semikolon fehlt in der main.c (wo der Prescalerwert gewählt wird)
Hallo Horst Badberg, das Thema "Uhrenquarz am ATMEGA644" hatte ich auch gerade, wenn auch nur hypothetisch. Im Datenblatt steht dazu, dass man einen Quarz mit einer Kapazität von 6pF allein anschließen soll, bei höheren Kapazitäten aber die Schaltung mit den zusätzlichen Kondensatoren braucht. Gruß, DetlevT
Hallo Detlev, danke für den Hinweis. Denke das dieser Tread auf alle Fälle auch anderen weiterhilft. Denke so soll es in einem Forum sein. LG Horst
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.