Forum: Mikrocontroller und Digitale Elektronik MSP430 G2553 Timer A1 Interrupt geht nicht


von Lukas K. (lukas_k)


Lesenswert?

Hallo liebe Community,
ich experimentiere gerade etwas mit Interrupts und bin gerade dabei, die 
onboard-LEDs mittels Timer zu toggeln. Leider klappt das nicht und es 
bleibt die ganze Zeit die grüne LED2 an. Ausgewählt wurde SMCLK, der 
nötige Quarz ist auch montiert.
Hier der Code:
1
#include <msp430g2553.h>
2
#include <intrinsics.h>
3
4
#define LED1 BIT0
5
#define LED2 BIT6
6
7
void main(void) {
8
9
   WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog timer
10
11
   P1DIR |= LED1 | LED2;
12
   P1OUT = ~LED1 ;                  // Set the green LED off
13
14
   TA1CCR0 = 32767;
15
   TA1CCTL0 = CCIE;
16
   TA1CTL = MC_1|TASSEL_2|TACLR;
17
18
   __enable_interrupt();
19
   for(;;) {}
20
21
}
22
23
#pragma vector = TIMER0_A1_VECTOR
24
__interrupt void TIMER0_A1_ISR( void )
25
{
26
  P2OUT ^= LED1 | LED2; // Toggle LED
27
}

Ein Interrupt über den Button (PORT1_VECTOR) funktioniert hingegen.
Wahrscheinlich habe ich irgendeinen leichtsinnigen Fehler gemacht, 
verzeiht mir das bitte, ich habe kaum Erfahrung mit dem Mikrocontroller.
Gruß
L.K.

: Bearbeitet durch User
von 10 vor 12 (Gast)


Lesenswert?

Lukas K. schrieb:
> verzeiht mir das bitte

Unmöglich, nein, das geht gar nicht! ;-)))

Probier es mit dem #pragma vector = TIMER0_A0_VECTOR und werfe einen 
Blick in den Family User Guide. Der Timer hat zwei Vektoren, einen für 
CCR0 und einen shared für die anderen Quellen.

Beispiel:
Beitrag "Re: Frequenzmessung mit MSP430 im LPM3"

von 10 vor 12 (Gast)


Lesenswert?

Ach ja, Schreck lass los. ;-)

Die Timer wurden durcheinander gewüfelt:

Lukas K. schrieb:
> TA1CCR0 = 32767;
>    TA1CCTL0 = CCIE;
>    TA1CTL = MC_1|TASSEL_2|TACLR;
und
Lukas K. schrieb:
> #pragma vector = TIMER0_A1_VECTOR

Du wolltest bestimmt
#pragma vector = TIMER1_A0_VECTOR

Ist halt schon spät, sorry, ich bitte um Nachsicht.

von Lukas K. (lukas_k)


Lesenswert?

Danke für die Antwort natürlich. Das war es.
Da ich gerade mit dem Buch Microcontroller Basics von John Davies 
arbeite, hätte ich noch eine andere Frage:
In dem Kapitel über Interrupts ist auch eine Aufgabe mit einem 
Piezo-Lautsprecher enthalten. Der G2553 besitzt onboard keinen, würde 
stattdessen ein Speaker vom PC-Mainboard funktionieren? Wie ist denn da 
die Spannung?

von 20 nach 1 (Gast)


Lesenswert?

Ich kenne das Beispiel nicht. Es geht wahrscheinlich um PWM. Dann würde 
ich einen Transistor als Schaltverstärker einsetzen, falls es ein 
niederohmiger LS ist.

http://processors.wiki.ti.com/index.php/Playing_The_Imperial_March

von Lukas K. (lukas_k)


Lesenswert?

In dem Beispiel geht es darum, Morse-Signale per Piezo-Buzzer 
wiederzugeben. Dazu wird Wechselstrom durch Wechseln der beiden 
Output-Pins von 3 auf 0 Volt abwechselnd erzeugt.
Über den Speaker weiß ich nichts, er war beim Sharkoon-Gehäuse dabei und 
es steht ein Plus und "DS" drauf. Er soll dabei halt nicht zu Schaden 
kommen.

: Bearbeitet durch User
von Josef (Gast)


Lesenswert?

Bei Davies wird der Piezo zwischen zwei Out-Pins gehaengt, ohne 
irgendwelche Widerstaende.

Einen niederohmigen LS (oder genauer einen induktiven LS) kannst
du so nicht anschliessen.

Die Frage ist, was fuer einen LS du genau hast.

von Josef (Gast)


Lesenswert?

Ach ja, Schaden wird eher der MSP nehmen.

von 10 vor 9 (Gast)


Lesenswert?

Lukas K. schrieb:
> Über den Speaker weiß ich nichts

Dann könnte ein Bild helfen. ;-)

von Lukas K. (Gast)


Angehängte Dateien:

Lesenswert?

Hier wären zwei Bilder, falls das was hilft.

von Erik (Gast)


Lesenswert?

Hallo Lukas K,

auf meinen alten Board wird dieser Sound Transducer

über einen Transistor angesteuert  ausgangsport direkt an Basis (BC548C)

Kollector an Plus 3,1V  Emitter an Widertsand 120Ohm dann Transduceer

gegen Masse (Schutzdiode am Tranducer wie bei Relais )



mfg Erik

von Lukas K. (lukas_k)


Lesenswert?

Mal eine Frage, die relativ blöde klingt wahrscheinlich. Wenn ich einen 
DIP-Schalter als Eingang nehme, und dann aufgrund der Eingabe ein 
Interrupt ausgelöst und dadurch eine bestimmte Aktion durchgeführt wird, 
z.B. Board-Led leuchtet, wie hoch muss ich dann den Widerstand zwischen 
Vcc (3,3V) Dip-Schalter und dem Inputpin wählen?
Hab wie gesagt kaum Erfahrung in dem Bereich, also Sorry.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Lukas K. schrieb:
> Wenn ich einen DIP-Schalter als Eingang nehme, und dann aufgrund der
> Eingabe ein Interrupt ausgelöst und dadurch eine bestimmte Aktion
> durchgeführt wird

Das wird nicht nur einmal geschehen -- Prellen. Schalter/Taster etc. 
gehören nicht an Leitungen, die Interrupts auslösen.

Als Pullup-Widerstand kannst Du ein paar Kiloohm verwenden, 
beispielsweise 4k7.

von go ti (Gast)


Lesenswert?

Nach dem ersten Code nutzt du das Launchpad "G" Value Line. Du bekommst 
den Schaltplan dafür und kannst sehen, wie TI das mit dem Taster gemacht 
hat.

Ein Taster per Interrupt macht schon Sinn. Man kann damit den MSP aus 
dem Schlaf wecken. ;-)

Entprellen geht einfach. Der Port Interrupt wird einfach für eine kurze 
Zeit gesperrt.

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.