Нашел код 2х-канального. Чуть допилил - работает прекрасно. Код на прерываниях компараторов АВ Таймера1. Обнуление таймера - по INT0. Меня всегда тянет впихивать невпихуемое. Места в памяти МК дофига. Решил добавить канал. Тупо скопипастил обработчик прерывания, чуток подпилил под пины МК - но упёрся в отсутствие 3-го компаратора и вектора. Первый раз взялся за прерывания и обломился.)))))))))))) Использовать Таймер0 не хочется, на нем обычно много чего по умолчанию сидит. Мне представляется идея использовать вообще один компаратор. То есть обработчик прерывания начинает с меньшего "угла". Перед завершением - грузит в компаратор следующий "угол", как-то передает номер канала, и по-сути вызывает сам себя. И так хоть 256 раз. Но тут возникают коллизии одинакового угла для нескольких каналов одновременно. Ткните носом - может кто уже реализовал такую идею ? Или есть что проще ? Думаю что идея рабочая, но превратить ее в код у меня мозгов не хватит. С уважением.
Предполагаю, что можно в прерывании таймера декрементировать три переменные, при обнулении включать соответствующий пин. По INT0 выключать все три пина и рассчитывать те самые три переменные.
Заголовок сообщения: Re: Как сделать трех(++)-канальный фазовый диммер на ATtiny8
Добавлено: Сб янв 13, 2024 02:58:20
Модератор
Карма: 90
Рейтинг сообщений: 1304
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4515 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Для диммера нужно всего лишь 1 внешнее прерывание + 1 таймер. И хоть 1000 каналов делай. Всё будет зависеть от разрешения (кол-во шагов) скважности. Например, для 100 шагов таймер будет крутиться с частотой 10 КГц. Главное, чтобы проц успел обработать все каналы за промежуток времени между тиками таймера.
В Компэл представлены и аккумуляторы 21700 с емкостями 4000 мА⋅ч и 5000 мА⋅ч (INR21700-40P и INR21700-50E, соответственно). Аккумуляторы INR21700-50E характеризуются повышенной емкостью и предназначены для устройств с длительным сроком службы. Для приложений, где требуется экстремальный ток разряда до 30 или 50 А, подойдет аккумулятор INR21700-40P. Аккумуляторы INR21700 предназначены для электротранспорта, а также для промышленных и бытовых приложений.
Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. EVE является поставщиком аккумуляторных элементов круглого формата для электрических моделей автомобилей.
Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного.
Для диммера нужно всего лишь 1 внешнее прерывание + 1 таймер. И хоть 1000 каналов делай. Всё будет зависеть от разрешения (кол-во шагов) скважности. Например, для 100 шагов таймер будет крутиться с частотой 10 КГц. Главное, чтобы проц успел обработать все каналы за промежуток времени между тиками таймера.
Декрементировать в прерывании таймера три переменные. Когда число уменьшилось до 5 (например) - включить соответствующий канал, а при нуле - выключить. Этим сформируются фазы и импульсы открытия симисторов. Блин. Простая идея, а в голову не пришло. Зациклился на прерываниях по компаратору. Надо всего ТРИ канала, так что фазовый шум вряд ли будет виден. Большое спасибо !
Таймер 0 ардуино АВР платформ можно использовать - только в таком случае он будет генерировать ту же микросекунду, прерывание по которой будет смещено чуток в сторону от "системных часов". Полученный сигнал можно использовать для своих нужд. Основано на "свободном" OCR0A у группы атмега328. Проверено на платках с атмегой328 - в случае других платформ надо смотреть их аппаратную начинку.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения