Forum: Mikrocontroller und Digitale Elektronik MSP430 Piezo Probleme


von Tim H. (msp430h)


Lesenswert?

Hallo zusammen,

vorab ein danke an alle für eure Hilfe.

Durch meinen letzten Beitrag im Forum bin ich schlauer geworden wie mit 
einem piezo über Programmierung des msp430 Töne erzeugt werden können.

Nach dem ich die Informationen alle hatte habe ich mich an die 
Programmierung gemacht:
1
#include <msp430.h> 
2
#include <msp430g2452.h>
3
4
#define BUZZER BIT4
5
6
/*4kHz = 1 mhz / 4kHz = 250 ccr
7
 * P1.4 BUZZER TA0.2
8
 */
9
int main(void) {
10
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer
11
12
    DCOCTL = CALDCO_8MHZ;      //CPU Geschwindigkeit auf 8Mhz einstellen
13
    BCSCTL1 = CALBC1_8MHZ;
14
    BCSCTL2 = DIVS_3;        //Die SMCLK auf 1 MHZ einstellen mit dem vorteiler
15
                    //(8 (DCO/8 = 1Mhz))
16
17
    // Ports für den buzzer
18
    P1SEL = BUZZER;          //Ausgang timer a nutzen TimerA0.2
19
    P1SEL2 = BUZZER;
20
    P1DIR = BUZZER;
21
22
23
    //TimerA
24
    TA0CTL = TASSEL_2 + ID_0 + MC_1;// SMCLK für timer clock verwenden, up mode
25
    TACCR0 = 500;          // 2kHz; TimerA
26
    TACCR1 = 250;          // Länge der dauer von high und low
27
    CCTL1 = OUTMOD_7;        // Reset/ Set
28
29
   while(1){}
30
  //damit keine warnung
31
  //return 0;
32
}

ich nutze den folgende Piezo
http://media.digikey.com/pdf/Data%20Sheets/TDK%20PDFs/PS2220P02%20ENG3.pdf

leider kommt kein ton, auch nicht ein knacken was meiner meinung nach 
beim einschalten doch passiert sollte da der piezo doch Strom bekommt.

ich stell mir das vor wie erschrocken zu werden (kurz zucken und das war 
es) macht er aber leider nicht.

könntet ihr mir bitte helfen und einen blick über meinen code werfen?
muss ich eine ISR für die CCR0 & CCR1 erstellen?

danke

von lrep (Gast)


Lesenswert?

Tim H. schrieb:
> while(1){}
>   //damit keine warnung
>   //return 0;
> }

Und wo gibst du eine Wechselspannung auf den Piezo?

von Easy (Gast)


Lesenswert?

lrep schrieb:
> Und wo gibst du eine Wechselspannung auf den Piezo?

Das macht die HW von alleine.

Das CCR1 wirkt auf die TA1 Ausgänge. Für den TA2 musst du CCR2 benutzen.

Warum machst du einen neuen Thread auf?

von Tim H. (msp430h)


Lesenswert?

Tim H. schrieb:
> TACCR1 = 250;          // Länge der dauer von high und low

Hallo Easy,

ich habe folgende Zeile geändert im Code, aber es tut sich nichts.
zum Verständnis.

die angaben im Datenblatt mit Timer_Ax.2 ....

da bezieht sich hinter dem Punkt die zahl auf das CCRx register?


ich habe nicht nach gedacht das dass Thema ja das gleiche ist 
Entschuldigung.

von Tim H. (msp430h)


Lesenswert?

Tim H. schrieb:
> CCTL1 = OUTMOD_7;        // Reset/ Set

hallo zusammen ich habe meinen Fehler gefunden.

danke Easy für die Hilfe.

habe das glaube ich jetzt verstanden.
Die angeben mit dem TA0.2 bedeuten das ich auch die CCTL2 nutzen muss 
genau so wie das CCR2.

Kurz gesagt die 2 im Daten Blatt (TA0.2) sagt mir welches CCRx und 
welches CCTLx ich nutzen muss um an dem pin den Timer zu nutzen.

der neue code sieht wie folgt aus:
1
#include <msp430.h> 
2
#include <msp430g2452.h>
3
4
#define BUZZER BIT4
5
6
/*4kHz = 1 mhz / 4kHz = 250 ccr
7
 * P1.4 BUZZER TA0.2
8
 */
9
int main(void) {
10
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer
11
12
    DCOCTL = CALDCO_8MHZ;      //CPU Geschwindigkeit auf 8Mhz einstellen
13
    BCSCTL1 = CALBC1_8MHZ;
14
    BCSCTL2 = DIVS_3;        //Die SMCLK auf 1 MHZ einstellen mit dem vorteiler
15
                    //(8 (DCO/8 = 1Mhz))
16
17
    // Ports für den buzzer
18
    P1SEL = BUZZER;          //Ausgang timer a nutzen TimerA0.2
19
    P1SEL2 = BUZZER;
20
    P1DIR = BUZZER;
21
22
23
    //TimerA
24
    TA0CTL = TASSEL_2 + ID_0 + MC_1;// SMCLK für timer clock verwenden, up mode
25
    TACCR0 = 500;          // 2kHz; TimerA
26
    TACCR2 = 250;          // Länge der dauer von high und low
27
    TACCTL2 = OUTMOD_6;        // Reset/ Set
28
29
   while(1){}
30
  //damit keine warnung
31
  //return 0;
32
}

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.