В данном слечае частота значения не имеет. В конфигурации таймера установил минимальную частоту. В CodeVision это делается легко. Результат конфигурации таймера можно увидеть в листинге начиная с
// Timer/Counter 1 initialization
Значение яркости будете вносить в OCR1AL. Например 255 соответствует максимальной яркости. Как TIMER1 досчитает до 255 начнет счет занова, и все это время на выходе будет 1. Если будет допустим 100, то досчитав до 100 TIMER1 сбросится, и на выходе будет 0. Светодиод потухнет. Врезультате его яркость будет казаться меньше. И т.д.
Время за которое светодиод будет набирать яркость и уменьшать при нажатии соответствующей кнопки определяется параметром функции delay(). Я установил 40 мс - delay_ms(40);
Если вы еще не знакомы с программированием МК и CodeVision вчастности, советую, вначале разобраться с самим CodeVision. Научиться пользоваться мастером программы (в меню в виде шестеренки). Это очень легко. Поуправляйте светодиодами на примере простойших программ. Иначе будет сложно сразу нырять в ШИМ. Да и вообще нужно уметь пользоваться мастером для любой работы.
Последний раз редактировалось delay Вс мар 23, 2008 17:22:27, всего редактировалось 1 раз.
Да, забыл отметить, что при маленькой частоте будут заметные мерцания светодиода. Этого можно избежать если увеличить частоту таемера.
Например
// Clock value: 15,625 kHz
TCCR1A=0x81;
TCCR1B=0x0C;
Есть мнение, что на такой частоте сложно получить плавное изменение яркости во всем диапазоне ШИМа. Т.е. эффективную регулировку можно будет осуществлять в узком диапазоне коэффициентов заполнения ШИМа.
Я опробывал. Регулируется давольно плавно. В самом конце диаппазона на уменьшение яркости при приближении к нулю, гаснет немного быстрее. Не знаю проблема ли это, да и вряли для регулировки яркости дисплея понадобится пользоваться этим участком. Freeman, а у вас, что получилось?