ATMEGA mit ein 1MHz und externen 20MHz Quarz

OP #3556552
Lesenswert?

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
}
#3556573
Lesenswert?

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.
OP #3556609
Lesenswert?

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?
#3556624
Lesenswert?

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.
Gast #3556656
Lesenswert?

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"
#3556703
Lesenswert?

>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.
Gast #3556764
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren