Недавно заинтересовался микроконтроллерами AVR, собрал программатор Громова, приобрел Tiny 2313V, светодиоды, помигал, не особо впечатлило. Встречал в инете информацию, если конечно правильно понял, что с помощью ШИМа организованного софтово на МК можно добиться от RGB ленты свечения любым цветом. Хотелось бы добиться, чтобы цвета менялись плавно. С ШИМом раньше никогда дела не имел, но у микроконтроллера для этого, как мне представляется достаточно сконфигурировать 3 ноги (порта) на выход, и подключить ленту через ключи, запитав от 12 вольт, все остальное выполняет софт ? Просьба подсказать где можно почитать про реализацию задуманного, а желательно сразу скачать прошивку под Tiny 2313, или исходники, потому что свои знания по программированию заканчиваются на уровне помигать светодиодами. RGB лента, по моему, у меня с общим анодом. Набросал схемку подключения RGB ленты через ключи, по моему при подключении транзисторов в ключевом режиме, резистор в цепи базы - коллектора не нужен, иначе транзистор будет работать не в ключевом, а в усилительном режиме ? А если нужен, то какого номинала, 47 КОм достаточно ? http://s020.radikal.ru/i713/1402/dc/1053f38be2db.jpg
P.S. Сейчас погуглил, между базой транзистора и портом МК поставлю резистор на 3 КОм. Все еще не понятно, нужен ли резистор база - коллектор.
Софтовый ШИМ в вашем случае не нужен. В микроконтроллере 2313 уже есть 4 аппаратных ШИМ канала. Предлагаю не париться с транзисторами, а поставить сборку транзисторов дарлингтона uln2003. Для ленты с общим анодом как раз подойдет. Там 7 или 8 линий, содиняете попарно и получаете ток до 1А на канал.
Вот недавно делал светодиодную Проц ATmega 48.
Вот код который плавно переливается всем цветами радуги. Управление сделал по экспоненте, что б плавнее зажигались светодиоды.
Использовал аппаратный ШИМ.
// R G B
PORTD.0=1;
//красного -- желтый
for(i=0;i<255;i++) {delay_ms(20);OCR1BL=exp(i);}
PORTD.0=0;
// желтый
for(i=0;i<255;i++) {delay_ms(20);OCR0B=exp(255-i);}OCR0B=0;
PORTD.0=1;
// зеленый
for(i=0;i<255;i++) {delay_ms(20);OCR2B=exp(i);}
PORTD.0=0;
// голубой
for(i=0;i<255;i++) {delay_ms(20);OCR1BL=exp(255-i);}OCR1BL=0;
PORTD.0=1;
// синий
for(i=0;i<255;i++) {delay_ms(20);OCR0B=exp(i);}
PORTD.0=0;
// фиол
for(i=0;i<255;i++) {delay_ms(20);OCR2B=exp(255-i);} OCR2B=0;
подпрограмма exp
long int exp(long int x)
{
long int y;
y=x;
y=y*x;
y=y/255;
return (y);
}
получилось очень даже симпатично))