www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 PWM


Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab den Fehler schon gefunden. Ich sollte

           "_BIS_SR(LPM3_bits);           // Enter LPM3"

weglassen. Dann gehts.

Gruß
Marco

Autor: Lanius (Gast)
Datum:

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

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.