ШИМ с ATtiny24
#11
Проверил в Протеусе, все работает.
#12
(01-11-2021, 17:54)msmmmm : Было бы логично предположить, что если регистр OCR0A теперь занят под ТОР, то скважность теперь будет регулироваться с помощью OCR0В, ну и выход нужно соответственно настроить.

Не вижу я тут логики...
И какой выход и как настраивать?... Что-то еще можно добавить к настройкам вывода BP2 ?...
#13
DDRA = 1<<PA7;
  TCCR0A = 1<<COM0B1|0<<COM0B0|1<<WGM01|1<<WGM00;
  TCCR0B = 1<<WGM02|1<<CS00;
  OCR0A = 150;
  OCR0B = 100;

И все. Генерит, меняется.
#14
Получилось, черт ее дери...
Правда, выход теперь на другой порт, но это не принципиально.
Спасибо!!!
#15
...И я не понимаю как это происходит )))))))
#16
(02-11-2021, 16:13)Globus_vrn : И я не понимаю как это происходит )))))))
Так оно во всех МК приблизительно одинаково... Если тактовая частота 1МГц, то значение регистра OCR0A - это буквально период ШИМ в мкс. Значение регистра OCR0В - не скважность, а коэффициент заполнения ШИМ. Если настроить счетчик на неинвертирующий выход без предделителя, то при сбросе TCNT0, на выходе установится 1, она там будет до совпадения TCNT0 и OCR0В, в этот момент на выходе установится 0, но счетчик продолжит считать. При совпадении TCNT0 и OCR0А счетчик сбрасывается на 0 и так по циклу. Понятно, что если нужно регулировать коэффициент заполнения (величина, обратная скважности), то достаточно изменять OCR0В в диапазоне 0-OCR0А. А если нужно менять период ШИМ не изменяя скважности, то вместе с OCR0А нужно пропорционально изменять и OCR0В.
#17
(03-11-2021, 00:19)msmmmm : то вместе с OCR0А нужно пропорционально изменять и OCR0В.
Пропорции...
Вот, кстати, еще один неприятный момент. В STM не было проблем с вычислением числа с плавающей точкой. в Atmel я столкнулся с тем, что это надо ручками писать самостоятельно.
Поэтому я пока уменьшаю частоту увеличением OCR0A, а величину заполнения оставляю постоянной. Получается, что скважность с увеличением частоты уменьшается.
#18
(03-11-2021, 14:33)Globus_vrn : в Atmel я столкнулся с тем, что это надо ручками писать самостоятельно.
Не нужны там вычисления с плавающей точкой. В сети полно статей как от них избавиться.
#19
В продолжение темы такую задачу нарисовали:
Есть две величины , полученные из АЦП (по одному байту в каждой 0-255). Нужно на двух выводах контроллера организовать ШИМ с одинаковой частотой, но скважностью, соответствующей числу в АЦП. Это вообще реально сделать?
#20
Если не нужно плавно частоту регулировать, выбирай ШИМ с топом 0xFF, настраивай два вывода (ОС0А и ОС0В) и записью в регистры OCR0А и OCR0В регулируй соответственно скважность.
Если нужно плавно настраивать частоту, посмотри режимы таймера1. Там есть с топом ICR1, остальное аналогично таймеру0. Но таймер1 16 битный, со своей спецификой.