Вот, держите, наваял по-быстрому в CVAVR. Под WinAVR, надеюсь переделайте без проблем.dt_andrew писал(а):а кодом помогите , чтоб я не заморачивался по этому поводу
ШИМ аппаратный, выводится на OC1A (PD5). Можно вывести на OC1B (PD4), для этого при инициализации таймера указываем значения регистров:
TCCR1A=0x23
TCCR1B=0x09
Для гашения светодиода (при ШИМ=0 все равно проскакивают импульсы, хоть на глаз и не видно) обнуляем значения этих регистров.
Переменную установки скважности ШИМ можно менять в пределах от 0 до 1023 (10-битный ШИМ). Однако при значениях, близких к крайним изменения не заметны. Нужно экспериментальным способом найти границу.
Предлагаю сделать так:
- STANDBY - ШИМ выключен (подсветка отсутствует)
- Включаем - ШИМ в течение 1 секунды увеличивается от минимума до ранее сохраненного (если ничего не запоминали - до максимума) значения (подсветка плавно загорается)
- Включен - ШИМ на ранее сохраненном значении, или (если ничего не сохраняли) близкому к максимальному (все же не 5V нам надо выводить, а 4,2V, поэтому ШИМ-им по-тихоньку)
- Выключаем - ШИМ в течение 1 секунды уменьшается от ранее сохраненного (если ничего не запоминали - от максимума) до минимума (подсветка плавно гаснет)
В PROTEUS просимулировал. Работает. Можете залить прошивку в МК, подключить к PD5 через резистор 300 Ом светодиод. При включении светодиод будет гореть на 2/3 от полной яркости.
- Вложения
-
- PWM_Mega32.zip
- Пример вывода ШИМ на PD5 Mega32 с прошивкой
- (825 байт) 240 скачиваний


