Forum: Mikrocontroller und Digitale Elektronik ATMEGA mit ein 1MHz und externen 20MHz Quarz


von Gendo I. (gendoikari)


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
}

von Thomas E. (thomase)


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.

: Bearbeitet durch User
von Gendo I. (gendoikari)


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?

von Marcus (Gast)


Lesenswert?

Hi,
wieso nimmst du nicht einfach einen Uhrenquarz, die sind dafür gemacht.

von Thomas E. (thomase)


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.

: Bearbeitet durch User
von Gendo I. (gendoikari)


Lesenswert?

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.

von Gendo I. (gendoikari)


Lesenswert?

Oh ja das hab ich garnicht gesehen obwohl ich alles für Quarze etc. hier 
durchgelesen hatte. Offenbar nicht alles...
Danke!

von chris (Gast)


Lesenswert?

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......

von Michael (Gast)


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"

von Purzel H. (hacky)


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.

von Amateur (Gast)


Lesenswert?

Was für ein Mega-Dins-Bums?

Viele können mit einem Uhrenquarz überhaupt nichts anfangen. Genauigkeit 
hin oder her.

von ich (Gast)


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?

von Gendo I. (gendoikari)


Lesenswert?

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
Noch kein Account? Hier anmelden.