mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM auf einem LPC2101


Autor: Eduard Steinberg (rfk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits. Leider habe ich auf meinem LPC2101 ein Problem beim 
Betrieb des P0.8 (MAT2.1) im PWM Modus (ohne Interrupts). Folgenden Code 
habe ich bisher:
// Configure P0.8
PINSEL0 &= ~(3<<16);
PINSEL0 |= 2<<16;

T2TCR = 1<<1;    // Reset TC and PC, disable timer
T2PR = 5;    // Prescaling
T2MCR = 1<<10;    // Reset on MR3 match
PWM0CON = 1<<3;    // Use single edged PWM for MR3
T2EMR = 1<<1 | 3<<6;  // Enable MAT2.1 and set toggle mode

// Setup PWM parameters
unsigned short cycles = 49152;
T2MR3 = cycles;    // Period duration
T2MR1 = cycles/4;  // Pulse width
T2TCR = 1<<0;    // Enable counter

Die Werte für Prescaling und die 'cycles' Variable werden normalerweise 
ausgerechnet, die obigen Werte sind nur Beispiele für F=200Hz 
(PCLK=58,982,400Hz). Mein Problem ist, dass der Puls für 5ms konstant 
HIGH und anschließend für 5ms konstant LOW ist (dann wieder 5ms HIGH 
usw.). MR1 wird scheinbar ignoriert. Hat jemand eine Idee, warum das so 
ist?

Danke!

Autor: Omega G. (omega) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich recht erinnere, ist da der Fehler:
T2EMR = 1<<1 | 3<<6;  // Enable MAT2.1 and set toggle mode
Das muss lauten:
T2EMR = 1<<1 | 1<<7;  // Enable MAT2.1 and set toggle mode

Autor: Eduard Steinberg (rfk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort, funktioniert aber so leider auch nicht. In dem 
Fall bleibt das Signal konstant HIGH.

Autor: Eduard Steinberg (rfk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem hat sich erledigt. Das Setzen von T2EMR war falsch, außerdem 
muss im PWMCON Register nicht das Bit der Periodendauer (MR3), sondern 
der Pulsbreite (MR1) gesetzt werden.
// Configure P0.8
PINSEL0 &= ~(3<<16);
PINSEL0 |= 2<<16;

T2TCR = 1<<1;    // Reset TC and PC, disable timer
T2PR = 5;    // Prescaling
T2MCR = 1<<10;    // Reset on MR3 match
PWM0CON = 1<<1;    // Use single edged PWM for MR1

// Setup PWM parameters
unsigned short cycles = 49152;
T2MR3 = cycles;    // Period duration
T2MR1 = cycles/4;  // Pulse width
T2TCR = 1<<0;    // Enable counter

Danke trotzdem an alle.

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.