Forum: Mikrocontroller und Digitale Elektronik Bauen einer Uhr mit Timer B MSP430F449


von Styx (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Community,

ich will mir eine Uhr bauen die mit Hilfe des Timer B die Sekunden 
zählt.


Meine ISR ist im Anhang

Mein Timer habe ich folgendermaßen initialisiert:
1
TBCTL = TBSSEL0 | TBCLR;
2
3
// Bei Knopfdruck wird die Uhr gestartet
4
TBCCTL0 = CCIE;                             // CCR0 interrupt enabled
5
TBCCR0 = (3333); 
6
TBCTL = TBSSEL_0 + MC_3 + ID_1 + ID_2;    // TACLK, up/down Mode

Die Werte sind beliebig gewählt es geht mir nur darum dass der Interrupt 
generell ausgelöst wird, was er aber leider nicht macht.

Mit Timer A habe ich schon ein Count-Down-Timer geschrieben und der geht 
einwandfrei...

grüße

von IceMurmi (Gast)


Lesenswert?

Da es dir darum geht generell einen Interrupt auszulösen wäre es doch 
ev. noch Sinnvoll die GIE zu aktivieren (General_Interrupt_Enable) 
ansonsten wird nie ein Interrupt ausgelöst, dazu solltest du in deiner 
Interrupt rutine noch abfragen welches Flag des TimerB 
Interruptregisters den Interrupt ausgelöst hat, denn du möchtest nicht 
auf alle Timer Interrupts reagieren.

von Styx (Gast)


Lesenswert?

Hmm Okay,
ich glaub ich habs schlecht erklärt.
Also ich hab ein Programm wo der TImer A als Countdown Timer genutzt 
wird und der Timer B als Sekundenzähler für eine Uhr.
Wenn der Timer B ein Interrupt auslöst soll die Uhr 1s weiter laufen 
(dafür die ISR)
1
// ISR
2
3
// Countdown - Interupt
4
#pragma vector=TIMERA0_VECTOR
5
__interrupt void Timer_A (void)
6
{
7
  for (i=0; i!= 10; i++) BUZZER();
8
  LCD_all();                            
9
  TACTL = TASSEL_0 + MC_0 + ID_1 + ID_2 + TACLR;
10
}
11
12
// Clock - Interupt
13
#pragma vector=TIMERB0_VECTOR
14
__interrupt void Timer_B (void)
15
{
16
17
//Anhang
18
19
}

Ist das nicht so dass bei TIMERB0 Interrupt die Clock Routine abgerufen 
wird und bei TIMERA0 der Countdown Ablauf.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

>   for (i=0; i!= 10; i++) BUZZER();
>  LCD_all();

Bist Du Dir wirklich sicher, daß das in eine Interruptroutine gehört?

von Styx (Gast)


Lesenswert?

Ja das soll mir signalisieren ob ich in der Routine bin.
Soll ein Akustische Rückmeldung und eine Visuelle Rückmeldung geben.

von IceMurmi (Gast)


Lesenswert?


von Styx (Gast)


Lesenswert?

Danke für den Tip,

aber falls du es nicht gesehen hast,
der MSP430F449 hat keine RTC....

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.