14 зон
Вид для печати
14 зон
А реально ли собрать эту же схему только на обычных светодиодах вопрос в вольтах на ленту надо 12 а на светодиоды 3 ?
Да согласен а динамика то какая?вот бы еще вот так когда объект выходит из кадра подсветка бы пару секунд оставалась бы(как бы провожая объект за рамку телевизора)
Лучше купить RGB ленту. Ее можно подешевле купить в dealextreme.com, к примеру. В ленте стоит три RGB светодиода и к каждой из компонент еще резистор (к разным компонентам разные резисторы, поскольку напряжение у синих светодиодов 3.5 вольта, а у красных и зеленых ближе к 2 вольтам).
Я купил что-то вроде этого http://www.dealextreme.com/p/rgb-150...r-dc-12v-41523
ну тут надо понимать, что я есесно выбрал сцену, показывающую плюсы большого количества зон. Но думаю, что даже на более-менее однотонных фильмах такое решение лучше 4-х зонного.
UPD. Пока не поставил на телек, был уверен, что соберу и сразу продам. Ибо телек смотрю мало. Но включил и понял - не продам :D:D:D
Eraser, а можешь добавить еще регулировку контраста? А то ощущение, что на темных участках светлее получается подсветка, а на светлых - экран телека.
Eraser, у тебя и порог срабатывания и контраст, видимо действуют по каждой из компонент. В результате когда крутишь эти ручки цвета радикально меняются. А по идее контраст должен выполнять какое-то преобразование, не меняющее цвет. Ну и порог срабатывания должен срабатывать когда 0.299 * R + 0.587 * G + 0.114 *B меньше порога.
SBorovkov а какое железо в компе к которому подключён ardulight ?
core 2 duo, 3 ГГц, простенькая видяха.
Порог срабатывания действительно действует для каждой из компонент. Контраст выполняет преобразование картинки, а потом выполняются все расчеты.
Может я что-то не так понял и неправильные формулы использую?
При срабатывании порога должны гасится все цвета?
Объясните как точно должны работать порог и контраст (желательно с формулами расчета), и в какой последовательности выполняться расчеты
Насколько я понял, порог срабатывания - это параметр, который делает цвет с яркостью меньшей, чем этот параметр, черным. Я сам этот параметр не использовал, поскольку не вижу в нем большого смысла - как раз в около нулевой зоне изменение яркости на 1 прекрано видно глазом.
По поводу контраста, почитал как устроен контраст http://www.kweii.com/site/color_theo...rast100_ru.pdf и понял, что мне-то не контраст нужен, а гамма.
Гамма же считается вроде просто - яркость точки возводится в степень, равную гамме (от 0.3 до 3). Вот только я так и не понял, надо делать возведение яркости каждой компоненты в степень или вычисление яркости, возведение ее в степень и последующиий пересчет каждой компоненты...
v.1.1.8
+ настройки гаммы
fix порог срабатывания
+ сообщения этапов тестов
+ доработка лампы настроения (скорость смены рандомная)
Eraser а исходники программы открыты?
открыты, доступны на сайте программы http://code.google.com/p/ardulight/
PS если будете что-то править, дайте знать, может это сможет сделать программу лучше :)
Нет ли у кого нибудь платы SBorovkov на 14 зон под dip элементы?
Или скинте мануал на русском по CadSoft Eagle :o
про игл почитай на сайте easyelectronics.ru , там автор очень хорошие статьи пишет.
Под dip элементы замучаешься разводить. Дело в том, что у SO микрух очень подходящий шаг - половина от шага разъемов. А поскольку там контакты в два ряда идут, получается очень удобная разводка. Я сначала примерился к dip микросхемам, а потом понял, что SO - то, что доктор прописал для этой платы.
Паять их на самом деле очень просто, если паяльник нормальный. Ставишь микруху на место, припаиваешь одну ногу. Потом покрываешь остальные ноги ТАГС'ом и проводишь по ногам паяльником. И ни одной сопли. Только потом надо этот самый ТАГС вымыть под водой зубной щеткой.
SBorovkov проблема в том что SO нету в наличии... SO удобнее конечно да и сверлить ничего не надо. :-)
небольшой офф...
пропустил хорошую новость позволющаяя совместить эмбилайт с выводом 3Д...
LG выпустила на рынок 3Д телевизор работающий пассивными поляризационными очками... соответственно эти очки не будут рассинхронизироваться от светодиодного эмбилайта :)
http://www.thg.ru/technews/20101231_132200.html
на американском рынке он уже в продаже...
http://www.amazon.com/s/ref=nb_sb_no...eywords=LW6500
на российском рынке ориентировочно будут в июне
v.1.1.9
оптимизация кода
А есть возможность/желания увеличить число каналов в два раза ? :) я б попробовал бы собрать :)
одна ардуина уже не потянет с нормальной частотой мигания. Да и не уверен, что это надо.
я на параллельных tiny2313 буду собирать.
На параллельных можно сколько угодно сделать :-).
А почему tiny, а не меги дешевые, типа 48-ой? По цене - примерно тоже самое, если не дешевле, но зато можно на ардуине отлаживаться. И из 48-й меги можно больше ног вытащить.
на тиньках чисто для удобства, можно на каждую сторону по 2 тиньке поставить тогда проводов много тянуть ненадо.
Ниже исходник проекта для 42х каналов.
Поскольку это исходник для AvrStudio и в нем используются нестандартные для arduino модули, его придется чуть переделать.
1. Убрать все #include , которые не поймет ваша среда.
2. Добавить #include для работы с com портом. Соответственно, дальше надо изменить названия функций работы с com портом, думаю разберетесь.
3. Заменяем Pd7::Set() на PORTD|=(1<<7)
4. меняем Pd7::Clear() на PORTD&=~(1<<7)
5. меняем
Pb5::SetDirWrite();
Pb3::SetDirWrite();
Pd7::SetDirWrite();
SSPin::SetDirWrite();
на
DDRB|=(1<<2)|(1<<3)|(1<<5);
DDRD|=(1<<7);
6. В строке
#define TCNT2_Const 256-60
нужно нужно заменить 60 на по возможности меньшее значение. Начиная с какого-то значения, программу начнет не по-деццки глючить. Нужно выбрать значение процентов на 10 больше, чем пороговое. Чем меньше значение, тем выше частота мигания светодиодов.
ps. прошу того, у кого заработает под средой arduino, выложить скетч, чтобы каждый не мучался.Код:#include <iopins.h>
#include <pinlist.h>
#include <latch.h>
#include "uart.h"
using namespace IO;
#include <avr/version.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define BrightnessSize 42
#define TCNT2_Const 256-60
#define MaxBlank 65000
uint8_t volatile PWM_Counter=0;
uint8_t Brightness[BrightnessSize];
typedef Pb2 SSPin;
typedef Pd0 SerialIn_Pin;
typedef Pd1 SerialOut_Pin;
void Timer(void);
//int8_t RealCannels[42] ={37,39,35, 18,20,16, 17,19,15, 10,12,8, 9, 11, 7,
// 1,3,13, 2,4,0, 14, 6, 5, 27,26,25, 21,23,33,
// 22,24,34, 29,31,41, 30,32,28, 38,40,36};
int8_t RealCannels[42] ={37,39,35, 18,20,16, 17,19,15, 10,12,8, 9, 11, 7,
1,3,13, 2,4,0, 14, 6, 5, 27,26,25, 21,23,33,
22,24,34, 29,31,41, 30,32,28, 38,40,36};
int main (void)
{
uint8_t i;
i=1;
DDRB=0;;
Pb5::SetDirWrite();
Pb3::SetDirWrite();
Pd7::SetDirWrite();
SSPin::SetDirWrite();
SPSR = (1<<SPI2X); // SPI set clock rate fck/2
SPCR = (1<<SPE)|(1<<MSTR); // Enable SPI, Master
for (int i=0;i<BrightnessSize;i++) //обнулить массив
{
Brightness[i]=0;
}
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
TCCR2B |= (1<<CS21); //установка предделителя 64
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
TCNT2 = TCNT2_Const; // 16000000/256/100/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
sei();
uint16_t blank=0;
uartInit();
uartSetBaudRate(115200);
SerialIn_Pin::SetDirRead();
SerialOut_Pin::SetDirWrite();
// UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
uint8_t TimerCurrPWM=0;
for(;;)
{
if (!uartReceiveBufferIsEmpty())
{
blank=0;
uint8_t b=uartGetByte();
if (i>=BrightnessSize)
{
if (b == 255)
{
i=0;
blank=0;
}
else
blank++;
}
else
{
Brightness[RealCannels[i]]=b;
blank=0;
i++;
}
}
else
{
if (blank<MaxBlank)
{
if (TimerCurrPWM!=PWM_Counter)
{
blank++;
TimerCurrPWM=PWM_Counter;
}
}
else
{
for (uint8_t j = 0; j < BrightnessSize; j++)
Brightness[j] = 15;
blank=MaxBlank;
}
}
}
}
//void Timer(void)
SIGNAL(TIMER2_OVF_vect)
{
Pd7::Set();
Pd7::Set();
Pd7::Clear();; //формируем положительный импульс защелки
uint8_t PWM_Counter_v=PWM_Counter; // поскольку PWM_Counter объявлена как valotile, обращение к ней - всегда обращение в память. Поэтому создаем локальную копию, она будет храниться в регистре.
TCNT2 = TCNT2_Const;
uint8_t byte_shift;
uint8_t * CBright;
CBright = (uint8_t *)&Brightness[0];
uint8_t j=0;
for (j=6;j>0;j--)
{
byte_shift = 0;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
if(*CBright>PWM_Counter_v) byte_shift|= 1;
CBright++;
byte_shift = byte_shift<<1;
SPDR = byte_shift; //отправляем в шину SPI
}
PWM_Counter++;
}
SBorovkov а у вас на atmega48 работает эмбилайт?
пока нет, но очень скоро заработает, как раз делаю плату. 48-я мега отличается от 168 и 328 только размером памяти. Поэтому максимум, что потребуется - убрать тяжелый include из кода. Но у меня и сейчас код занимает меньше 3 килобайт и память - меньше 200 байт. Возможно, придется обойтись без бутлоадера.
Может тогда на Atmega88 сделать?
у меня 48-я мега, под нее и буду делать :-).
Убрал использование библиотеки uart (она же serial для arduino), поскольку проц готов непрерывно читать данные из порта и можно обойтись без буфера. В результате код начал занимать чуть больше килобайта при оптимизации по скорости и 700 байт при оптимизации по размеру. Оперативки используется 85 байт и легко уменьшается до 43 байт, но лень :-).
Даже в тиньку уместится без проблем.
Ну раз уже есть, то конечно ее лучше использовать
Установил я XBMC, скачал http://ardulight.googlecode.com/file...ory.eraser.zip в программе указал то что установить из файла *.zip, после чего в дополнениях появилось XBMC Eraser's Addons. теперь захожу в него, а там пусто :(
В чем проблема не подскажите? Пробывал в программе и из под windows 7 и из под Ubuntu 10.10
поправил, скачайте снова http://ardulight.googlecode.com/file...ory.eraser.zip
Собрал эмбилайт без использования ардуины. По сути отличается тем, что вместо ардуины стоит мега48 и fdti ft232rl . Формально - дешевле (себестоимость всех деталей платы около 500 рублей), но зато надо распаять ft232rl с шагом 0.65 мм и прошить мегу. С ардуиной - выходило бы 700 за ардуину + 250 рублей на детали.
Параллельно выяснилось, что у меги48 нет возможности использования бутлоадера (что обидно, ибо прошивка занимает ~1кб, а бутлоадер - 2 кб, то есть в сумме уместилось бы без проблем в 4 кб меги).
В общем, учитывая, что надо еще купить RGB ленту, шлейфы, разъемы на них, 500 рублей разницы уже не делают большой погоды.
Прикладываю:
1. hex файлы для прошивки 48-й меги, и плат, ранее опубликованных мной на основе ардуин на 168 и на 328й меге.
2. Исходники проекта для любителей мелких проектов. Я убрал из исходников использование родной библиотеки обмена данных serial и добавил свою очень мелкую. В результате оно еще и немного мерцать перестало.
3. Схема и рисунок платы с использованием 48-й меги. Можно вместо 48й меги поставить так же 88, 168, 328 :-).
Если будут затруднения с изготовлением печатной платы.Приму на заказ
http://www.compcar.ru/forum/showthre...0663#post80663
Chip, спробуй так:
Огромное спасибо!!!
Все работает. А в чем проблема то была?