Hallo,
ich hab mal eine Frage:
Ich hab eine PWM implementiert, in der bei 200Hz eine LED gedimmt wird.
Dann lass ich die Pulsweiten berechnen, die aus einer Sinuswelle
entstehen, so dass die LED pulsierend an und aus geht.
Jetzt muss es doch irgendetwas geben wie einen interrupt, der auf Pin 1
das Signal an und aus schaltet, wenn die Zeit abgelaufen ist und die CPU
sich während dessen mit der Berechnung der Pulsweiten beschäftigen kann?
Bisher musste beides nacheinander ablaufen, aber das läuft dann
logischerweise nicht mehr ganz flüssig.
HIER DIE FRAGE:
Wie funktioniert sowas mit den Interrups? Es müsste ja irgendeine art
Interrupt-Fänger die ganze zeit warten und sobald er den Interrupt
fängt, das und das machen und danach kann die CPU wieder mit der alten
Arbeit fortfahren.
Zumindest stell ich es mir so vor.
Hier mein bisheriger Code bzw mein erster Versuch.
1 | void main(void)
|
2 | {
|
3 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
4 |
|
5 | P1DIR = 1; // p1 auf output
|
6 | TACTL = TASSEL_1 + TACLR; // aclck und clear
|
7 | TACCTL0 = CCIE; // ccr0 interrupt einschalten
|
8 | TACCR0 = 32768-1; // 1 sekunde
|
9 | TACTL |= MC_1;
|
10 |
|
11 | }
|
12 |
|
13 |
|
14 |
|
15 | __interrupt void Timer_A (void)
|
16 | {
|
17 | P1OUT=0x1; // testweise LED einschalten.
|
18 | }
|
eigentlich müsste ja ein interrupt geworden werden, wen eine Sekunde
abgelaufen ist und dann sollte die LED angehen. Tut sie aber nicht.
Was läuft falsch ?