Отговори на тема  [ 40 мнения ]  Отиди на страница 1, 2, 3  Следваща
WS2812 светодиодна лента .... 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение WS2812 светодиодна лента ....
Абе това не знам за къде точно е но ако някой някога се бори сигурно ще го намери.
Вчера си изгубих цял ден с едно такова, най-вече щото съм на полеви условия и нямам нищо освен мултимер.
Та най-важното което установих, явно има доста ленти които претендират да са с тия светодиоди но не са, явно са клонинги. Проблема на клонинга е че няма PWM а е само on/off, съответно дали зареждаш 1 или 255 е все тая. Това докато го усетя изгубих два часа да се чудя защо му пращам само 1-ци.

Ето тук един младеж е изгубил малко време и е направил изследване : https://cpldcpu.wordpress.com/2014/01/1 ... he-ws2812/ на оригинала, и най-важното е че 0-та може да се предаде с импулс с произволна дължина не превишаваща максимално специфицираната, а 1-цата с произволна дължина над специфицираната, като периода трябва да е зададения 1.35 us, т.е. всичко до 350 nS се приема за 0-ла, и всичко над 625 ns се приема за 1-ца. Също е напраивл интересно откритие че ресет се получава след 10 uS което е важно ...

Ако някой се бори дано му е полезно ... знаех си аз че не е току така тая разлика от 8$ в цената :)


Пет Сеп 18, 2015 1:55 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
И още едно откритие което никога нямаше да се сетя ... 50 us след които настъпва ресет са не след предаден байт а изобщо, т.е. може между два бита да имаш до 50 uS ... аз нали чета буквално и гледам пише 1.25 или колкото беше uS макс и му генерирам точен клок ... онзи ден докато дописвах нещо закачам скопа и о ужас, периода къде 5 us .... и работи, докато съм бутла други таймери съм сменил и клока, вендга направих проба, 20 uS между два бита гарантирано работи при 4 различни клонинга на тоя чип, чак след това ми светна че г-н китаец трудно обеснява .... та ако някой го бори, задачата стана от доста специфична с оглед хем да не губиш производителност хем да ги рефрешваш гарантирнао и бързо на супер баламска, тва човек може да си го бодне в прекъсването на таймер и да предава байт когато му скимне в рамките на 40-50 uS. Въпроса е за 0-та и 1-та, там си иска точни времена и заради разликите в чиповете не можеш много да варираш защото им е малко препокриването, но там времето става с 1-2 инструкции, не хаби нищо.
Аз не го направих в прекъсване защото рефрешвам 3 отделни с виок фреймрейт и прекъсването яде излишно време, но и в прекъсване е вариант, особенно ако го комбинираш с други дейности, инкремент на таймери или нещо друго полезно.


Вто Юни 21, 2016 3:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 11:32 am
Мнения: 7885
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Тайминга за тия ленти е от много голямо значение. :) Но пък от друга страна, са толкова разпространени, че има всякакви драйвери за всякакви процесори - тука за AVR имам 3. :) И трите си работят.


Пет Юни 24, 2016 8:19 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Рек, не е в драйвера, лентите ги светкам всякак, с адресирането грижи няма. Тайминга се оказа че изобщо не е проблем, единствено продължителността 0/1 но времето между битовете може да е до към 50 uS което си е цяла вечност. То е и логично де, защо да се мъчат да следят таймоут на 24 бита вместо на един, един 24 битов брояч в повече.


Пет Юни 24, 2016 10:19 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
п.с. тия чипове имат сигурно 20 клонинга, пробвам ги изкусвено, пускам един импусл на входа и гледма изхода на чиповете, намерих поне 4-5 разновидности като продължителност на 1-ца и 0-ла, като всички се препокриват сравнително малка част, хубавото е че нулата няма значение колко е дълга, т.е. колко е къса, имаш ли фронт си ОК, което позволява в една команда да вдигнепш фронта а в следващата да го свалиш .. е поне с контролерче от типа на моите или на някой пик, сега ако си наклочен на 600 Mhz може и да не приема много къси импулси, но при мен са му идеални, един шифт <<2 е достатъчен и за генериране на 1-ца, това на ядро 8051 @48 Мхз с 3-4 такта на инструкция, а .. и писане през С, на ASM може да иска <<3 :)


Пет Юни 24, 2016 3:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
и се показа че това по-горе за 50 us важи само за две от лентите :D ... тия китайци направо ме убиват, как успяват да правят толквоа различни клонинги ... т.е. няма пълно щастие, перфектно беше да имаш 50 us между два бита но ... 2 от 4 не ме устройва, като знам, че всеки път сигурно ще пращат различна лента .. та Рек е прав, тайминга трябва да се спазва защото не всяка риба е риба дори и да е риба .....

Ето един код който работи добре на 8051, за 3 канала отделни, не съм проверявал до колко ще изкара, има мегдан за още един два поне като гледам времената. Това е за силабс на 48 Mhz. Не съм му гледал листинга в момента, може и да може да се оптимизира от към време още малко, но за 3 канала няма смисъл че ще започне да ми се налага да добавям NOP-ве. 3-те ленти са на P1.2,3 и 4

#define led_low 0xE3 // b'11100011

unsigned char bdata led_mask, byte_a, byte_b, byte_c;
sbit bit_a = byte_a^7;
sbit bit_b = byte_b^7;
sbit bit_c = byte_c^7;
sbit mask_a = led_mask^2;
sbit mask_b = led_mask^3;
sbit mask_c = led_mask^4;


void update_all(unsigned char *data_0,unsigned char *data_1,unsigned char *data_2, unsigned char bytes)
{
unsigned char r_bytes, r_bits;
P1&=led_low;
delay(US(50));
for(r_bytes=0; r_bytes< bytes; r_bytes++)
{
byte_a=*(data_0+r_bytes);
byte_b=*(data_1+r_bytes);
byte_c=*(data_2+r_bytes);
led_mask=0xE3;
r_bits=0;
//----------------------------------------
do{
if(bit_a) mask_a=true;
if(bit_b) mask_b=true;
if(bit_c) mask_c=true;
P1|= led_high;
P1&=led_mask;
led_mask=0xE3;
byte_b=byte_b<<1;
byte_a=byte_a<<1;
byte_c=byte_c<<1;
P1&= led_low;
r_bits++;}
while (r_bits<8);

}
P1&= led_low;
}

п.с. тия пойнтери във входа ги насочвам към те такава структура :
struct color_m{
unsigned char green;
unsigned char red;
unsigned char blue;
};
ако някой се чуди защо не е RGB а е GRB трябва да пита китайците.


Последна промяна ToHu на Съб Юни 25, 2016 2:41 pm, променена общо 1 път



Съб Юни 25, 2016 12:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 2:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: WS2812 светодиодна лента ....
Тони, освен трите цвята няма ли и яркост, та да можеш да си я регулираш или винаги светят на макс?


Съб Юни 25, 2016 1:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
ами не, но не винаги свети на макс, яркоста я регулирам посредством стойностите на RGB ето така :

const int8 code PWM_LUT[64]=// { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
// 16,17,18,19,20,21,22,23,24,25,26,28,30,32,34,36,
// 38,40,42,44,46,48,50,52,54,56,58,60,63,66,69,72,75,
// 78,81,84,87,90,94,98,102,106,110,114,118,122,126,128 };
{
0, 1, 1, 1, 1,
2, 2, 2, 2, 2,
2, 3, 3, 3, 3,
4, 4, 4, 5, 5,
6, 6, 7, 8, 8,
9,10,11,12,13,
14,15,17,18,20,
22,24,26,28,31,
34,37,40,44,48,
52,57,62,68,74,
81,89,97,106,116,
126,138,150,164,179,
196,214,234,255
};


*(data_p+counter)=(float)brightness*PWM_LUT[*(color_a+1)>>2];

това от ляво ми е буфера в който ги вкарвам преди да ги подам към драйвера, това от дясно ми е RG и B компонента за съответният светодиод. Естествено така губиш цветове, не си с 8 а с 6 бита на цвят, т.е. имаш общо 18 битов цвят но за RGB лента и това е ОК. Таблицата има една коментирана част, това е друга тбалица, но с не-коментираната корекцията за моите ленти е по добра, това всъшност е гама корекция.

А по горе в кода .. .. сега ще го поясня, понеже съм преправял имам две еднакви константи с различни имена :) c_low и led_low и двете са 0xE3.

Според мен не са вкарали възможност за яркост тъй като яркостта изисква гама корекция ако искаш да се регулира както трябва, а то вътре сигурно има един преместващ регистър и няколко тригрчета, нямали са място за повече, а и цената ... можело е да сложат яркост на всеки светодиод, но тогава пък стават 6 байта, хем повече тригери и по-големи регистри, хем двойно по ниска скорост на рефреш.

Най-голямата тъпотия е че едните ленти не смао че не са 50 uS ами и при 3 uS не работят, т.е. работят с алгоритъма от горе но сега пробвам да вкарам дилей да видя кога ще умрат и мрат много бързо, още при 2 us допълнителено забавяне и почват да се ресетват, което пък е извън всякаква спецификация, т.е. едната и е все тая дали 50 us ще са между битовете или байтовете все си работи, а другият тип не пзоволява повече от тотално 4-5 us кактомежду битовете така и между байтовете. Гледам светодиодите и изглеждат еднакви :) Някой китаец сигурно е решил че може да спести няколко тригера намалявайки таймоута от 50 на 5 us :)


Съб Юни 25, 2016 2:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 11:32 am
Мнения: 7885
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Да, проблема е с хилядите клонинги и големите различия. Ама китаец и стандарти... нали знаеш. :) Но повечето драйвери си се настройват прецизно и с малко играчка се нагласят нещата. Ето примерно:

Код:
// Timing in ns
#define w_zeropulse   350
#define w_onepulse    900
#define w_totalperiod 1250

// Fixed cycles used by the inner loop
#define w_fixedlow    2
#define w_fixedhigh   4
#define w_fixedtotal  8   

// Insert NOPs to match the timing, if possible
#define w_zerocycles    (((F_CPU/1000)*w_zeropulse          )/1000000)
#define w_onecycles     (((F_CPU/1000)*w_onepulse    +500000)/1000000)
#define w_totalcycles   (((F_CPU/1000)*w_totalperiod +500000)/1000000)


Но така или иначе, колкото и перфектно управление да имаш, от време на време си забиват, разни аномалии се получават и т.н.


Пет Юли 01, 2016 5:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Ами забили за сега не съм ги виждал докато работят, но аз ги ресетвам преди всеки рефреш, не че по принцип не са си ресетнати ... иначе забили ги виждам понякога докато наливам мозък на контролера, побеляват и само спиране на тока ги оправя. Иначе такива изпозлваме много отдавна с някакъв чужд контролер, нямаме оплаквания за забили ленти, ама знае ли човек.
При теб явно е нещо бързо, при мен няма мсисъл да дефинирам времена, за 0-ла просто свалям на следващата инструкция, 1-цата ми е след няколко цикъла, колкато да шифтна променливите, то точно там имаше разминаване. Едните приемат доста по-къса единица, другите не я възприемат, в момента за 4-те ленти които имам мм мисля е около 650 nS .. малко трудно да го измеря точно на 40 Mhz скоп малко над едно деление при 500 ns/ del но не ми се вади друг, другото е да го сметна по инструкции .. ама и това ме мързи :)


Пет Юли 01, 2016 6:04 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юни 12, 2016 3:50 pm
Мнения: 68
Мнение Re: WS2812 светодиодна лента ....
Тоест как се управлява този вид лента, казано по елементарен начин? Какъв вид импулс с каква дължина и амплитуда ще е нужен за да светне 1-ви диод в 3-те си цвята, след това 2-ри, 3-ти и тн...?
Какво е точно разликата между WS2811, WS2812?


Сря Юли 20, 2016 2:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Ами управлява се с просто, серия от 24 бита, период 1.25 uS. Според това колко е продъжителността на фронта имаш 0 при продължителност до около 400 nS и 1-ца при продължителност над тази. Реално точно в тези времена е уловката тъй като има клонинги чиито параметри се разминават доста и за да го направиш да работи със всички трябва да държиш 0-та в доста по тясна граница от специфицираната. Същото се отнася и за периода, и още повече аз рест-а. По горе има сорс за 51-ца, но е правен конкретно за това ядро и за клок 48 Mhz. С изнасилване на SPI интерфейса също може да се реализира но ще имаш 1 или 2 канала, според това колко SPI имаш.
Разликата с 2811 сега не мога да я видя, че ми е доста бавен нета и не мога да сваля pdf-a


Сря Юли 20, 2016 3:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юни 12, 2016 3:50 pm
Мнения: 68
Мнение Re: WS2812 светодиодна лента ....
Пак не те разбрах, но не се сърди. Явно не е в моята компетентност или не мога да включа за какво ми говориш.
По принцип с цифровата електроника съм г/д в час с нещата, макар не толкова колкото с аналоговата, но явно тия ленти още не им е дошло времето да ги науча, пусто!


Сря Юли 20, 2016 3:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27995
Местоположение: София
Мнение Re: WS2812 светодиодна лента ....
Ами само с цифрова може да стане, но ще трябва да натикаш цветовете в някаква памет .. абе малко безсмислена работа. За това ти трябва някакъв контролер с бързо I/O, имам в предвид I/O инструкциите да не отнемат много цикли, или пък да ти е много висока честотата :) Всеки ПИК би се справил без проблем но не с горният код. Ако някой колега ме светне за евтино CPLD защото не ми се рови а и отдавна не съм търсил, цялото нещо се вкарва вътре и ще управлява колкото си щеш канали. Реално всичко е един преместващ регистър, а ако ще се вкара и някакъв буфер си отива направо на FPGA малко.


Сря Юли 20, 2016 5:19 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юни 12, 2016 3:50 pm
Мнения: 68
Мнение Re: WS2812 светодиодна лента ....
Хмм а по какво се различават сигналите, за различните диоди, за да се управляват един след друг, всеки следващ
Тоест кой адрес да се задейства, дали 1, 5, 50...


Сря Юли 20, 2016 6:08 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 40 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни