ПРивет, коллеги! Решил поделиться некими наработками.
Для выполнения некоей задачи мне необходимо 4 канала ШИМа, управляемых от аналоговых сигналов.
Искал, нашел, сделал макет. Написано для atmega1280 на С в AVRStudio 4.19.
Для разнообразия сделал 6 каналов, все работают,
Значения для установки заполнеия ШИМа читются из массива adc_data[n]
ТАм все в комментах написано.
Еще такую увидел интересную, на мой взгляд штуку - изменение значения ШИМа на других каналах относительно выбранного:
Здесь можно настроить выход ШИМа для трех каналов(для других трех аналогично) - частоту, инверсию, фазу и пр, согласно таблиц в даташите:
Чтобы переделать для atmega16 надо просто переставить значения регистров и выходные порты переписать.
(OCR3B - это вывод OC3B на контроллере)
Для выполнения некоей задачи мне необходимо 4 канала ШИМа, управляемых от аналоговых сигналов.
Искал, нашел, сделал макет. Написано для atmega1280 на С в AVRStudio 4.19.
Для разнообразия сделал 6 каналов, все работают,
Значения для установки заполнеия ШИМа читются из массива adc_data[n]
ТАм все в комментах написано.
Еще такую увидел интересную, на мой взгляд штуку - изменение значения ШИМа на других каналах относительно выбранного:
Код: Выделить всё
OCR3A = adc_data[0];//и так назначаем выходы контроллера .....
OCR3B = adc_data[1] /0x02; //тут будет значение ШИМа вдвое меньшим, не более 50% при максимуме на входе АЦП
OCR3C = adc_data[2]/0x05;//тут в пять раз, т.е. ШИМа будет только 20%
OCR4A = adc_data[3]*adc_data[0]/0xff; //а тут будет зависимость от adc_data[0] Можно разные арифметические действия, по усмотрению. Код: Выделить всё
TCCR3C = 0b10101001;
TCCR3B = 0b10100001;
TCCR3A = 0b10101001;(OCR3B - это вывод OC3B на контроллере)
- Вложения
-
- mega2560.c
- (1.92 КБ) 283 скачивания
