Forum: Mikrocontroller und Digitale Elektronik MSP430 PWM


von Marco (Gast)


Lesenswert?

Hallo,


ich steuere einen L293D an. Das funktioniert auch prima. Nun wollte ich
auf den Enable-Eingang eine PWM legen, um die Geschwindigkeit des an den
L293D angeschlossenen Motors zu regeln. Dazu habe ich folgenden Code
erstellt. Bis dahin läuft das auch:

  CCR0 = 512-1;                             // PWM Period
  CCTL1 = OUTMOD_7;                         // CCR1 reset/set
  CCR1 = 255;                               // CCR1 PWM duty cycle
  CCTL2 = OUTMOD_7;                         // CCR2 reset/set
  CCR2 = 0;                                 // CCR2 PWM duty cycle
  TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode
  _BIS_SR(LPM3_bits);                       // Enter LPM3

Nun wollte ich folgendes realisieren. Ich wollte an den Controller
Tasten anschließen und abhängig von Tastendrücken, wollte ich die
Drehrichtung, GEschwindigkeit usw. des Motor ändern. Ich bekomme alles
hin, bis auf die Geschwindigkeiseinstellung. Hier mal ein
Codeausschnitt:

  CCR0 = 512-1;                             // PWM Period
  CCTL1 = OUTMOD_7;                         // CCR1 reset/set
  CCR1 = 0;                                 // CCR1 PWM duty cycle
  CCTL2 = OUTMOD_7;                         // CCR2 reset/set
  CCR2 = 0;                                 // CCR2 PWM duty cycle
  TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode
  _BIS_SR(LPM3_bits);                       // Enter LPM3

  for(;;)
  {
    if ((P5IN & 0x01) == 0)        // Tast 1
    {
      // Motor rechts herum drehen
      // M1en= 1, M1b= 0; M1a= 1;
      CCR1 = 255;                   // CCR1 PWM duty cycle
      P2OUT|=0x20;                  // M1a auf High
      P2OUT&=~0x40;                 // M1b auf High
    }/* if ((P5IN & 0x01) == 0) */

    if ((P5IN & 0x02) == 0)         // Tast 2
    {
      // Motor links herum drehen
      // M1en= 1, M1b= 1; M1a= 0;
      CCR1 = 255;                   // CCR1 PWM duty cycle
      P2OUT|=0x40;                  // M1b auf High
      P2OUT&=~0x20;                 // M1a auf Low
    }/* if ((P5IN & 0x02) == 0) */

mit den Zeilen:

CCR1 = 255;                   // CCR1 PWM duty cycle

wollte ich halt die Geschwindigkeit einstellen. Das funktioniert aber
leider nicht, wenn ich das oben irekt in der INitialisierung einfüge,
also über der for-Schleife, läuft das ganze.

Kann man den Wert von "CCR1" nicht einfaach so ändern oder wie muss
ich das anstellen? Jemand ne Idee?

Gruß
Marco

von Marco (Gast)


Lesenswert?

Hallo,

ich hab den Fehler schon gefunden. Ich sollte

           "_BIS_SR(LPM3_bits);           // Enter LPM3"

weglassen. Dann gehts.

Gruß
Marco

von Lanius (Gast)


Lesenswert?

oder die Taster auf Interrupt-Eingänge legen und dem MC beim Tasten
dadurch wieder aufwecken.

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.