А кстати.. Вот если вернуться так сказать к истокам то в примере с использованием модуля ШИМ есть небольшая недоработка - там при нажатии кнопки больше или меньше контроллер не останавливается в максимальном или минимальном пределе- а проскакивает его и начинает новый цикл с минимума.. Это неплохо для общего понимания теории регулирования скважности, но на практике это мало применимо..
Вот исправил и доработал код- здесь начальное значение задано нулевым...И при нажатии кнопки больше происходит плавное нарастание до максимума с дискретностью 10% .. И с остановом в конечной точке. То же и при уменьшении.
Код:
unsigned short j, old_j;
void Init() {
CMCON=7; // все входы цифровые, компараторы отключены
PORTB = 0; // установили PORTB в 0
TRISB = 0; // настроили PORTB на выход
PORTA = 0xff; // установили PORTA в 1
TRISA = 0xff; // настроили PORTA на вход
Pwm_Init(5000); // настроили ШИМ модуль, период ШИМ - 5 кГц
}//
void main() {
Init();
j = 0; // начальная инициализация j
old_j = 0; // начальная инициализация old_j
Pwm_Start(); // запуск ШИМ
while (1) { // устроили бесконечный цикл
if (Button(&PORTA, 0,1,0)){ // нажимаем кнопку на RA0
if(J<=245) j +=10;
else j = 255;} // увеличивается j (яркость больше)
if (Button(&PORTA, 1,1,0)){ // нажимаем кнопку на RA1
if (j>= 10) J -=10;
else j = 0;} // уменьшается j (яркость меньше)
if (old_j != j) { // если было изменение j
Pwm_Change_Duty(j); // то изменяем параметры ШИМ
old_j = j; // и сохраняем новое значение
}
Delay_ms(200); // задержка 200 мсек
}
}//~