PWM auf einem LPC2101

OP #940296
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:
1
// Configure P0.8
2
PINSEL0 &= ~(3<<16);
3
PINSEL0 |= 2<<16;
4

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

11
// Setup PWM parameters
12
unsigned short cycles = 49152;
13
T2MR3 = cycles;    // Period duration
14
T2MR1 = cycles/4;  // Pulse width
15
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!
OP #942007
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.
1
// Configure P0.8
2
PINSEL0 &= ~(3<<16);
3
PINSEL0 |= 2<<16;
4

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

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

Danke trotzdem an alle.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren