WS2811 - kulonbozo adatlapok

Fórumok

Hi,

 

Van ez a WS2811 tipusu LED driver IC, es ket kulonbozo datasheetet talalok hozza, viszont ketto kozott kardinalis elteresek vannak:

https://cdn-shop.adafruit.com/datasheets/WS2811.pdf (ugy tunik ez a regebbi)
vs.
http://www.world-semi.com/DownLoadFile/129 (talan ez az ujabb)

Arrol viszont nem igazan talaltam infot, hogy ennek az IC-nek ket kulonbozo verzioja lenne - de ha megis, honnan lehetne megtudni, hogy amit hasznalok az melyik?

BTW, kis nehezites (tenyleg nem show stopper, inkabb mokas), hogy bizonyara baidu-translate-tel lett forditva, mert teljesen ertelmetlen mondatok szerepelnek benne.

Az IC-t megkerulni nem igazan lehet, gyakorlatilag standard megoldassa valt a vezerelheto LED-szalagok piacan.

 

Szoval a kerdes: van valakinek tapasztalata ezzel az IC-vel, vagy tudomanya, hogy hogyan lehet kideriteni, hogy melyik az "igazi" adatlap / hogyan dontheto el, hogy az adott IC melyiknek felel meg?

 

Koszi,

 

Udv,

 

/sza2

Hozzászólások

Az emlitett forrasok nem igazan adnak valaszt a kerdesre, viszont kiderult, hogy WS2812 eseten is megvan ez a kettosseg az adatlapok tekinteteben:

https://cdn-shop.adafruit.com/datasheets/WS2812.pdf

http://www.world-semi.com/DownLoadFile/108

 

Ami nekem igazan lenyeges lenne az "Data transfer time" reszben van.

 

/sza2

/sza2

Digital? Every idiot can count to one - Bob Widlar

Jogos, azt gondoltam hogy nem lehet nagy kulonbseg, ugyanaz az chip van bennuk. Bar tulajdonkeppen most hogy jobban megneztem az oldalukat tovabbra sem tudom, hogy mi a helyzet lehet, hogy csak egy vezerlo IC-juk van, azt aruljak kulon, meg pakoljak a LED-ekbe is?

Itt: http://www.world-semi.com/solution/list-4-1.html van tobb WS2811 altipus, es pl. nemelyik (pl. WS2812S) esetben oda van irva, hogy WS2811 van benne, masoknal nincs - viszont a leiras melletti letolheto adatlapban meg meg sincs emlitve.

Szoval az oldaluk, leirasaik, dokumentumaik engem inkabb osszezavarnak.

De a fentiektol fuggetlenul, a kerdes, hogy ha a kezemben van egy ilyen (knokret esetben egy LED szalag, kulonallo LED-ekkel es WS2811-es chippel (ezt le lehet olvasni a tokrol) akkor vajon melyik adatlap alapjan kell megirni a drivert?

 

/sza2

/sza2

Digital? Every idiot can count to one - Bob Widlar

> vajon melyik adatlap alapjan kell megirni a drivert?

Vaktában kell próbálkozni, amíg el nem kezd működni. És ez nem vicc akart lenni :-)

Azért linkeltem a példát, mert ő elég sokmindent visszafejtett ezeknek a lelkivilágából, és működő kódok is vannak ott. Én azt tölteném fel egy Arduinóra, addig próbálgatnám az időzítéseket, amíg nem kezd működni, és utána a tapasztalatok alapján írnék rendes drivert - vagy az lenne maga a driver, ami a próbálkozásból kijött.

Például legutóbb Raspberry-s dolgokat nézegettem, és megrökönyödve tapasztaltam, hogy az első változatban lévő csipnek sincs rendes adatlapja! Például az SPI modulhoz emiatt a mai napig nem csináltak slave drivert, de meg lehet nézni a master mód dokumentációját is, hogy hogy néz ki. Bakker, milliós tételben adták el hobbistáknak a csippet adatlap nélkül. Eszem megáll, de ez az iparág mai helyzete.

A WorldSemi oldaláról letöltött dokumentum végén van verziótörténet, abban láthatod, hogy az verziók miben térnek el egymástól. 

Az Adafruitos a v1.0 dokumentum.

A Data Transfer Time pont a v1.3-ban módosult. A dátumok alapján láthatod is, hogy mikor mi módosult.
Az, hogy ez csak dokumentáció pontosítás, vagy hardver revíziót is jelent, jó kérdés, a gyártó oldaláról sem derül ki.

OK, az 1.4-es vegen latszik, (cimszavakban) hogy mi a modosulas. Mondjuk en a korabbiakat nem talatam az oldalukon, kerdes, hogy mi a helyzet, ha nekem esetleg korabbi verzioju az IC-m...

> Az Adafruitos a v1.0 dokumentum.

Hiszek Neked, de ez mibol derul ki? ;-) En nem lattam a .pdf-ben, vagy csak atsiklottam felette?

Egyebkent az IC tokjan van egy datumnak "latszo" szamsor (20190823) - bar ez eleg szokatlan jeloles, altalban a YYWW a megszokott, szoval nem biztos, hogy az, csak tipp - ez alapjan akar az is lehet, hogy ami > 20180910 az legalabb 1.4 (de explicit ez nem lattam sehol kijelentve).

 

/sza2

/sza2

Digital? Every idiot can count to one - Bob Widlar

Kb. két éve hajtottam meg WS2812B-vel felépített kijelzőt próbaként (512 LED volt 64x8-as mátrixban), már akkor is találtam egymást nem teljesen fedő adatlapokat (itt az IC a LED-del együtt van)...

Úgy látom, az időzítések nagyjából megfelelnek annak, ami az általad újabbnak írt adatlapban van, de pl. "reset kód"-ként csak 100us-ot ad ki.
A másik adatlap szerint ennek >50us-nak kellene lennie - ez rendben, de a bitidők nem jönnek ki...

Amúgy egész szépen működött, de nem mertem az adott esetben ezt a megoldást használni.
Ekkora felületen szöveget futtatva és soronként visszafutva egyébként látszott valamennyire az adatsor késleltetése, de még nem volt zavaró.
Bizonyos mozgásnál gyorsabbat amúgy sem lehetett elérni, mert volt valamennyi "utánvilágítása" is a lekapcsolt LED-eknek.

Egyébként én is inkább nekiálltam próbálni, amikor ellentmondást láttam az adatlapokban.
A "reset" időzítést valószínűleg azért vettem lejjebb, mert futó szöveget írtam ki rá, de emlékeim szerint 50us körül még működött.

A Raspberry Pi-os megoldast kiprobaltam (https://github.com/jgarff/rpi_ws281x) - (PWM modban) mukodik. Viszont szkoppal megnezve, a "regi" protokoll jon ki belole (aminel a 0-k es az 1-ek egyforma hosszuak, 1.25us). Az en szalagom viszont ugy gondolom, hogy az ujabb ( (220~380)ns H + ~(580~1000)ns L a 0, (580~1000)ns H + ~(580~1000)ns L az 1), de megy a Pi-os userspace driverrel - ha PWM-et hasznal. Ugyanez a driver ha pl. SPI-n kuldi a biteket akkor nem mukodik (a LED-ek vilagitanak, csak nem a megadott pattern szerint).

Raadasul, a fenti driver mukodeset sem igazan tudtam megerteni egyelore (nem turtam melyre), az elkepzelesem az, hogy ha csupa 1-et kuldok (R, G, B is 0xff) akkor a kimeneten minden bitnek egyforman kellene kinezni, de szkoppal nezve nem igy van, illetve a jelalak nem egyforma ha valtok PWM es SPI kozott (ez magyarazza, hogy a LED-ek nem ugyanugy vilagitanak a ket esetben).

Szoval: szerintem a RPi-os driver a regi protokollt implementalja, a szalag valoszinuleg az uj szerint kellene hogy mukodjon. Ennek ellenere adott felallasban, megis mukodik aranylag jol - igaz. ha mindent 0-ra allitok, akkor is vilagit valamennyire a piros (kb. 10cm-rol nezve a LED-eket latszik, tavolabbrol nem igazan), szoval nem 100%-os...

Annak nem volt erom utanaszamolni, hogy ez tenyleg lehetseges-e, akkora atfedes van a ket protokoll kozott. Minden esetet viszont nem tudok leellenorizni (2^8 * 2^8 *2^8 (RGB) * 192 (LED-ek szama), es akkor meg van valami jitter is, tehat lehet, hogy az adott pattern neha mukodni fog, neha nem.

Erdekes modon, a protokoll inkabb rossz iranyba valtozott, programozasilag a minden bit ugyanolyan hosszu, sokkal konnyebben implementalhato, pl. SPI + DMA eseten gyakorlatilag egy tomb feltoltese utan magara hagyhato a periferia, az MCU tud massal foglalkozni, mig a valtozo hosszusagu bit eseten specialis hardware-es tamogatas nelkul (es en meg nem lattam direkt WS2811 protokollt tamogato periferiat), sokkal bonyolultabb megvalositani (meg egyebkent sem szep szerintem, hogy attol fugg, hogy mennyi ido alatt all be a csik, hogy mennyi 0 es mennyi 1 van benne).

Ami biztos, hogy ez igy egy oriasi kaosz :-(

 

/sza2

/sza2

Digital? Every idiot can count to one - Bob Widlar

Ami azt illeti, nálam egyforma hosszúak az egyesek és a nullák.
Anno két kontrollerre tettem fel -  a lassabbnál NOP várakozások voltak, a gyorsabbnál timeres várakozás... emlékeim szerint itt már nem voltak különösebb késések a végrehajtás többi része miatt, de nem emlékszem már, szkópon miként mutatott.

Egyébként viszonylag egyszerű a kód... magasba teszi a lábat és 1 esetén 0.7us múlva teszi alacsony állapotba 0.3us ig, 0 esetén pedig 0.3us múlva lesz alacsony 0.7us-ig.
(Legalábbis kód szinten ez áll.)
Ez, úgy látom, nagyjából megfelel az újabb protokoll-leírásnak, de ez is csak nagyjából - 1 esetén az alacsony állapot elméletileg túl rövid, a többi tolerancián belüli, viszont legalább szimmetrikus.
Ezzel bitenként végiglépteti az adatot G,R,B sorrendben, amit egy tömbből (mátrixból) kap.

Nem mentem tovább vele, mert végül másik fajta (bár sokkal bonyolultabb) megoldás lett inkább.

Nem rémlik egyébként, hogy világított-e valamennyire pirosan - szerintem nem -, mindenesetre szépen működött a megjelenítés.
Valahol van egy videóm a működésről ill. rajta futó szövegről, ha nagyon akarom, akkor éppen össze tudom keresni a komponenseit is, de nincs összerakva.

Ja, és úgy látom, oszloponként "futott vissza" a vezérlés, nem soronként - tehát 8 pixelenként van egy horizontális lépés a feldolgozásban. :)

A RPi drivert szkopozva raadasul anomalia van, ott az 1-est ugy lattam 840ns H, 420ns L. Na ez egyiknek sem felel meg. A reginel 250ns/1000ns +-75ns lenne a 0, 600ns/650ns +-75ns az 1, mig az ujnal meg (220~380)ns/(580~1000)ns a 0, (580~1000)ns/(580~1000)ns az 1. A RPi-os driver viszont a turesekkel sem esik bele egyikbe sem. Vagy valami nagyon elnezek.

> magasba teszi a lábat és 1 esetén 0.7us múlva teszi alacsony állapotba 0.3us ig, 0 esetén pedig 0.3us múlva lesz alacsony 0.7us-ig.

A 0-ra kijon, de az 1-re nekem nem tunik ugy, a 700ns a H-ra OK, de L-re 300ns jelentosen rovidebb 580ns-nal.

Persze egy timerrel amit bitenkent atallit az emeber meg egy kis logikaval meg lehet oldani az uj protokollt, de azert a regi protokollt sokkal tisztabban lehetett implementalni.

Mind1, azt hiszem marad a RPi mint megoldas, a cuccbol 1db kell a ceges Mikulas unnepsegre a gyerekeknek egy jatekhoz, szoval nem igazan tennek bele tobb munkat.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Igen, emiatt írtam, hogy 1 esetén az alacsony állapot elméletileg túl rövid, de szépen működött vele és a korábbi protokollra, úgy láttam, nem illeszkednek ezek az időzítések.
Úgy tűnik, ilyen mértékben nem kritikus neki az időzítés, vagy csak sikerült belefutnom egy szériába, aminél nem volt gond ezzel.
A "protokoll leírás" viszont eléggé furcsa, különösképpen az egyes verziók miatt.

Egyébként ez a 840 / 420ns az 1 értéknél hasonló problémának tűnik mint fent a 700 / 300-nál, bár ez nem szkóppal mért érték.
Másfelől nálam mikrokontroller végezte a vezérlést, nem tudom, a Pi-nél mennyire befolyásol az op.rendszer multitaskingja.

Egyébként megtaláltam a videót, amit készítettem róla nem listázott Youtube feltöltésként, esetleg elküldhetem, ha érdekel - de nyilvánosan nem szeretném kitenni.

Ha elkuldod PM-ben (nem tudom, dropbox link, vagy valami) szivesen megneznem - ami az en projectemet illeti, eldolt a RPi, annyira mukodik, amennyire kell (vegulis nem egy lelegeztetogep lesz), kesobb ha lesz idom, meg lehet, hogy foglalkozok vele egy kicsit.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Küldtem egy PM-et.

Ha működik rendesen a Pi-vel, akkor egy Mikulás ünnepségre egy darabért valóban nem érdemes többet foglalkozni vele...
...ha teszi a dolgát rendesen, az már bőven elég ide.

Szerk.: Írj, ha nem érkezett meg - én a másolatot nem kaptam meg

Küldtem újra egy üzenetet - elég érdekesen tördelte egyébként (egyes szavak is összecsúsztak), de most megkaptam belőle a másolatot, korábban a saját címemre sem jött semmi.

Ha nagyon nem működik, Prohardveren keresztül is elérhető vagyok. :)

Remélem, most normálisan átment a rendszeren.