Я еще в этом новичок. решил собрать себе подсветку для роликов на RGB светодиодах. Начал обсуждение своей схемы на схем.нет, но к сожалению помощи там получил мало. Схема пока что выглядит так (прикрепленный файл). Организован на контроллере программный шим (программа взята от сюда).
Самое первое нужна помощь в выставлении фьюзов. Прошивку заливаю с помощью ponyprog2000. Так же прикрепил файл как они у меня сейчас выглядят
В этом я совсем не понимаю
но думаю ног у меги много для этого дэвайса
10 задействовано из считай тридцати
да и кварец тогда желательно убрать в МК шо б не сотрёсся
tiny13 будет в самый раз. Здесь на форуме где-то про управление светодиодной лентой есть тема, посмотрите.
PS. мега8 ну уж больно шикарно для такого применения.
ага, в 13-й есть встроенный генератор на 9.6 мГц, чтоб шим и эффекты могли быть быстрее, а на Меге8 только 1-8 мгц. Кварц долой. Без кварца то и фьюзы менять вообще не надо будет
Ну мегу8 взял потому что была такая в наличии у меня и на ней начал делать опыты. И схема что я выложил, это еще не полный вариант. Выкладываю что вообще хочу. Прошу помощи кто умеет программировать AVR
программа контролера:
#include <avr/io.h>//подключаем библиотеку ввода/вывода
#define nop() {asm("nop");}//функция необходимая для реализации задержки
unsigned int i,p,pp,c,buf,ms,x;//перечисление переменных
// функция задержки
void delay_ms(int ms)
{
for (x=ms;x>0;x--)
nop ();
}
// функция ШИМ светодиода
void led0(int led, int i, int p) //где led - адрес светодиода, i - время включения светодиода
//p - время выключения
{
PORTD &= ~_BV(PD0);
delay_ms(i);
PORTD |= _BV(led);
delay_ms(p);
}
int main( void ) //главная программа
{
//конфигурирование на вывод порта D
DDRD |= _BV(PD0);//конфигурирование битов
DDRD |= _BV(PD1);//PD0, PD1 и PD2
DDRD |= _BV(PD2);//на выход
for(;;) //бесконечный цикл
{
//Зажигаем красный светодиод
PORTD &= ~_BV(PD0);
//плавное зажигание зеленого светодиода
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD1,i,p);
}
//Зеленый светодиод остается гореть
PORTD &= ~_BV(PD1);
//плавное гашение красного светодиода
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD0,p,i);
}
//Зеленый светодиод остается гореть
PORTD &= ~_BV(PD1);
//плавное зажигание синего светодиода
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD2,i,p);
}
//Синий светодиод продолжает гореть
PORTD &= ~_BV(PD2);
//Плавное гашение зеленого светодиода
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD1,p,i);
}
//Синий светодиод продолжает гореть
PORTD &= ~_BV(PD2);
//постепенное зажигание красного светодиода
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD0,i,p);
}
//Красный светодиод продолжает гореть
PORTD &= ~_BV(PD0);
//Плавно тушим синий светодиод
for (i = 20; i < pp; i++)
{
p=pp-i;
led0(PD1,p,i);
}
}
}
Кнопки + и - должны регулировать скорость зажигания /гашения
Кнопка Reset делает сброс на начальное значение.
Кнопка On/Off должна включать и выключать светодиоды в блоке 5
Светодиоды в блоке 3 и 4 должны по очереди зажигаться и гаснуть
Возможно ли это все организовать на одном контроллере?
>TEHb< писал(а):Косяк на схеме: резистор нужен свой на каждый кристалл, иначе если зажечь одновременно, скажем, синий и красный, то гореть будет тольк красный.
светодиод RGB с общим анодом. и все нормально переливается