ссылка про 768 светодиодов на обычной атмеге не работает
ссылка гуглится и выводит на ютуб: https://www.youtube.com/watch?v=IDSIjb1AUuU Там не 768, а поменьше, но все равно впечатляет. Сдвиговый регистр типа 74HC595 позволяет сделать по методу BAM регулирование ШИМа для светодиодов. Частота ШИМ получается невысокой, зато многоканальной. Светодиоду и 100 Гц хватит.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
LEDS_BRIGHT_VAL_BUF: // Буфер состояния светодиодов (1 байт) и обрабатываемых в данный момент битов-состояния светодиодов (второй байт). .byte QUANT_LEDS
Out_Leds_State_End: ldx LEDS_BAM_VAL ld r16, X+ out LEDS1_PORT, r16 ld r16, X out LEDS2_PORT, r16 ret //==================
//================== Proc_BAM_Save_Val: std Y+DISP_PROC_BAM, FSM_STATE ret //==================
//================== Proc_BAM: pushiwl Proc_BAM_Save_Val // Стек на сохранение переменных
ldy _PROC_BAM // Указатель на переменные. ldd FSM_STATE, Y+DISP_PROC_BAM // Считывание состояния автомата.
Proc_FSM Tab_FSM_PROC_BAM // Индексный переход. Состояние автомата - индекс обработчиков состояний.
Proc_BAM_Init: clr r16
out LEDS1_PORT, r16 out LEDS2_PORT, r16
ser r16 out LEDS1_DDR, r16 out LEDS2_DDR, r16
ldi ZH, HIGH(Table_Proc_BAM*2) // Установка указателя на таблицу эффектов. ldi ZL, LOW(Table_Proc_BAM*2) movw r15:r14, ZH:ZL
rcall Read_Prgm_Led_Bright_Val // Считывание из таблицы значений яркости. Адрес в POINT_BAM_VAL.
clr r16 out TCNT2, r16 // Сброс счетчика.
in r16, TIMSK setb r16, OCIE2 // Разрешение прерывания по совпадению. out TIMSK, r16
ldi r16, 1 mov CNT_BAM_BITS, r16
ldi r16, 0b10000000 mov BAM_OCR_VAL, r16 out OCR2, BAM_OCR_VAL // Установка первого тика BAM. // Примечание: так как это самое большое время (128) BAM, то вычисления нужно производить лучше в этот момент. lsr BAM_OCR_VAL // Сдвиг. Следующий тик BAM (0x01000000).
in r16, TCCR2 sbr r16, BAM_SPEED out TCCR2, r16
rcall Out_Leds_State // Вывод текущего состояния светодиодов.
Set_Timer Par_Tim_Proc_BAM // Установка таймера. PROC_BAM_TIME. Set_State _PROC_BAM_RUN // Установка состояния. Proc_BAM_Init_End: ret
Proc_BAM_Run: Proc_Timer Par_Tim_Proc_BAM // Обработчик таймера. Флаг SREG T=1 - время вышло. brtc Proc_BAM_Run_End
in r16, TIMSK clrb r16, OCIE2 // Отключаем прерывание, дабы не загадило следующее считываемое и записанное в ОЗУ значение яркости. out TIMSK, r16
in r16, TCCR2 cbr r16, BAM_SPEED // Останавливаем счетчик out TCCR2, r16
rcall Read_Prgm_Led_Bright_Val // Считывание из таблицы значений яркости. Адрес в POINT_BAM_VAL.
clr r16 out TCNT2, r16 // Сброс счетчика.
rcall Out_Leds_State // Вывод текущего состояния светодиодов.
ldi r16, 1<<OCF2 // Сброс флага прерывания по совпадению. out TIFR, r16
in r16, TIMSK setb r16, OCIE2 // Разрешение прерывания по совпадению. out TIMSK, r16
ldi r16, 1 mov CNT_BAM_BITS, r16
ldi r16, 0b10000000 mov BAM_OCR_VAL, r16 out OCR2, BAM_OCR_VAL // Установка первого тика BAM. // Примечание: так как это самое большое время (128) BAM, то вычисления нужно производить лучше в этот момент. lsr BAM_OCR_VAL // Сдвиг. Следующий тик BAM (0x01000000).
in r16, TCCR2 sbr r16, BAM_SPEED out TCCR2, r16
Set_Timer Par_Tim_Proc_BAM Proc_BAM_Run_End: ret //==================
а не подскажете, какой МК выбрать? нужно 5-6 каналов аппаратного ШИМ и плюс свободный таймер для программного ШИМа. ну и портов вывода не меньше 15 урезаю осетра до 4 аппаратных ШИМ. Атмега-88 мне в руки, да?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
управление кучей светодиодов. 4 канала на аппаратном ШИМе (оно красивее получается) и 9 каналов на программном (там и так сойдет). ШИМы будут работать по очереди, не одновременно
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Выше видеопример управлением 16-ю светодиодами. Можно было и 32 замутить. Но мне стало лень паять. Вдобавок для 32 светодиодов еще нужно править конструктор таблицы в Excel.
видео - это офигенно. но нет ли куска кода на баскоме? ну, для понимания. ну и все таки по моему вопросу - Атмега88 имеет 3 таймера и 6 каналов ШИМ. я могу 2 таймера использовать под аппаратный ШИМ и один оставить для программного, верно?
На баскоме вы навряд ли что-то готовое найдете. Поэтому только изучать алгоритмы. Правильно составленный алгоритм - вот что главное. Вам останется только программу по нему накидать. Думаете у меня были готовые примеры? Отнюдь, писал с нуля на ассемблере. Главное мне было понятно. Как работает BAM.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения