Не удается заставить ШИМ работать на PIC16F877 (PICC)

Я пытался использовать модуль PWM на микроконтроллере PIC16F877, но все, что я получил, - это плоский низкий уровень на обоих выводах CCP1 / CCP2.

Код настройки и запуска модуля ШИМ следующий.

// Configure PWM
// Timer 2 (PWM timebase)
TMR2 = 0;    //Clear timer
TOUTPS0 = 0;
TOUTPS1 = 0;
TOUTPS2 = 0;
TOUTPS3 = 1; //Postscaler -> 8 (previously set to 0)
T2CKPS0 = 0;
T2CKPS1 = 1; //Prescaler -> 16
TMR2IF  = 0;
TMR2IE  = 1; //Interrupt
PR2 = 233;   //~2.5ms

//PWM1 config
CCPR1L = 0x0F;
CCP1X = 0;
CCP1Y = 0; //PWM1 duty cycle 
TRISB2 = 0;  //CCP1 pin is output (Error is here, see below)
TMR2ON = 1;  //Enable timer 
CCP1CON = 0x0c; //CPP1 is a PWM

Может быть полезен любой код (PICC), который может успешно запустить ШИМ на устройствах pic16.


person NeonMan    schedule 04.10.2012    source источник
comment
TOUTPS[0-3] указывает, что 0000 является 1:1 постскалярным   -  person Dan    schedule 04.10.2012
comment
Postcaler был временно установлен на 0, это не проблема. Нашел проблему, см. Ниже.   -  person NeonMan    schedule 04.10.2012


Ответы (1)


Пин CCP1 устанавливался неправильно. 'TRISB2 = 0' должно быть 'TRISC2 = 0'.

// Timer 2 (PWM timebase)
TMR2 = 0;    //Clear timer
TOUTPS0 = 0;
TOUTPS1 = 0;
TOUTPS2 = 0;
TOUTPS3 = 1; //Postscaler -> 8
T2CKPS0 = 0;
T2CKPS1 = 1; //Prescaler -> 16
TMR2IF  = 0;
TMR2IE  = 1; //Interrupt
PR2 = 233;   //~2.5ms

//PWM1 config
CCPR1L = 0xFF;
CCP1X = 1;
CCP1Y = 1; //PWM1 duty cycle 
TRISC2 = 0; //Previously was TRISB2
TMR2ON = 1;
CCP1CON = 0x0c; //CPP1 is a PWM
person NeonMan    schedule 04.10.2012