Forum: Mikrocontroller und Digitale Elektronik Frequenzteiler mit ATXMEGA ohne Interrupts


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich plane eine Hardware, die im Haupteil aus einem ATXMEGA128A1, einer 
RTC und einem externen ADC bestehen soll, welcher einen externen Takt 
benötigt um eine Wandlung auszulösen (nicht zum Wandeln selbst). Dazu 
plane ich, das 32kHz Square-Wave-Signal der RTC abzugreifen, da dies 
sehr genau und sowieso vorhanden ist.

Da ich mit der Samplefrequenz flexibel sein möchte, suche ich eine 
Möglichkeit die Frequenz irgendwie teilen zu können. Meine Frage ist, ob 
das mit dem ATXMEGA möglich ist, ohne diesen mit Interrupts zu belasten. 
Ich hatte mir im Datenblatt mal die Waveform Generation der Timer 
angeschaut, bin aber noch nicht ganz durchgestiegen. Ginge das damit, 
oder arbeitet die auch mit Interrupts?  Vielleicht weiße ja einer von 
euch noch einen alternativen Vorschlag.

Grüße, Alex

von Oliver S. (oliverso)


Lesenswert?

Die Timer-PWM arbeitet rein in Hardware, ohne Interrupts.

Oliver

von Bastian W. (jackfrost)


Lesenswert?

Die Taktquelle für den Timer ist ja der Systemtakt oder kommt vom Event. 
Beim ersten währe der Systemtakt sehr langsam u d beim zweiten brauchst 
du einen Interrupt, wenn das von der RTC her geht.

Du kannst aber mit dem Prescaler auf 256 oder 1024 und dann über die 
Timerhardwate gehen. Über die DFLL kannst du den Sytemtakt vom internen 
Osc. über den RTC Takt live kalibrieren .  Nur der A1 hat hier einen 
Hatdwarebug. Der A1U währe besser wenn die Hardware noch nicht hast.

Gruß JackFrost

von Bastian W. (jackfrost)


Lesenswert?

Beim Eventsysten hab ich mich getäuscht das geht ohne Interrupt. Da geht 
der Überlauf und Compare von der RTC. Sofern du die RTC nicht für mich 
was anderes brauchst und der Überlauf auf 0 gestellt werden kann kannst 
du die 32 kHZ nutzen aber der nächst kleinere Wert ist dann eh 16 kHz. 
Wenn der Überlauf >0 sein muss kannst durch nur 16 kHz und kleiner 
nutzen

Gruß JackFrost

von Alexander H. (ill_son)


Lesenswert?

Hallo,

danke für die Antworten. Mein Plan zielt in die Richtung, den Timer mit 
den 32kHz der RTC zu Takten, das habe ich schon mal in einem anderen 
Projekt umgesetzt, und dann abhängig vom Wert eines Registers einen 
Port-Pin zu togglen. Also ein bisschen wie Compare-Match, aber ohne 
Interrupt eben.

Wenn ich hier: http://www.atmel.com/images/doc8045.pdf auf Seite 6 ganz 
unten lese, klingt das, als wäre Wave Form Generation Mode genau das, 
was ich suche.

von Bastian W. (jackfrost)


Lesenswert?

Damit sollte es gehen. Du willst den Takt der RTC an TOSC anlegen und 
damit den Timer laufen lassen , oder ?

Was für eine Samplefrequenz willst du nutzen ?

Reichen dir die Teilungen von 16,4 kHz , 8,2 kHz, 5,5 kHz .... Oder sind 
dir da die Sprünge schon zu groß ?

Gruß JackFrost

von Alexander H. (ill_son)


Lesenswert?

Hallo Bastian,

beim letzten Projekt ging der Takt zum Pin PORTB2 und ich hab das dann 
über das Event-System gelöst.
1
TCC1.CTRLA = TC_CLKSEL_EVCH0_gc;    //event channel 0
2
TCC1.CTRLB = TC_WGMODE_FRQ_gc;      //frequency mode
3
TCC1.CCA = 31;
4
TCC1.CNT = 0x00;        // clear counter

So würde ich es wieder machen, nur eben ohne Interrupt.

Zu den Frquenzen: Wenn ich 32kHz habe, würde ich dann daraus gern ein 
paar gängige Raten machen, also 2048, 1024, 512 usw., besser wären 
natürlich runde Wert, also 1000, 500 und so weiter. Ich möchte nur nicht 
gezwungen sein, immer mit voller Abtastrate zu arbeiten.

Grüße, Alex

von Bastian W. (jackfrost)


Lesenswert?

Du kannst den Takt nur durch gerade Teiler teilen damit geht 500 und 
1000 nicht. Du kannst den Vortakt der RTC nicht auf 4kHz teilen. Das 
würde dann über den Systemtakt gehen. Aber nur beim A1U mit der DFLL.

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.