Anfänger Frage

Gast #3860183
Lesenswert?
• ▲
▼
Hallo

Ich habe Anfänger Frage:
Kann man Timer so Programmiren dass Timer mehr als 0,52s sein kann:
1
int main(void) 
2
{
3
WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
4
TA0CCR0 = 62499;
5
TA0CTL = TASSEL_2 | ID_3 | MC_1 | TAIE;// SMCLK, /8, Up mode, Interrupts ein
6
P1DIR |= (1<<6);
7
_bis_SR_register(GIE | CPUOFF);
8
}
9

10
#pragma vector=TIMER0_A1_VECTOR
11
__interrupt void TIMER0_A1_ISR(void)
12

13
{
14
P1OUT ^= (1<<6);
15
TA0CTL &= ~TAIFG;
16
}

TAnCCR0 = t ∙ fclk/ Vorteiler – 1 = 0,5 s ∙ 1 MHz / 8 – 1 = 62499 max. 
kann man 2^16 (65536= 0.52s)reinschreiben. Was wäre wenn ich brauche 
Timer= 20s?
Gast #3860279
Lesenswert?
• ▲
▼
Wert erreicht hast, in
> diesem Fall 40, lässt du deinen Controller tun, was er alle 20s tun soll
> und setzt die Variable wieder auf 0. Damit kannst du jede beliebig lange
> Zeit erzeugen.

Was hst du mit 40 gemeint? In meinem fall zählt MC TA0CCR0 = 
62499;(0.5s)und dann wird ISR gelöst.Die frage ist wie kann man TA0CCR0 
mehr als 65536= 0.52s
machen?
Gast #3860703
Lesenswert?
• ▲
▼
Wenn der INT ausgelöst wird erhöhst Du eine vorher definierte Variable 
um 1. Willst Du nun mehr als 0,5s haben, z.B. 2s, dann vergleichst Du 
die Variable in der main() einfach mit 4. Sobald die Variable 4 ist sind 
2s um und Du kannst in eine Funktion springen. Vor dem Sprung solltest 
Du aber noch die Variable wieder auf 0 setzten.
#3860730
Lesenswert?
• ▲
▼
Erik Werner schrieb:
> Was hst du mit 40 gemeint? In meinem fall zählt MC TA0CCR0 =
> 62499;(0.5s)und dann wird ISR gelöst.Die frage ist wie kann man TA0CCR0
> mehr als 65536= 0.52s
> machen?
Mehr als 65535 geht nicht. 65536 passt schon nicht mehr ins 
16-Bit-Register und wird zu 0. Also, der Zähler fängt wieder von vorne 
an.

Wenn du längere Zeiten haben willst, musst du in der ISR eine Variable 
hochzählen. Bei jedem ISR-Aufruf, der in diesem Fall alle 0,5s 
stattfindet, wird diese Variable um 1 erhöht. Wenn du also 20s haben 
willst, zählst du bis 40. Das sind dann 40 halbe Sekunden. Brauchst du 
eine Minute zählst du 120 halbe Sekunden. Bei einer Stunde sind das dann 
7200. Das kannst du treiben, bis du nicht mehr unter den Lebenden 
weilst. Dem Controller ist das egal. Der zählt einfach nur +1 bei jedem 
Aufruf der ISR. Jede halbe Sekunde.
Nach 1000 Jahren ist er bei 63.113.904.000.

So macht man das immer mit langen Zeiten. Die Register, also die 
Timercounter, sind nur für relativ kurze Zeiten direkt zu verwenden.

Wobei man für solche Zeiten zumeist keinen 16-Bit-Timer "verschwendet", 
sondern einen 8-Bit-Timer nimmt und diesen auch deutlich schneller 
laufen lässt. Z.B. mit 1/100s. Dann ist er nach 1000 Jahren bei 
3.155.695.200.000.

mfg.
Gast #3863351
Lesenswert?
• ▲
▼
#include <msp430.h>
int zaehler=0;
int main(void)

{
WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer

TA0CCR0 = 62499;
TA0CTL = TASSEL_2 | ID_3 | MC_1 | TAIE;// SMCLK, /8, Up mode, Interrupts 
ein
P1DIR |= (1<<6);
_bis_SR_register(GIE | CPUOFF);

}

#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)

{


TA0CTL &= ~TAIFG;
zaehler++;
if (zaehler > 20)
{
zaehler=0;
P1OUT ^= (1<<6);
//_delay_cycles(500);

}
}


so geht aber gut

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.