Esp polaczenie z ledami adresowanymi rożnice

Witam
Mam takie pytanie na temat różnicy w polaczeniu esp z Ledami


(zielone to przewody data)

czy ktoś mógłby mi wyjaśnić na chłopski rozum jakie są różnice miedzy takimi połączeniami

Obecnie mam 1 listwę 5 m którą mam podzieloną na 2 biurka i jako że będę trochę zmieniać to zastanawiam się nad cięciem na 2 paski

W 3 zdaniach - ma to znaczenie jedynie w kwestii wizualnej dla efektów dynamicznych, i o ile w ogóle mówisz o układach adresowanych jak WS2811 WS2812 i podobne (temat tego nie precyzował - poprawiłem), gdzie zarządzasz każdym pojedynczym pikselem, a nie o analogowych paskach LED, napisałeś o data z czego wnoszę, że w pytaniu chodzi o układy adresowane, a nie o zwykłe LEDy

  1. niektóre efekty “przepływają” z lewego paska do prawego (lub odwrotnie - kierunek nie ma znaczenia, jeśli zrozumiesz jak działa ich sterowanie, to będziesz wiedział jak to działa i dlaczego tak)
  2. tu zależy od tego co umożliwia dane oprogramowanie uruchomione w ESP (jeśli to projekt WLED to każdy pasek może wyświetlać coś zupełnie niezależnego od drugiego), to zużywa większe zasoby w ESP
  3. na obu paskach dzieje się dokładnie to samo (muszą być równej długości)

Pomijając kwestie wizualne zasadniczo powinno się stosować konwerter poziomów logiki między wyjściem GPIO, a wejściem układów sterujących LEDami, konkretnie chodzi o konwerter logiki 3.3V → 5V (TTL), więc dla 2 wyjść niezależnych 2 konwertery.
Partyzancko można poświęcić jeden układ LED zasilany napięciem pośrednim 4V zamiast konwertera, jego użycie trzeba uwzględnić w oprogramowaniu.

Dziękuje za informacje
Tak to projekt wled a ledy adresowalne.
Czyli w moim przypadku gdzie mam 2 biurka niezalenie oświetlać to przypadek 2.
Obecnie mam zrobione to segmentami ale może faktycznie lepiej podzielić i każdy pasek podpiąć pod inny pin (mam esp 8266)

zastanawia mnie tylko obecnie w wled mamy segmenty i jest tam opcja mirror (3 opcja z rysunku)
pytanie generalnie lepsze jest zastosowanie segmentacji czy wyjścia GPIO?

Co w ogóle masz na myśli wspominając mirror - daj jakiś konkret z dokumentacji albo skrinszota.

Chyba nie rozumiem pytania - na 3. rysunku są 2 paski “na bezczelnego” podpięte w to samo GPIO, więc to nie są żadne segmenty, ani programowy mirror.
Generalnie zależy co zamierzasz uzyskać, bo jak wiadomo wszystko ma swoje wady i zalety, a chyba nie rozumiesz w jaki sposób są sterowane układy adresowane.

Zacytuję sam siebie

Może troszkę przybliżę o co chodzi, nie wiem na ile mi się to uda, najlepiej by było gdybyś przeczytał dokumentację techniczną jakiegoś układu adresowanego w rodzaju WS2812 i przeczytał coś o budowie protokołu sterującego.

Dla wygody każdy adresowany układ zawierający 3 diody: R, G i B zintegrowane we wspólnej obudowie z układem sterującym (takim prostym MCU) mającym 3 regulatory PWM po 1 dla każdej z 3 diod LED oraz realizujący transmisję i obróbkę danych nazwijmy dla uproszczenia życia pikselem.

Aby to było zgodne z rysunkami z 1. posta umówmy się, że każdy piksel w każdym pasku ma wejście danych po lewej, a wyjście danych po prawej.


I teraz do sedna.

Informacja płynie od lewej do prawej - MCU generuje taki strumień danych nazwijmy obrazowo go pociągiem z wagonikami, każdy wagonik zawiera dane dla jednego piksela jak ma on świecić LEDami przez jakiś umowny okres czasu. A MCU będzie naszą stacją kolejową, gdzie na bocznicy składane są te pociągi z wagonów.

Słabe porównanie, ale nie wymyśliłem nic lepszego, po prostu sytuację, gdzie podpinasz 2 paski w jedno GPIO wyobrazimy sobie tak - na wyjeździe ze stacji jest dziwny rozjazd z 1 toru w 2 tory i ogromna magiczna piła, która rozcina wagony wzdłuż, dzięki czemu powstają 2 identyczne pociągi jadące w różne strony i każdy wjeżdża do swojego paska. Ta magiczna piła ma zerowy koszt dla stacji, bo jest napędzana z perpetum mobile.

Pociąg pierwszy nie wie nic o drugim, ani drugi o pierwszym, każdy sobie jedzie osobno, mimo, że mają taki sam układ wagonów i ich zawartość.

MCU wie ile zaplanowałeś sobie pikseli w pasku, więc wysyła w pociągu dokładnie tyle wagoników ile sobie zażyczyłeś definiując ilość pikseli w pasku.

Żaden piksel nie wie czy ma sąsiadów po lewej, ani po prawej, bo protokół jest jednokierunkowy.


Przyjeżdża do pierwszego pociąg od lewej strony, zadanie piksela jest takie - odczepić 1 wagon, informacje w nim zawarte wysłać do układów zapalających LEDy a resztę pociągu czyli wagony od 2. do ostatniego wysłać w prawo do następnego piksela.

Pociąg przyjeżdża do drugiego piksela, on nie wie czy pociąg przyjechał z jakiegoś piksela czy ze stacji początkowej i dla niego drugi wagon jest pierwszym.
Patrz wyżej - zadanie piksela jest takie - odczepić 1 wagon (który kiedyś był drugi), informacje w nim zawarte wysłać do układów zapalających LEDy, a resztę pociągu czyli wagony od 2. do ostatniego wysłać w prawo do następnego piksela.

itd. itd.

Pociąg przyjeżdża do przedostatniego piksela, on nie wie czy pociąg przyjechał z jakiegoś piksela czy ze stacji początkowej i dla niego przedostatni wagon jest pierwszym.
Patrz wyżej - zadanie piksela jest takie - odczepić 1 wagon (który kiedyś był przedostatni), informacje w nim zawarte wysłać do układów zapalających LEDy, a resztę pociągu, czyli ostatni wagon wysłać w prawo do następnego piksela.

Pociąg przyjeżdża do ostatniego piksela, on nie wie czy pociąg przyjechał z jakiegoś piksela czy ze stacji początkowej i dla niego ostatni wagon jest pierwszym.
Patrz wyżej - zadanie piksela jest takie - odczepić 1 wagon (który kiedyś był ostatni), informacje w nim zawarte wysłać do układów zapalających LEDy, a resztę pociągu… zaraz, zaraz jaka reszta, nic już nie zostało, więc nic nie wyjedzie w prawo.

Jeśli w pasku jest więcej pikseli niż jest wagonów w pociągu to one nie dostaną informacji (więc będzie tam ciemno, lub zostaną wyświetlone jakieś śmieci jeśli inicjalizacja przy włączaniu paska byłą nieudana).

Jeśli pociąg ma więcej wagonów niż długość paska to z ostatniego piksela nadmiarowe wagony pojadą w niebyt.


Teraz wprowadzamy segmenty. Tu wszystko dzieje się na stacji - każdy segment to oddzielny pociąg zestawiany na osobnej bocznicy, a gdy jest gotowy, to do pociągu jadącego do segmentu pikseli będącego bliżej stacji jest doczepiany na końcu ten drugi pociąg.

Gdy pikesele z pierwszego segmentu skonsumują wagony, które pierwotnie były w pierwszym pociągu, to do drugiego segmentu dojadą już tylko wagony, które pierwotnie były na drugiej bocznicy zestawione w drugi pociąg.


No a teraz używamy 2 GPIO - na jednej bocznicy jest składany pociąg, który wyjedzie pierwszym, GPIO, a na drugiej jest budowany pociąg który wyjeżdża z drugiego GPIO.

W szczególnym przypadku, gdy oba pociągi mają być zawsze identyczne, to można przepuścić jeden pociąg przez magiczną piłę - to zredukuje ilość roboty dla kolejarzy na stacji. Wtedy przez każde GPIO wyjadą jednakowe pociągi przy kosztach obsługi jak dla pojedynczego pociągu.


Czekałeś kiedyś na przejeździe kolejowym?
To na 100% wiesz jaka jest różnica między sytuacjami, gdy pociąg ma 10 wagonów i gdy pociąg ma 20 wagonów - istotnie różny jest czas przejazdu przy tej samej prędkości.

No niestety na tym etapie pisania odkryłem słabość tego porównania do odczepiania pierwszego wagonu w każdym pikselu, sytuacja byłaby bliższa realności gdyby chodziło o rozładowanie pierwszego wagonu zawierającego zawartość, więc nie tyle piksel nie wie, co po prostu ignoruje informację o pustych wagonach, ale one jednak jadą dalej, jednak za dużo napisałem, żeby to pisać od nowa.
A czemu o tym wspominam, bo dla długich pasków zaczyna być istotny czas przejazdu pociągu. Więc w pewnych sytuacjach lepiej wysłać 2 osobne stosunkowo krótkie pociągi osobnymi torami, niż jednym, torem taki mega-długi.


Można sobie też wyobrazić sytuację awarii - uszkodzenie połączenia między pikselami, załóżmy że to zawalony most i pociąg wpada do przepaści zamiast dojechać do kolejnego piksela.
Jeśli jadą 2 pociągi osobnymi drogami to tylko jeden wpadnie do przepaści gdzieś na trasie.

2 polubienia

Napisze WOW
Mam nadzieję ze wielu to rozjaśni jak wcześniej nie wiedzieli,
nawet taki głąb ja ja zrozumie.
Czyli już wiem ze zrobię z 2 GPIO zawsze to “krótszy pociąg”
co do mirroru
mirror
mirror effect
(to zdjęcie przykładowe z netu w tym przypadku liczba ledów jest nie równa do tego efektu aby dobrze działało)
jak mam 2 segmenty i wybiorę i zaznaczę mirror to jest tak samo na obu segmentach

:smile:
Przepiękne tłumaczenie.
Zacząłem sobie wyobrażać tory kolejowe na taśmie led. :clap:

No to wtedy niby kolejarze puszczają pociąg przez magiczną piłę by uzyskać ten drugi, ale tak naprawdę biorąc pod uwagę opcję mirror, to może być ona realizowana na 2 sposoby - albo na 2 bocznicach budujemy osobno 2 jednakowe pociągi albo “magiczna piła” (której nie da się użyć, gdy drugi pociąg ma wagony w odwrotnej kolejności).

De facto kopiowanie obszaru pamięci które może tu być stosowane nie jest jakimś hardkorowym obciążeniem dla MCU, ale jednak zużywa zasoby.
Natomiast “magiczna piła” może być zrealizowana przez skrosowanie sterowania 2 wyjść GPIO z jednej bramki wyjściowej, z której pobieramy ten sam sygnał (to wymaga zerowych zasobów, dlatego była mowa o perpetum mobile :grin:), nie wiem jednak jak to naprawdę zrealizowali autorzy. Natomiast bezczelne podebranie sygnału dla kilku pasków z jednego GPIO nie obciąża mocy obliczeniowej MCU, ale obciąża dodatkowo fizycznie wyjście GPIO pobranym prądem.

Jakkolwiek opcja reverse direction zaraz obok może jednak świadczyć o tym, że magiczna piła wcale nie jest w użyciu i oba pociągi zestawiane są na osobnych bocznicach (więc kolejarze mają 2x tyle do roboty co dla jednego pociągu).

Tu by była wymagana analiza kodu źródłowego, a tego mi się nie chce robić.


Teoretycznie optymalnym rozwiązaniem jest użycie jednego GPIO jeśli chcesz na kilku paskach zawsze wyświetlić to samo, tu jednak zaczyna wchodzić inna kwestia - każdy osobny pasek wpięty w jedno GPIO stanowi obciążenie, a wyjście nie ma nieskończonej obciążalności (tu to w sumie można nieco odpuścić, bo tak naprawdę powinien być tam wpięty konwerter poziomów logicznych, który będzie stanowił bufor podlegający faktycznemu obciążeniu przez każdy pierwszy piksel każdego paska do niego podłączonego)

Ponadto wcześniej zaniedbaliśmy zupełnie kwestię konwertera poziomów - na każdym wyjściowym GPIO sterującym paskiem powinien być użyty jeden.


Zaniedbaliśmy też kwestię wysyłanie sygnału dużej częstotliwości długimi kablami - tak naprawdę MCU powinien być możliwie blisko pierwszego piksela każdego paska, bo długie kable będą stanowiły problem, a nawet kilka problemów - może nastąpić utrata lub zniekształcenia danych, a dodatkowo takie długie kable emitują zakłócenia do swojego otoczenia.

Więc biorąc pod uwagę niską cenę MCU sensowne może być użycie kilku MCU każdego do jednego paska.


Tak samo przemilczana jest kwestia zasilania pasków, gdzie płyną bardzo duże prądy (szczególnie dla modeli pikseli zasilanych 5V).


W ogóle to zajrzałem do aktualnej dokumentacji i naprawdę warto ją przeczytać w całości - tam są opisane chyba wszystkie problemy tu wspomniane i o wiele więcej (dlatego warto zajrzeć i do FAQ i do advanced, a nie skupić się tylko na samych podstawach)
https://kno.wled.ge/basics/getting-started/