XMEGA256 Timer0 Compare Match Berechnung

Gast #5519649
Lesenswert?
• ▲
▼
32 MHz ist 32 Millionen Mal jede Sekunde.
Alle 250 ms ist 4 Mal jede Sekunde.
Dazwischen liegt also Faktor 8 Millionen.
Diese 8.000.000 musst Du aufteilen auf irgendwelche Teiler zwischen 
Quarztakt und Peripherietakt, auf den Vorteiler vom Zähler und auf den 
Zähler selber.
Du kannst bestimmt irgendwie den Wert, bis zu dem der Zähler zählt 
begrenzen. Vorsicht : da der Zähler von 0 los zählt, teilt er durch 10, 
wenn er bis 9 zählt. Also immer einmal mehr wie Du, würde Mundstuhl 
sagen.
Da die meisten Vorteiler nur 2er Potenzen können, musst Du schauen, wie 
Du das Verhältnis ganzzahlig hin bekommst.
In Primfaktoren zerlegt ist Deine 8.000.000 immerhin 2^9 * 5^6.
Wenn Du einen 16-Bit-Timer hast ist das vermutlich kein Problem.
Gast #5520120
Lesenswert?
• ▲
▼
Danke für die Hilfestellung.
Gibt es hier jemand der mir einen Code Snippet zeigen kann, wie man den 
Timer auf Compare Match konfiguriert? Im Datenblatt gibt es zig Bits um 
irgendwas mit Compare Match einzustellen..
Gast #5520755
Lesenswert?
• ▲
▼
Danke für eure Mühen.

Sehe ich das richtig? Für einen Compare Match, muss ich es wie folgt 
konfigurieren?
1
6.4 Using a Timer/Counter for PWM Generation
2
Task: Configure TCC0 for pulse width modulation output with varying duty cycle on
3
channel A.
4
1. Configure PC0 for output by setting bit 0 in PORTC.DIR.
5
2. Select the timer period by setting the PER[H:L] register.
6
3. Select a waveform generation mode by setting the WGMODE[2:0] bits in
7
4. Enable Compare Channel A by setting the CCAEN bit in CTRLB.
8
5. Start the TC by selecting a clock source (CLKSEL[3:0] in CTRLA).
9
6. Calculate the desired compare value.
10
7. Write the new compare value to CCA[H:L].
11
8. Wait for the TC Overflow Flag to be set. (OVFIF in INTFLAGS).
12
9. Clear the TC Overflow flag.
13
10. Go to step 6.
Gast #5520771
Lesenswert?
• ▲
▼
Das will nicht so ganz.. Was mache ich falsch?
1
void timerCMPInit( TC0_t *tim )
2
{
3
  LED_DIR = 1<<0;
4
    
5
  // set up compare matching in the middle of the period
6
    TCC0.CCA    = 10;          // Compare Match Wert
7
  TCC0.PER    = 65535;
8
  TCC0.CTRLA    = TIMER_PRESCALER_gc;    
9
  TCC0.CTRLB    = TC0_CCAEN_bm;         // Compare Match 'A' aktivieren
10
    TCC0.INTCTRLB  = TC_CCAINTLVL_HI_gc;   // Interrupt bei Compare Match 'A' aktivieren
11
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.