www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Msp430F5438 PWM


Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag
Ich bin´s wieder
ich habe einen Code hier im Forum gefunden, der für 
MSP430F149/MSP430F1611 geschrieben ist, und ich habe den umgeändert für 
MSP4305438 .Leider kommt er nicht raus beim Debuggen.Bleibt die ganze 
Zeit hier
(XT1->32khz und XT2->12MHz)
do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  } while (SFRIFG1&OFIFG);  



Hier ist der Code

#include <msp430x54x.h>



#define PWM_PERIOD_STEPS 512
unsigned int led_value = 0;            //value for counting trough pwmtable
unsigned int Key_debounce_FLAG;

unsigned int pwmtable_16[PWM_PERIOD_STEPS]={0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6,
6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11,
12, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 35, 36, 38,
40, 41, 43, 45, 47, 49, 52, 54, 56, 59, 61, 64, 67, 70,
73, 76, 79, 83, 87, 91, 95, 99, 103, 108, 112, 117, 123, 128,
134, 140, 146, 152, 159, 166, 173, 181, 189, 197, 206, 215, 225, 235,
245, 256, 267, 279, 292, 304, 318, 332, 347, 362, 378, 395, 412, 431,
450, 470, 490, 512, 535, 558, 583, 609, 636, 664, 693, 724, 756, 790,
825, 861, 899, 939, 981, 1024, 1069, 1117, 1166, 1218, 1272, 1328, 1387, 1448,
1512, 1579, 1649, 1722, 1798, 1878, 1961, 2048, 2139, 2233, 2332, 2435, 2543, 2656,
2773, 2896, 3025, 3158, 3298, 3444, 3597, 3756, 3922, 4096, 4277, 4467, 4664, 4871,
5087, 5312, 5547, 5793, 6049, 6317, 6596, 6889, 7194, 7512, 7845, 8192};

 
 
void init_OSZ(void)
{
  
  P5SEL |= 0x0C;                            // Port select XT2
    P7SEL |= 0x03;                            // Port select XT1

  
  UCSCTL6 &= ~(XT1OFF + XT2OFF);            // Set XT1 & XT2 On

do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  } while (SFRIFG1&OFIFG);                  // OSCFault flag still set?
  
     UCSCTL6 &= ~XT2DRIVE0; 
   UCSCTL4 |= SELS0 + SELM_2; 
 
  
                                                              
}

void init_Timer_A(void)
{
    TA1CCTL0 = CCIE;                                   // CCR0 interrupt enabled
    TA1CCR0 = 30000;
    TA1CTL = TASSEL_2 + MC_1 + ID_2;                  // SMCLK, up mode, Div auf /4
    //über MOD0 ausschalten!!

}
/*********************************************************************************************/


//Generate PWM
/********************************************************************************************/
void init_Timer_B(void)
{
    
    TBCCR0  = 65535;                           // PWM Periode
    TBCCTL1 = OUTMOD_7;                         //Set Reset Mode
    TBCCR1 = 100;
    
    TBCCTL2 = OUTMOD_7;
    TBCCR2 = 50;
    
    TBCCTL3 = OUTMOD_7;
    TBCCR3 = 125;
    
    TBCCTL4 = OUTMOD_7;
    TBCCR4 = 125;
    
    TBCCTL5 = OUTMOD_7;
    TBCCR5 = 125;
    
    TBCCTL6 = OUTMOD_7;
    TBCCR6 = 125;    
    
    TBCTL = TBSSEL_2 + MC_1 + ID_0;             //clocksource MCLK, up Mode, no div
    TBCCTL0 = CCIE;                 // enable CCR0 interrupt

}
/*********************************************************************************************/



/**********************************************************************************/
// Timer B0 interrupt service routine
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{   
   
}
/**********************************************************************************/

/**********************************************************************************/
// Timer A0 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_A (void)            
{ 
      if (led_value < PWM_PERIOD_STEPS - 1)
      {
          TBCCR1 = pwmtable_16[led_value];    //reload PWM Values
          TBCCR2 = pwmtable_16[led_value];
          TBCCR3 = pwmtable_16[led_value];
          TBCCR4 = pwmtable_16[led_value];
          TBCCR5 = pwmtable_16[led_value];
          TBCCR6 = pwmtable_16[led_value];
      
       led_value++;
      
      }  
if(led_value >= PWM_PERIOD_STEPS -2)
{
   led_value=0;
} 
    
}
/**********************************************************************************/

void init_PORTS(void)
{
       
    P1DIR |= BIT0;  
    P1OUT |= BIT0;             
}
/*********************************************************************************************/

void main(void)
{
  
     

    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  init_OSZ();
    init_PORTS();
    init_Timer_A();
    init_Timer_B();
    
     __bis_SR_register(LPM0_bits + GIE);
           


  while(1)
  {
    P1OUT ^= BIT0;                          // Toggle P1.0
    
  }  


}





Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die 5-er Serie vom MSP430 solltest Du keine Beispiele von so alten 
Controllern aus der 1-er Serie heranziehen. Zwar sieht schon alles noch 
ähnlich aus, aber praktisch alles wurde überarbeitet und unterscheidet 
sich in den Details.
Ich empfehle Dir daher, Dir die Codebeispiele für die 5-er Serie von der 
TI-Homepage runterzuladen. Dort ist alles enthalten was Du brauchst 
(Clock init, Timer, PWM, ...).
Die hier sollten passen:
http://www.ti.com/lit/zip/slac166

Übersicht zu MSP430 Beispielcode ist übrigens hier:
http://focus.ti.com/mcu/docs/mcuprodcodeexamples.t...

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Deine Antwort
genau das habe ich auch gemacht mit Hilfe von Exampels von Ti

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich habe jetzt
UCSCTL6 &= ~(XT1OFF + XT2OFF); // XT1 und XT2 on

auf
 UCSCTL6 &= ~XT1OFF ; geändert 
und ich habe bemerkt im bebugging er bleibt nicht mehr hier
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1&OFIFG); 

hängen.

Bedeutet das jetzt , dass der XT2 Kaput ist?
Das ist eigentlich MSP-EXP430F5438 board.

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sieht Dein Code ganz gut aus, fast gleich wie das 
Codebeispiel msp430x54x_UCS_7.c

Das einzige was mir auffällt ist, dass Du die folgende Zeile
UCSCTL6 |= XCAP_3;                        // Internal load cap
...nach dem Einschalten von den Quarzen weggelassen hast. Sind denn auf 
dem Board bereits Kondensatoren für den Quarz verbaut?

Irgendwie scheint es schon so zu sein, dass der Quarz nicht anschwingt.

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Johnny B. schrieb:
&gt; Sind denn auf dem Board bereits Kondensatoren für den Quarz 
verbaut?

ja 33pF ,
ich habe noch einen hier liegen (ohne Datenblatt).Ich hoffe, dass er mit 
C-33pF in Ordnung schwingt sonst muss ich die auch ausweichen

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
müssen die auch ausweichen :-)

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin s wieder und Sory für  die Störung .
ich habe raus gefunden ,dass ich keine XT2  habe .der Quarz was ich das 
habe  ist füt UBS-IC :-( .
wird es gehen mit XT1 und DCO ?

Autor: doofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt alles gelesen zu haben:

Ist nicht XT1 für den hochfrequenten Quarz und XT2 für den Uhrenquarz?

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doofi schrieb:
> Ohne jetzt alles gelesen zu haben:
> Ist nicht XT1 für den hochfrequenten Quarz und XT2 für den Uhrenquarz?

So in der Richtung  :-) XT1 Uhrenquarz und XT2 hochfrequenten

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.