Zainspirowany projektem Ambilight na Arduino zakupiłem takowe wraz z 5 metrowym paskiem LEDów WS2812B. Podłączyłem wszystko jak na załączonym obrazku i zabrałem się za programowanie.
Zainstalowałem bibliotekę FastLED. Wybrałem płytkę 'Arduino Nano' oraz odpowiedni port. Pierwsze problemy wystąpiły przy próbie załadowania kodu. Musiałem zmienić procesor na ATmega328P (Old Bootloader).
Na test próbowałem załadować kod przykładowy Blink (mruganie ledów) lub FirstLight. Po podłączaniu zasilania (zasilacz komputerowy, używam linii 5V 20A) ledy całością mrugną raz na 1 milisekundę, i pozostaje zapalona tylko pierwsza dioda LED. Świeci się na czerwonawy kolor.
Nie mam pojęcia co robię źle, a jestem zielony w temacie Arduino.
Bardzo proszę o pomoc, nie znalazłem rozwiązania w internecie
Zainstaluj sobie bibliotekę Adafruit_NeoPixel. Jak masz programator USBASP to wgraj sobie nowy bootloader, będzie szybciej wgrywać soft i zostanie więcej miejsca na kod. Jak nie masz to kup, wcześniej czy później się przyda. Na początek podłącz kilka led i zasil je wprost z Arduino (max 5).
Ten kod nie jest raczej do WS2812. One mają tylko wejście data a nie data i clk a w programie jest
Code:
#define DATA_PIN 5
#define CLOCK_PIN 13
Inna sprawa to deklarowanie nr pinu "cyferką" nie jest zbyt bezpieczne, lepiej tak
Code:
#define DATA_PIN D5
Wtedy jest jasność, czy to D5 czy A5. Fakt, że biblioteki mogą być pisane różnie, Trzeba by się zagłębić w ta bibliotekę. Na innych płytkach (np ESP) to dopiero jest młyn. Pin2 to np D4, dlatego najlepiej pisać D4.
Fabu31 wrote:
Czy jeżeli mam całe 5m taśmy, a zdefiniowałem 60 LEDów, to będą ode działały jakby reszta była odcięta?
Wystarczy przeczytać notę aplikacyjna WS2812. Tam jest opisane jak one działają.
Fabu31 wrote:
LChucki wrote:
Czym to zmierzyłeś?
Po prostu mrugną raz i tyle. Zauważyłem, że nie dokładnie wszystkie, a losowa większość. Przy resecie Arduino przyciskiem, pierwsza dioda tylko gaśnie i się zapala z powrotem.
Da się zobaczyć błysk, trwający 1ms ale nie da się na oko stwierdzić czy trwa 1 czy 30ms. Dziwi mnie ta dokładność 0,0001 sekundy.
Inna sprawa to deklarowanie nr pinu "cyferką" nie jest zbyt bezpieczne, lepiej tak
Code:
#define DATA_PIN D5
Przy takiej deklaracji wywala masę błędów.
LChucki wrote:
Ten kod nie jest raczej do WS2812. One mają tylko wejście data a nie data i clk a w programie jest
Code:
#define DATA_PIN 5
#define CLOCK_PIN 13
Jest komentarz opisujący, że to kod uniwersalny i można pominąć Clock_pin. Raczej to dobry kod bo jest przykładem z biblioteki.
W tym wypadku DATA_PIN 5 oznacza D5, bo przy podłączeniu do innych pinów nie świeci się pierwsza dioda.
dla AVR nie można w ten sposób oznaczać "digital pins" tz. przez prefix "D" -
Widzę jakieś niekonsekwencje w tym całym Arduino. Część pinów cyferkami, część "A0" lub "PIN_A0". Nic dziwnego, że kiedyś w Wemos nie mogłem znaleźć jednoznacznych oznaczeń. Tam są"Dx" i "A0", w ARM PIN_Dx. Bałagan jakich mało. Taki "standard" jak RS232C, kilkaset kombinacji.
Podłączyłem wszystko jak na załączonym obrazku i zabrałem się za programowanie.
A gdzie masz podłączone +5V do płytki Nano??
Zasilanie płytki Nano ma chyba z USB. To wystarcza mając wspólny GND...
Kto jeszcze potrzebuje profesjonalny schemat dla podłączenia trzech przewodów?
Dla zainteresowanych malkontentów poprawny i kolorowy schemat jest na odwrotnej stronie tej odpowiedzi...
Do autora:
Popatrz jeszcze raz na pętlę loop w swoim programie i powiedz ile diod, oraz które powinny błyskac(?)
Masz tam tylko diode o numerze 0 , która ma błyskac co pół sekundy i nic więcej.(!)
Skąd więc oczekiwanie na pokaz wielokolorowych świateł błyskajacych, lub zmieniających parametry w/g jakiegoś algorytmu, który jak dotychczas nie isnieje?
Processory i kompilatory są dośc 'mądre' urządzenia, ale jak powszechnie wiadomo tej części programu za ciebie nie dokończą.
Zwyczajnie, nie potrafią czytac zamysłów programisty.
Kiepsko! Języka programowania nie znasz,bibliotek Arduino nie znasz, sprzętu (oscyloskop itp) pewnie nie masz. Słabo to widzę.
W twoich oczach nikt nie powinien zaczynać uczyć się obsługiwać Arduino. Niestety spodziewałem się, że zamiast pomocy spotkam grupę "specjalistów", którzy problemu szukają tam, gdzie go nie ma. Niestety twoją wiedzą też nie potrafisz się pochwalić. Cała elektroda.
Kiepsko! Języka programowania nie znasz,bibliotek Arduino nie znasz, sprzętu (oscyloskop itp) pewnie nie masz. Słabo to widzę.
W twoich oczach nikt nie powinien zaczynać uczyć się obsługiwać Arduino. Niestety spodziewałem się, że zamiast pomocy spotkam grupę "specjalistów", którzy problemu szukają tam, gdzie go nie ma. Niestety twoją wiedzą też nie potrafisz się pochwalić. Cała elektroda.
Czy lekarz, przez forum, potrafiłby pomóc w wykonaniu zabiegu wycięcia wyrostka gdy doradzałby osobie KOMPLETNIE nie znającej się na medycynie i NIE MAJĄCEJ wymagane sprzętu?
Nie zliczę ile projektów z WS28xx zrobiłem, zliczę natomiast, że bardzo rzadko, udało sie uruchomić od pierwszego "kopa". Mając sprzęt i wiedzę, w którą nie wierzysz, w ciągu godziny czy dwóch ZAWSZE udało mi się uruchomić projekt. Projekty nie były banalne, bo w czasie transmisji do WS działa program główny, przerwania, USB (sprzętowe a nie jakieś tam FTDI).
Zacznij więc od podstaw i sprzętu albo uzbrój się w cierpliwość i metodą prób i błędów (która jest dobra chyba tylko w Lotku) próbuj uruchomić projekt.
Dla mnie to zadanie jest proste. Ustaw break point przed funkcja wysyłającą dane do WS2812
Podłącz oscyloskop / analizator logiczny
Odpal program
Jak się zatrzyma na break, uruchom ODPOWIEDNIO ustawiony oscyloskop / analizator
Puść program dalej
Przeanalizuj zarejestrowane dane. Są zgodne z dokumentacją WS2812?
Jeśli tak, sprawdź czy reset jest ok?
Jest ok? Ustaw oscyloskop na wyłapywanie zbyt długich poziomów H i L.
Nie ma takich sytuacji?
Zrobisz to i już wiesz, czy transmisja jest ok.
Proste?
Rozumiesz coś z mojego opisu?
Umiesz posługiwać się zaawansowanym oscyloskopem / analizatorem?
Eh, Efekt z filmu jest raczej stosowny… i spodziewany.
Kilka pytań, na które odpowiedzi wykorzystaj dla siebie.
Czy zastanowiłeś się chocby na moment nad sprawą przepływu prądu w tym układzie?
Policz:
Każda z diod R , G oraz B, przy pełnym wysterowaniu pobiera 20 mA. Każdy pojedynczy punkt (pixel) ma w sobie trzy takie diody oraz mini-uController/driver zasilany z tejsamej magistrali prądowej biegnącej wzdłuż tasmy. Prostym rachunkiem, każdy punkt swiatła (segment) tej wstążki rozumiany tu jako ‘dioda’ RGB teoretycznie może pobierac 60 mA.
Jeżeli masz tych ‘diod’ 300 to należałoby przewidziec źródlo prądowe (zasilacz) o wydajności :
300 * 0.060 = 18A.; Czy takim zasilaczem silisz ten układ?
Dalej,
Czy te cienkie ścieżki zasilające (‘+’ i ‘-‘) biegnące wzdłuż taśmy wytrzymają tak wysoki prąd?
Z pewnościa nie sa one na tyle grube aby ich rezystancja była pominięta. Zatem mamy do czynienia z progresywnym spadkiem napięcia. Praktycznym efektem tego zjawiska jest szansa że tylko kilka diod na poczatku taśmy będzie reagowac na zadany program, te dalsze segmenty mogą gubic kolor, a te na końcu nie świecic w ogóle.
Należe tu nadmienic że nie wszystkie taśmy są tej samej jakości pod tym względem. (Źródło, producent).
Proces wysterowania takiej taśmy jest dośc dynamiczny co powoduje ‘tętnienia’ w obciążeniu linii zasilającej, co może miec wpływ na pracę processorów w każdej z kolejnych diod/segmentów WS.
Ten problem możesz w pewnym stopniu łagodzic dodajac odpowiedniej wielkości condensator na liniach zasilających . Tak, w ‘liczbie mnogiej’ bo potrzebujesz więcej (niż jedną) linii zasilających, podłączonych w kilku miejscach do długiej, kilku metrowej taśmy.
Dla krótkich taśm, na przykład 1m (chyba 60 diod) powinieneś zasilic oba końce taśmy.
Gdy już uporządkujesz zasilanie to jako testowy program spróbuj sketch: ’ColorPalette’ dołaczony w packecie biblioteki ‘FastLed’
Przeczytaj ze zrozumieniem wszystkie uwagi i objaśnienia zawarte w tym przykładzie; jest tam omówiona kwestia zajętości pamięci RAM, którą ktoś wyżej straszył cie...
Dla ciekawych - pierwszy led był wadliwy/spalony, dlatego całość nie działała. Po jego usunięciu wszystko śmiga jak należy. Z pozdrowieniami dla tych artystów, 'fachowców', którzy szukali problemu tam gdzie go nie ma, a takiej oczywistości się nie domyślili (jak to zawsze na elektrodzie)