Hallo, Vorab: also ich möchte den ATmega nicht von dem externen Quarz steuern lassen, der soll weiterhin mit 1Mhz laufen. Mein Ziel ist es lediglich von den XTAL eingangen einen interrupt zu erhalt. Doch er wird nie ausgelößt, nun weiß ich nicht an welcher einstellung es hapert... // Initialisierung: TCCR1B = 0b111; // Prescaler von 1024 und damit Timer starten TCNT1 = 46005; // Vorladen TIMSK1 |= (1<<TOIE1); // Interrupts aktivieren Die ISR s dazu. ISR(TIMER1_CAPT_vect) { static a; // wird nie aufgerufen a++; } /* Timer/Counter1 Compare Match A */ ISR(TIMER1_COMPA_vect) { } /* Timer/Counter Compare Match B */ ISR(TIMER1_COMPB_vect) { } /* Timer/Counter1 Overflow */ ISR(TIMER1_OVF_vect) { TCNT1 = 46005; // preloder 65536-19531 }
Gendo Ikari schrieb: > Hallo, > > > Vorab: > also ich möchte den ATmega nicht von dem externen Quarz steuern lassen, > der soll weiterhin mit 1Mhz laufen. > Mein Ziel ist es lediglich von den XTAL eingangen einen interrupt zu > erhalt. Doch er wird nie ausgelößt, nun weiß ich nicht an welcher > einstellung es hapert... Daran, daß sowas nicht geht. Was du machen kannst ist, einen externen Oszillator nehmen. Der kommt als Taktquelle an TOCS1. Das wird mit den CS-Bits eingestellt. Dann hast du aber keinen Prescaler mehr. Was soll das Ganze überhaupt? Warum soll nicht der ganze Controller mit 20MHZ laufen? Zumal der 20MHz-Takt am Timer auch noch durch 1024 geteilt werden soll. Was aber, wie schon gesagt, nicht geht. Aber mit 20MHz als CPU-Takt schon. Auch mit Quarz. mfg.
Naja die CPU soll nur mit 1Mhz laufen wegen dem Stomverbrauch. ist für eine Wanduhr. Un der Takt soll dann 20000000/1024 geteilt werden . =>19531.25 das 16bit Register als 65536-19531=46005 dann eben noch jede fünfte Sekunde +1 und ich habe meinen Sekunden INT so war zumindest der plan. Ich mochte nicht mit _delayms(1000) arbeiten ist zu ungenau. Wie könnte ich das Problem am besten an gehen?
Hi, wieso nimmst du nicht einfach einen Uhrenquarz, die sind dafür gemacht.
Gendo Ikari schrieb: > Naja die CPU soll nur mit 1Mhz laufen wegen dem Stomverbrauch. ist für > eine Wanduhr. > > Un der Takt soll dann 20000000/1024 geteilt werden . =>19531.25 > > das 16bit Register als 65536-19531=46005 > > dann eben noch jede fünfte Sekunde +1 und ich habe meinen Sekunden INT > so war zumindest der plan. Ich mochte nicht mit _delayms(1000) arbeiten > ist zu ungenau. > > > Wie könnte ich das Problem am besten an gehen? Mit einem 32,768KHz - Quarz an Timer2 im Asynchronmode. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Timer2_im_Asynchron_Mode mfg.
Naja ich hab halt gedacht,wenn ich einen höheren takt nehme und den runterteile ist das genauer. Aber das ware auch mein nächster Plan gewesen. Das würde aber immer noch nicht das Problem lösen, das ich keinen interrupt bekomme.
Oh ja das hab ich garnicht gesehen obwohl ich alles für Quarze etc. hier durchgelesen hatte. Offenbar nicht alles... Danke!
und warum zum geier nutzt nicht den ctc modus des entsprechenden timers? erspart dir das ganze vorladen und du verlierst keine zeit im int und kannst deine variable zählen lassen......
Gendo Ikari schrieb: > Naja ich hab halt gedacht,wenn ich einen höheren takt nehme und den > runterteile ist das genauer. Normale µC-Quarze sind von sich aus sowieso so ungenau, dass eine Uhr damit nicht auf Anhieb genau geht, egal was man über Teilerverhältnisse und Vorteiler mit der aufgedruckten Nennfrequenz ausrechnet. Das Thema bewegt die Menschheit seit Kolumbus Zeiten Beitrag "Die genaue Sekunde / RTC"
>Naja ich hab halt gedacht,wenn ich einen höheren takt nehme und den
runterteile ist das genauer.
Der Quarz selbst bestimmt die genauigkeit. Waehred ein normaler N-MHz
eine genauigkei von 100ppm hat, hat ein 32768Hz Uhrenquarz eine
Genauigkeit von 10ppm. Fuer denselben Preis.
Was für ein Mega-Dins-Bums? Viele können mit einem Uhrenquarz überhaupt nichts anfangen. Genauigkeit hin oder her.
Amateur schrieb: > Was für ein Mega-Dins-Bums? > > Viele können mit einem Uhrenquarz überhaupt nichts anfangen. Genauigkeit > hin oder her. Was willst du mit deinem Posting sagen? Das "Mega-Dins-Bums" heißt ATmega und ist ein µC. Und ein Uhrenquarz kommt dort ran und bestimmt die Geschwindigkeit. Warum sollen viele nichts damit anfangen können?
Ja das ist auf jeden Fall ein interessantes Thema besonders, wenn man an die Themperaturstabilität denkt. Ich habe jetzt einfach aus meinem Schrottgeräte Fundus einen Uhrenquarz ausgelötet. Funktioniert 1A! DANKE noch mal!
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.