Не проверял, но можно написать скетчь под любую программуЦитата:
Насколько эта реализация совместима с Atmolight-Plugin например?
ПоддерживаетсяЦитата:
Судя по тому что я нашел в форуме Boblight вроде как поддерживается?
Вид для печати
Не проверял, но можно написать скетчь под любую программуЦитата:
Насколько эта реализация совместима с Atmolight-Plugin например?
ПоддерживаетсяЦитата:
Судя по тому что я нашел в форуме Boblight вроде как поддерживается?
посмотри 43-е и 44-е сообщение в этой теме
да.
clk у всех 595 соединены, latch тоже, а data входит в первого, из его h' выходит в data второго и так далее.
добавлено через пару дней:
Нужны еще усилители тока, типа uln2803 или транзисторы.
SBorovkov
Резисторы 270 Ом?
эээ... Ну вообще 74hc595 не имеет силовых выходов. Поэтому чтобы сделать нормальный ambilight надо потом усилители поставить, типа uln2803 или подобных. Можно и кучу транзисторов.
Примерно в том районе, что речь про схему шла, я приводил расчеты для микрух uln. Потом еще раз поднимал тему расчетов.
Звиняйте, я думал, что про uln прочитали.
схема подключения uln проще некуда - входы, выходы и земля. При подаче положительного напряжения на вход, соответствующий выход прижимается к земле. Поэтому лента нужна с общим плюсом.
Вы сами реализовали подобный эмбилайт? :)
лично я - нет. Купил ленту светодиодную, реализовал основной код заставляющий менять яркость 48 одноцветных каналов (это проверял на нескольких 74hc595 с подключенными светодиодами, как в сообщениях chip), осталось купить carduino nano, немножко микрух и спаять все. А потом подумал "а зачем он мне нужен? фильмы я смотрю раз в три недели, а то и реже, дети мультики смотрят часто, но при свете, да и по-моему пофиг им было бы наличие эмбилайта". Так и не сделал :-). Не фанат, наверное. Оказалось интереснее придумать и реализовать в коде многоканальную идею, чем спаять и использовать.
Теперь лениво думаю чего с лентой делать. То ли в квартире повесить, то ли продать :-)
тоже заинтересовался - автору уважуха
но так как я как говорится не местный - arduino есть возмржность купить тока на ибее
Вопрос такой - такая подойдет ARDUINO NANO 3.0/V3.0 ATMEGA328P ?
еще нарыл там такие транзисторы IRFZ44? так как у меня подобного ничо нет хочу там закупиться.
Со светоидиодной лентой вроде понятно - нашел как советуют
Ардуино пойдет , но эта версия имела баг , если тебе не нужен спящий или ждущий режим компа то можешь купить и эту версию.
IRFZ44 не подойдет
да не то что бы ненужен - другого варианта нет
теперь на счет транзисторов - неподскажите аналог IRLR2905 ?
поищу - а этот IRF1010N?
IRLU8259
пока на ибее транзисторов не нашел - но ищу еще аналоги
Как этот IRFP150N?
Вы извините что пристал - просто чесно не рублю в них.
Доброго времени суток.
Некоторое время назад наткнулся на подобный проект и решил повторить, при поиске программы нашел и этот форум.
собрал агрегатину на 12 каналов, хочу сделать слева, справа и два канала сверху
уважаемый чип, при запуске вашей програмы выходит ошибка: FT_Open - Device not found и програма закрывается. подозреваю что проблема в номере ком порта, его настройки я нигде не нашел... подскажите в каком направлении рыть? сам я не шибко программер
боб-лайт запускается, но у меня Вынь 7 и аэро отключать не хочетсо. o5 же боблайт запускается 1 раз только, если закрыть и запустить повторно, то он выдает: com3 - Permisson denied. Видимо не закрывает за собой соединение с ком-портом.
Еще вопрос: есть ли аналог подобной программы для Linux? а если нет, то есть ли перспектива её появления?
2 denns: я использовал транзисторы с дохлой материнской платы(те что питанием процессора управляют) они подходят идеально... дёшево и сердито :)
А у тебя на ардуино собрано?Цитата:
уважаемый чип, при запуске вашей програмы выходит ошибка: FT_Open - Device not found и програма закрывается. подозреваю что проблема в номере ком порта, его настройки я нигде не нашел... подскажите в каком направлении рыть? сам я не шибко программер
да, хоумейдуино + PL2303HX.
провел с десяток перезагрузок и все грамотно настроил на бобе, эфект потрясающий, когда машина едет с одного конца экрана на другой, автоматом поворачиваешь голову за ней и пытаешься разглядеть её в темноте :)
чересчур паралитичная подсветка получилась, какието явно левые мигания проскакивают, на активных сценах особенно много, жутко режет глаза... задержка от изображения примерно 200-300 мс... хоть и незначительно, но заметна...
кстати, Ардулайт_тест из пакета Боблайт также дает FT_Open - Device not found...
UPD: поЯндексил, в Линуксе поддерживает данную фичу(а конкретнее АтмоЛайт) VLC плеер... сегодня буду пробовать...
UPD2: поГуглил, под Линуха нашел исходники боблайта и инструкцию по их компиляции и установке на Ubuntu
помимо того разобрался чем отличаются Atmolight от MomoLight... у атмолайта после 0хFF идет 0x00 0x00, а потом уже пакет... несложная доработка скетча...upd4: может из за этого в моменты экстремума начинается бешенное эпелиптическое мигание, т.е. когда засылается на какой либо канал максимальное значение(255 = 0хFF) дунька думает что это начало нового пакета.
UPD3: нашел детальное описание конфигурационного файла для боблайта и свежие исходники, дата последнего обновления 27-е октября 2010.
UPD4: перечитал ветку еще раз, наткнулся на упоминание о том что библиотека FTDI нужна для того чтоб работать с FT232 которой в моей системе не установлено, у меня PL-2303 подключена на прямую на 0-1 пины...
есть ли возможность побороть этот момент не прибегая к установке FT232? потому как выбор на PL2303 пал исключительно из за её доступности в условиях города Якутска, как по цене так и по наличию(за 100р два старых датакабеля). FT232 прийдется полтора месяца ждать + по цене она дороже + за доставку еще рублей 300 сверху.
Chip Вчера купил Мегу, ночь балуясь разбирался что и как работает, потом вспомнил про фоновую подсветку Кинул 12 светодидов на порты, запустил одну прогу, потом вторую. :(
Работают только 2 канала pin10 & pin11, хотя порты рабочие, проверял до и после. Не подскажите в чем проблема?
Винда семерка.
p.s. В первом посту ссылка на скетч не работает, просто копировал.
Может быть светодиоды неправильно подключил или сгоревшие?
Попробуй яркость в настройках программы накрутить на всю, должна быть равна =0
Да нет, на скорую руку сваял скетч из учебного примера "Fade" , только прописал все пины от 2 по 13 и все светодиоды плавненько тухли и загорались. Затем не прикасаясь ни к чему, загрузил скетч подсветки, запустил программу - светятся только два на 10 и 11 пине, пробую регулировать все красиво отрабатывает, но только по 2 светодиодам.
вот что заливал:
ЗЫ: Ардуина 0021, проц 2180, винда 32битная.PHP код:
#define D2_High PORTD |=B00000100 //red
#define D2_LOW PORTD &= B11111011
#define D3_High PORTD |=B00001000 //green
#define D3_LOW PORTD &= B11110111
#define D4_High PORTD |=B00010000 //blue
#define D4_LOW PORTD &= B11101111
#define D5_High PORTD |=B00100000
#define D5_LOW PORTD &= B11011111
#define D6_High PORTD |=B01000000
#define D6_LOW PORTD &= B10111111
#define D7_High PORTD |=B10000000
#define D7_LOW PORTD &= B01111111
#define D8_High PORTB |=B00000001
#define D8_LOW PORTB &= B11111110
#define D9_High PORTB |=B00000010
#define D9_LOW PORTB &= B11111101
#define D10_High PORTB |=B00000100
#define D10_LOW PORTB &= B11111011
#define D11_High PORTB |=B00001000
#define D11_LOW PORTB &= B11110111
#define D12_High PORTB |=B00010000
#define D12_LOW PORTB &= B11101111
#define D13_High PORTB |=B00100000
#define D13_LOW PORTB &= B11011111
volatile unsigned int tcnt2;
volatile byte pwm_time;
//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[12]; //массив храннения цветов 12-ть каналов
void setup()
{
for (int i=2; i < 14; i++){pinMode(i, OUTPUT);
}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 252; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 12)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 12; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
// if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else
{
if(blank>100000)
{
blank=0; for (byte i = 0; i < 12; i++) color[i] = 0;
}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D2_High; else D2_LOW;
if(color[1] > pwm_time ) D3_High; else D3_LOW;
if(color[2] > pwm_time ) D4_High; else D4_LOW;
if(color[3] > pwm_time ) D5_High; else D5_LOW;
if(color[4] > pwm_time ) D6_High; else D6_LOW;
if(color[5] > pwm_time ) D7_High; else D7_LOW;
if(color[6] > pwm_time ) D8_High; else D8_LOW;
if(color[7] > pwm_time ) D9_High; else D9_LOW;
if(color[8] > pwm_time ) D10_High; else D10_LOW;
if(color[9] > pwm_time ) D11_High; else D11_LOW;
if(color[10] > pwm_time) D12_High; else D12_LOW;
if(color[11] > pwm_time) D13_High; else D13_LOW;
}
Так скетчь под твой контроллер скорее всего переделывать нужно.
Или вешать светодиоды на соответствующие порты
PHP код:
#define D2_High PORTD |=B00000100 //red
#define D2_LOW PORTD &= B11111011
#define D3_High PORTD |=B00001000 //green
#define D3_LOW PORTD &= B11110111
#define D4_High PORTD |=B00010000 //blue
#define D4_LOW PORTD &= B11101111
#define D5_High PORTD |=B00100000
#define D5_LOW PORTD &= B11011111
#define D6_High PORTD |=B01000000
#define D6_LOW PORTD &= B10111111
#define D7_High PORTD |=B10000000
#define D7_LOW PORTD &= B01111111
#define D8_High PORTB |=B00000001
#define D8_LOW PORTB &= B11111110
#define D9_High PORTB |=B00000010
#define D9_LOW PORTB &= B11111101
#define D10_High PORTB |=B00000100
#define D10_LOW PORTB &= B11111011
#define D11_High PORTB |=B00001000
#define D11_LOW PORTB &= B11110111
#define D12_High PORTB |=B00010000
#define D12_LOW PORTB &= B11101111
#define D13_High PORTB |=B00100000
#define D13_LOW PORTB &= B11011111
Точно туплю как пацан, ведь порты PWM у меги идут в перемешку и совсем другие при явном объявлении :)
Pin0 = (Порт) PE0 (не трогаем)
Pin1 = (Порт) PE1 (не трогаем)
Pin2 = (Порт) PE4
Pin3 = (Порт) PE5
Pin4 = (Порт) PG5
Pin5 = (Порт) PE3
Pin6 = (Порт) PH3
Pin7 = (Порт) PH4
Pin8 = (Порт) PH5
Pin9 = (Порт) PH6
Pin10 = (Порт) PB4
Pin11 = (Порт) PB5
Pin12 = (Порт) PB6
Pin13 = (Порт) PB7
P.S. Простите новичка... Теперь я думаю, на правильном пути?
...
Вот исправленное, но не проверенное
PHP код:
#define D2_High PORTE |=B00010000 //red
#define D2_LOW PORTD &= B11101111
#define D3_High PORTE |=B00100000 //green
#define D3_LOW PORTD &= B11011111
#define D4_High PORTG |=B00100000 //blue
#define D4_LOW PORTG &= B11011111
#define D5_High PORTE |=B00001000 //red
#define D5_LOW PORTE &= B11110111
#define D6_High PORTH |=B00001000 //green
#define D6_LOW PORTH &= B11110111
#define D7_High PORTH |=B00010000 //blue
#define D7_LOW PORTH &= B11101111
#define D8_High PORTH |=B00100000 //red
#define D8_LOW PORTH &= B11011111
#define D9_High PORTH |=B01000000 //green
#define D9_LOW PORTH &= B10111111
#define D10_High PORTB |=B00010000 //blue
#define D10_LOW PORTB &= B11101111
#define D11_High PORTB |=B00100000 //red
#define D11_LOW PORTB &= B11011111
#define D12_High PORTB |=B01000000 //green
#define D12_LOW PORTB &= B10111111
#define D13_High PORTB |=B10000000 //blue
#define D13_LOW PORTB &= B01111111
Как проверишь отпишись
Проверил, не все в норме.
Pin2 = (Порт) PE4 и Pin3 = (Порт) PE5 светятся постоянно, остальные правильно работают.
В объяве нашел ошибку
#define D2_High PORTE |=B00010000 //red
#define D2_LOW PORTD &= B11101111
#define D3_High PORTE |=B00100000 //green
#define D3_LOW PORTD &= B11011111
Это уже рабочий :)
PHP код:
#define D2_High PORTE |=B00010000 //red line-1 on
#define D2_LOW PORTE &= B11101111 //red line-1 off
#define D3_High PORTE |=B00100000 //green line-1 on
#define D3_LOW PORTE &= B11011111 //green line-1 off
#define D4_High PORTG |=B00100000 //blue line-1 on
#define D4_LOW PORTG &= B11011111 //blue line-1 off
#define D5_High PORTE |=B00001000 //red line-2 on
#define D5_LOW PORTE &= B11110111 //red line-2 off
#define D6_High PORTH |=B00001000 //green line-2 on
#define D6_LOW PORTH &= B11110111 //green line-2 off
#define D7_High PORTH |=B00010000 //blue line-2 on
#define D7_LOW PORTH &= B11101111 //blue line-2 off
#define D8_High PORTH |=B00100000 //red line-3 on
#define D8_LOW PORTH &= B11011111 //red line-3 off
#define D9_High PORTH |=B01000000 //green line-3 on
#define D9_LOW PORTH &= B10111111 //green line-3 off
#define D10_High PORTB |=B00010000 //blue line-3 on
#define D10_LOW PORTB &= B11101111 //blue line-3 off
#define D11_High PORTB |=B00100000 //red line-4 on
#define D11_LOW PORTB &= B11011111 //red line-4 off
#define D12_High PORTB |=B01000000 //green line-4 on
#define D12_LOW PORTB &= B10111111 //green line-4 off
#define D13_High PORTB |=B10000000 //blue line-4 on
#define D13_LOW PORTB &= B01111111 //blue line-4 off
volatile unsigned int tcnt2;
volatile byte pwm_time;
//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[12]; //массив храннения цветов 12-ть каналов
void setup()
{
for (int i=2; i < 14; i++){pinMode(i, OUTPUT);}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 252; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 12)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 12; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
// if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else {
if(blank>100000) { blank=0; for (byte i = 0; i < 12; i++) color[i] = 0;}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D2_High; else D2_LOW;
if(color[1] > pwm_time ) D3_High; else D3_LOW;
if(color[2] > pwm_time ) D4_High; else D4_LOW;
if(color[3] > pwm_time ) D5_High; else D5_LOW;
if(color[4] > pwm_time ) D6_High; else D6_LOW;
if(color[5] > pwm_time ) D7_High; else D7_LOW;
if(color[6] > pwm_time ) D8_High; else D8_LOW;
if(color[7] > pwm_time ) D9_High; else D9_LOW;
if(color[8] > pwm_time ) D10_High; else D10_LOW;
if(color[9] > pwm_time ) D11_High; else D11_LOW;
if(color[10] > pwm_time) D12_High; else D12_LOW;
if(color[11] > pwm_time) D13_High; else D13_LOW;
}
После двух недельного ожидания сегодня пришел китайский arduino nano v3
на atmega 328P.
по виду немного отличается от Вашего - детальками :)
а так тоже самое, дрова встали нормально
прошил скетч с первого поста - ошибок не вылетало
при подключении к USB - горит зеленый - питание
при запуске программы atmolight - горит красный D13 и начинает моргать Rx
Проверить работу не могу - остальные запчасти в пути еще
по моему описанию это штатное поведение?
зы. заливал скетч блинк- все работает!!!
Chip сделаете ли вы нам в этом году подарок в виде проги для двух мониторов))) либо же вообще её бессмысленно ждать?
Решился таки на такую классную штуку, но пока в целях приобретения опыта в программирования микроконтроллеров, вот сразу возникли вопросы (а куда ж без них :-) ). Дак вот:
1. При компилировании скетча, с первой страницы, выдает вот такую ошибку:
Ambilight.cpp: In function 'void setup()':
Ambilight:40: error: 'TIMSK2' was not declared in this scope
Ambilight:41: error: 'TCCR2A' was not declared in this scope
Ambilight:42: error: 'TCCR2B' was not declared in this scope
Ambilight:42: error: 'WGM22' was not declared in this scope
что в скетче не так?
2. Имею Arduino собственного производства, с atmega8-16PU на борту, сколько можно соорудить с помощью его каналов? понятно, что с дополнительными элементами.
Заранее благодарен за ответ!
Дело в том, что эти константы определены для процесоров XX8, типа 168, 328, наверное и 88, 48.
Придется взять документацию на 168-й проц и свою мегу и найти аналоги этих констант. Не всегда могут присутствовать полные аналоги - у 8-й меги может быть другое количество таймеров, к примеру.
ах вот она, где собака зарыта. Спасибо за ответ
Попробовал другой вариант с применением SoftPWM.h
Частота шима низкая, но мерцаний нет.
PHP код:
#include <SoftPWM.h>
uint8_t leds[12] = {30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52};
byte volatile color[12];
unsigned long night=0;
void setup()
{
Serial.begin(115200);
SoftPWMBegin();
for (int i = 0; i < 12; i++)
SoftPWMSet(leds[i], 0);
SoftPWMSetFadeTime(ALL, 5, 5);
}
void loop()
{
if (Serial.available() > 12)
{
if (Serial.read() == 255)
{
for (int i = 0; i < 12; i++)
{
color[i] = Serial.read();
}
night=0;
}
}
else
{
if(night>30000) { night=0; for (byte i = 0; i < 12; i++) color[i] = 0;}
night++;
}
for (int i = 0; i < 12; i++)
SoftPWMSet(leds[i], color[i]);
}
Chip, как я понял твоя прога Ardulight.rar работает только с Arduino nano? Возможно ли ее приспособить функционировать для других версий Arduino?
Хоть вопрос и не ко мне, но ведь я повторил скетчь Chip-а и переделал его под Arduino Mega в посту-224 .
И еще подкинул вариант несколькими постами выше, который не нужно переделывать под разные хххduino .
Свежий и удобный софт от Eraser
Программа поддерживает двухмониторный режим, удобные настройки зон и т.д.
Тестируем и отписываемся
При первом запуске зайдите в настройки и сконфигурируйте программу под ваши парамметры
После тестирования выложу в шапку.