"Дышащая" подсветка
если задача только в том, чтобы мигать светодиодами, то спокойно можно использовать таймер и вручную мигать.
Простейший расчет:
16МГц тактовая частота процессора/100Гц допустимая частота мигания светодиодов/256уверен, что 256 градаций яркости - больше, чем надо = максимум 625 тактов на прерывание. Для обслуживания 6 каналов - больше чем достаточно. В прерывании достали переменную по каждому каналу, сравнили с счетчиком, если равно - перекинули соответствующую ногу.
Примерно как написано ниже не проверял на синтаксис, но суть понятна, думаю.
#define PWM_Count 6
uint8_t volatile Counter;
uint8_t volatile PWM_DataPWM_Count;
uint8_t volatile PWM_PinsPWM_Count;
void Timervoid
uint8_t i;
if Counter==0
for i=0;i<PWM_Count;i
PinPWM_Pinsi=1;
for i=0;i<PWM_Count;i
if PWM_Datai==i
PinPWM_Pinsi=0;
UPD.
Интересно было бы если бы подсветка горела именно там, где надо, а не вся сторона. Но чую, что это реализовать будет уже сильно посложнее. Хотя почти уверен, что ардуинки хватит и для этого. Повесить динамическую индикацию, можно еще сдвиговые регистры использовать...
|