Страница 1 из 47 123456711 ... ПоследняяПоследняя
Показано с 1 по 10 из 469
  1. #1
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Фоновая, пиксельная подсветка телевизора, Pixelight

    Наконец приехала моя светодиодная лента с драйверами WS8201 на каждый пиксель. В пяти метрах этой светодиодной ленты 160 RGB светодиодов
    Первым делом кинулся ее проверять, но под рукой не оказалось мощного БП на +5в. Пришлось написать свой код проверки ленты с питанием от +5в Arduino Nano

    Вот код этого скетча
    PHP код:
    #include <SPI.h>

    typedef struct {uint8_t buint8_t guint8_t r;} RGB;
    RGB pixel[160];

    void setup() 
    {
      
    Serial.begin(115200);
      
    SPI.begin();
      
    SPI.setBitOrder(MSBFIRST);
      
    SPI.setDataMode(SPI_MODE0); 
      
    SPI.setClockDivider(SPI_CLOCK_DIV16);
      
    delay(1); 
    }

    void loop() 
    {
    run_pix(160); //количество тестируемых светодиодов в ленте
    }

    void run_pix(uint8_t num)
    {
          
    pixel[0].r=0
          
    pixel[0].g=200;
          
    pixel[0].b=255;
             
       for(
    uint8_t i=0i<numi++) 
       {
         
    pixel[i+1].r=pixel[i].r
          
    pixel[i+1].g=pixel[i].g;
          
    pixel[i+1].b=pixel[i].b;
          
    pixel[i].r=0
          
    pixel[i].g=0;
          
    pixel[i].b=0
          
    set_pix(num); 
          
    // delay(10); //пауза между вспышками светодиодов
       

    }

    void set_pix(uint8_t num)
    {
       for(
    uint8_t i=0i<numi++) 
       {   
          
    SPI.transfer(pixel[i].b);
          
    SPI.transfer(pixel[i].g);
          
    SPI.transfer(pixel[i].r);
        }
      
    delay(1);

    Схема подключения Pixelight
    Нажмите на изображение для увеличения. 

Название:	ws2801.png 
Просмотров:	15052 
Размер:	15.8 Кб 
ID:	15818


    Вот так выглядит в готовом виде
    Нажмите на изображение для увеличения. 

Название:	pixlight.jpg 
Просмотров:	4144 
Размер:	64.9 Кб 
ID:	15808
    Последний раз редактировалось Chip; 21.02.2017 в 20:22.

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    Программа Pixelight , находится в режиме тестирования. Если есть еще желающие потестить, пишите. Теперь в программе есть только четыре зоны левая, права, вверх и низ. Для каждой зоны можно задавать любое количество точек(светодиодов) от 0 до 255. Для отключении зоны достаточно указать значение 0 в количестве точек отключаемой зоны. Зоны располагаются с лева на право по часовой стрелке, сделано это для того что бы можно было смонтировать светодиодную ленту не разрезая ее. Arduino ничего не знает о зонах и количестве светодиодов, эту информацию плата получает от программы, а это значит что Arduino не нужно перепрошивать при изменении конфигурации или размеров. Программа в отличии от ее предыдущей версии Ardulight претерпела большое количество изменений и исправлений, теперь она работает гораздо быстрей и не требовательна к ресурсам. В программе так же планируется добавить визуальный интерфейс настройки зон, эффекты визуализации в режиме простоя и т.д.Если у
    кого то возникнут дельные советы, пишите, рассмотрю

    Код для Arduino, пока без наворотов и без эффектов. Библиотека CyberLib в прикрепленном архиве
    PHP код:
    #include <CyberLib.h>

    unsigned long nTimerTimet;

    void setup() 
    {
      
    UART_Init(115200);
      
    StartSPI(081);//MODE0, DIV8, MSBFIRST
      
    for(int16_t z=0z<768z++) SendSPI(0); //погасить все пикселы ленты
      
    delay_ms(1); //пауза для инициализации ленты
    }

    void loop() 
    Start
     uint8_t data

      
    millis(); //получаем текущее время
      
    UART_SendByte(170); //отправляем байт синхронизации для ПК
       
    if (UART_ReadByte(data))  //ждем от ПК первый байт с колличеством пикселей ленты
          
    {
             
    uint16_t pix_num data*3;  //получаем общее колличество цветовых каналов ленты 
             
    uint16_t eTime micros()-rTime//получим время с момента окончания загрузки
             
    if( eTime 900delay_us(eTime);  //ждем полной инициализации (минус 100мкс для загрузки след. байта) 
                
    for(uint16_t i=0i<pix_numi++) SendSPI(uart_read()); //читаем UART и сразу сбрасываем в ленту пиксели 
                
    rTime micros(); //стартуем счетчик времени инициализации ленты
                 
    nTime t// //обнулить время простоя 
          
    } else {  
                   if((
    nTime) > 4000///гасим подсветку если нет потока более 2 сек
                    
    {  
                     for(
    int16_t z=0z<768z++) SendSPI(0); //погасить все пикселы ленты
                     
    nTime t
                    }  
                  }     
    End }    
    //***************************************************************************
    unsigned char uart_read(void)
    {
      
    uint8_t val;
      for (
    uint8_t i=0i<255; ++i//цикл ожидания байта данных из UART порта, время ожидания 2560мкс
        

          if(
    UART_ReadByte(val)) break; //если байт данных получен, то цикл прерывается
          
    delay_us(10);      //время ожидания байта
        

        return 
    val;

    Для понимания настройки конфигов Вам поможет прикрепленное изображение
    Вложения Вложения
    Последний раз редактировалось Chip; 21.02.2017 в 20:25.

  3. #3
    Продвинутый Аватар для HiddenPilot
    Регистрация
    14.04.2008
    Возраст
    45
    Сообщений
    354
    Вес репутации
    298

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    выкладываю архив с моими наработками...
    Постараюсь почаще тут появляться и если кому-то не совсем понятно,объясню для чего каждая функция и блок каждой функции...

    Особо много ушло времени на оптимизацию алгоритма преобразования HSV2RGB

    но результат того стоил, теперь даже ардуинка может похвастать быстрым преобразованием HSV2RGB.

    Много времени уделил оптимизации алгоритма этой фкнкции, потому что она очень хорошо подходит для автономной работы с пультом.... т.к. на вход ее можно подавать точку цвета на палитре насыщенность этой точки, и самое главное яркость

    Вложения Вложения
    • Тип файла: rar ws2801.rar (5.8 Кб, Просмотров: 3449)
    Последний раз редактировалось Chip; 25.12.2012 в 02:11.

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    А для чего тебе HSV?
    HSV очень удобна для поиска на изображении объектов по цвету, но для чего ее использовать в ленте я так и не понял.
    Для баланса белого?

  5. #5
    Продвинутый Аватар для HiddenPilot
    Регистрация
    14.04.2008
    Возраст
    45
    Сообщений
    354
    Вес репутации
    298

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    Я же сказал для автономной работы ленты.
    ну например, используем ленту в качестве "доп освещеня"....
    Например мы можем сделать белый или еще какой либо цыет ленты и спокойно менять яркость ленты... Это просто.... Если надо немного убавить яркость просто меняем значение цветов с 255 на 250 и т.д.

    А если у лента в режиме переливающихся цветов. Расчет каждой составляющей цвета R,G,B с учетом установленной яркости немного усложняется... не сильно, но все же... с HSV2RGB это делается легко.

    Ну и самый худший случай, примеру бегущие цвета(двигающаяся радуга), как на самом первом видео...
    Преимущества при использовании HSV2RGB(пр моему мнению):

    1. не нужно делать буфер из 160-255*3 пикселей = 765 байт.(Каждый пиксел спокойно рассчитывается математически прибавлением простого инеримента.

    2. Мы можем спокойно подавать на вход значение яркости(изменение с пульта или датчика освещенности) не задумываясь как преобразовать каждое значение RGB.

    3. абсолютно так же мы можем спокойно не задумываясь о преобразованиях RGB спокойно менять интенсивность цветовой палитры(насыщенность).
    Прям как на телевизоре яркость насыщенность


    4. за счет изменения величины инкремента мы можем удлинять или укорачивать длину "радуги" (менять плотность "радуги"). в случае с массивом пришлось бы его перезаполнять.

    5. если менять "полярность" инкремента на середине ленты получится водопад из радуги или восходящая радуга. изменение "полярностей" можно сделать в 4х точках это будет еще интереснее.

    6.и все это, напомню, спокойно ложится на текущие установленные с пульта(или датчика освещенности) значения яркости и насыщенности.

    половина автономных режимов работы ленты очень просто решаются при использовании HSV2RGB
    для работы с компом эта функция вообще не нужна....
    из всех функций может пригодится только гамма коррекция...

    опять же для псевдо случайного выбора цвета(в режиме преливающегося света), мы можем разделить на 2 половинки цветовой круг (0-767 и 768-1536), и каждый раз получать случайное число то из одного, то из другого диапазона, тем самым добиваться постоянного переливания цвета при получении случайного числа... потом это число, а так же значения яркости и насыщенности подаем на функцию, а обратно получаем значения RGB.... все просто и легко! )
    Последний раз редактировалось HiddenPilot; 24.11.2012 в 23:40.

  6. #6
    Новичок
    Регистрация
    26.11.2012
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    мне вот интересно, под андроид программу обработки кадров можно написать. хватит ли мощностей обрабатывать видео поток и захватывать кадры. тут уже упоминалось о желании приделать к Mini PC (проц Allwinner A10/ 1GHz Cortex-A8 или двух ядерный RK3066)

  7. #7
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    А как обстоят дела у Android с драйверами под FTDI?

  8. #8
    Новичок
    Регистрация
    26.11.2012
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    как я понял, FTDI необходим для создания виртуального COM порта, вроде начиная с 3 версии они есть. на практике с этим не сталкивался (под андроид не программировал) поэтому со 100% уверенностью не скажу. сам пару дней назад получил этот свисток MK802, ардуино и диоды еще в дороге. планирую на праздники соорудить подсветку

  9. #9
    Новичок
    Регистрация
    26.12.2012
    Сообщений
    10
    Вес репутации
    150

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    Помогите выбрать подсветку - сейчас уже 3 варианта:
    1. LightPack

    2. PaintPack

    С этими понятно, что они примерно одинаковые. Так же понятно как их купить / сделать

    3. PixelLight

    Кажется, что как-то круче выглядит подсветка, более четко работает - свет является как бы продолжением объекта с экрана. Или я не прав и просто так кажется из-за хорошо подобранной демки и эта подсветка такая же как вышеперечисленные?

    Прочитал ветку, не особо понятно что нужно конкретно купить и где?

    Кто разрабочик данной подсветки? Chip?

    Для того что бы все примеры были рядышком для сравнения
    Последний раз редактировалось maxirk; 26.12.2012 в 07:34.

  10. #10
    Новичок
    Регистрация
    26.12.2012
    Сообщений
    10
    Вес репутации
    150

    По умолчанию Re: Фоновая, пиксельная подсветка телевизора, Pixelight

    3. PixelLight

Страница 1 из 47 123456711 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •