Доброго времени суток. Нужно сделать ГКЧ от 50 до 150кГц на 18f452. Использую ШИМ. Пересчитываю частоту в период, и соответственно изменяю время заполнения, что бы при любом периоде скважность была 50%. На частотах близких к 50кГц скважность 50%. С ростом частоты скважность почему-то увеличивается (примерно 80% на 150кГц), что для ГКЧ не есть хорошо. В моделях MPLAB и Proteus скважность выдерживается.
Инициализация ШИМ
Код
unsigned int imp;
PR2 = (char)(1000/((float)f*0.2) + 0.5) - 1;//4Tosc = 0.2мкс, предделитель не используется, f - частота в кГц
imp = 2*PR2 + 2; // длительность импульса 1/2 периода (CCPR1L:CCP1CON<5:4>) = 2[(PR2) + 1]
CCPR1L = (imp >> 2) & 0xFF; // старшие 8 бит
CCP1CONbits.DC1B0 = imp & 0x01;
CCP1CONbits.DC1B1 = (imp >> 1) & 0x01; // младшии 2 бита