Forum: Mikrocontroller und Digitale Elektronik MSP430FG4618 Taktfrequenz mit Registern - Wie funktionierts?


von Stefan M. (stefan_m)


Lesenswert?

Hi,

ich sollte eine LED mit 1 Hz blinken lassen. Das habe ich wie folgt 
gelöst:

#include <msp430xg46x.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;  // Stop WDT
  P5DIR |= 0x02;             // P5.1 output (Port5 PIN 1)
  CCTL0 = CCIE;     // CaptureControl0=CCR0InterruptEnabled
  CCR0 = 32769;     // Endwert wird ins CapputreCompareRegister=163 
gesetzt
                    //#define CCR0  TACCR0  /* Timer A Capture/Compare 0 
*/
  TACTL = TASSEL_1 + MC_2 + ID_0;       // ACLK, contmode,Vorteiler 0
  TACTL |= MC_2;                        // TimerA Start
  _BIS_SR(LPM3_bits + GIE);             // Enter LowPowerMode3 w/ 
interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P5OUT ^= 0x02;                        // Toggle P5.1
  CCR0 += 32769;                        // Add Offset to CCR0
}

Die Timersource ist ACLK (32769 HZ), gestartet im ContiniousMode. Dieser 
zählt jeweils von 0 bis 65535, dann kommt der Overflow. Da ich das CCR0 
auf 32769 gesetzt habe, zählt der Timer nun von 32769 bis 65535 bis zum 
Overflow. Der er 32769 Zählschritte pro Sekunde schafft, erhält man jede 
Sekunde einen Overflow.

Nun die Frage: Wenn ich nun 100Hz haben will, muss ich das CCR0 auf 327 
setzen. Praktisch klappt das dann auch, aber theoretisch passt dann 
meine Erklärung nicht mehr. Denn wenn der Timer von 327 zu 65535 zählt, 
dann würde er länger und nicht weniger Zeit benötigen.

Folglich ist der Wert im CCR0 der Endwert, bis zu dem gezählt wird, 
richtig? Nur dann muss der Zähler irgendwo Null gesetzt werden. Oder 
passiert das automatisch beim Overflow? hm, jetzt klingt es wieder 
logisch gg

Also ist der Wert im CCR0 nun der Endwert, bis zu dem gezählt wird?

Grüße,

Stefan.

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.