Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Computer ControlsComputer Controls
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] LEDy nie działają z moim Arduino Nano

07 Dec 2018 19:37 1128 19
  • Level 5  
    Witam,

    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 :(
    LEDy nie działają z moim Arduino Nano
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Computer ControlsComputer Controls
  • Level 33  
    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).
  • Level 31  
    Fabu31 wrote:
    ledy całością mrugną raz na 1 milisekundę,

    Czym to zmierzyłeś?

    Pokaż kod. Czy na pewno D5 ma sterować ledami?
    Czy napięcie zasilające na led nie spada poniżej dopuszczalnej granicy. Zasilacz może i ma 20A ale na stykówce wszystkiego możesz się spodziewać.
  • Level 5  
    Code: c
    Log in, to see the code


    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? Nie chcę na razie dzielić taśmy.

    Dodano po 6 [minuty]:

    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.
  • Level 31  
    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.
  • Level 5  
    LChucki wrote:
    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.
  • Computer ControlsComputer Controls
  • Level 39  
    LChucki wrote:
    Inna sprawa to deklarowanie nr pinu "cyferką" nie jest zbyt bezpieczne, lepiej tak
    Code:
    #define DATA_PIN D5


    W Arduino, dla AVR nie można w ten sposób oznaczać "digital pins" tz. przez prefix "D" - nie są one w ten sposób zadeklarowane (link).
    Autor używa nano, a więc AVR.
  • Level 31  
    khoam wrote:
    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.
  • Level 31  
    Piottr242 wrote:
    Fabu31 wrote:
    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??

    Tak to jest jak nie ma schematu tylko jakieś dziecinne obrazki a przewody w jednym kolorze.
  • Level 38  
    Piottr242 wrote:
    Fabu31 wrote:
    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.

    Przestudiuj, lub skopiuj program z tego linku:
    https://www.youtube.com/watch?v=cDE9yXKdFDM

    Byc moze nie jest to co się spodziewałeś, to skorzystaj jeszcze z tej strony:
    https://www.youtube.com/watch?v=EcMKditEVtY

    Znajdziesz tam link do dnl. programu (sketch) i kolorowego schematu w kilku versjach.
    W kodzie skorygujesz tylko ilośc diod i numer pinu kontrolującego cały show.

    Łatwe.. nieprawdaż ? (E-Zy)

    e marcus
  • Level 31  
    #define NUM_LEDS 300
    Nie brakuje RAM?
    Wiesz ile RAM ma NANO?
    Wiesz ile potrzeba na 300led? - sprawdź w bibliotece "FastLED" ile rezerwuje RAM na jedną diodę.
  • Level 5  
    LChucki wrote:
    #define NUM_LEDS 300
    Nie brakuje RAM?
    Wiesz ile RAM ma NANO?
    Wiesz ile potrzeba na 300led? - sprawdź w bibliotece "FastLED" ile rezerwuje RAM na jedną diodę.

    Przy deklaracji 5 Ledów to samo...

    Dodano po 1 [minuty]:

    LChucki wrote:
    sprawdź w bibliotece "FastLED" ile rezerwuje RAM na jedną diodę

    Nie wiem gdzie to sprawdzić, jak już mówiłem nigdy wcześniej nie miałem styczności z Arduino
  • Level 39  
    Fabu31 wrote:
    Nie wiem gdzie to sprawdzić, jak już mówiłem nigdy wcześniej nie miałem styczności z Arduino

    Na każdy potrzebuje sizeof(CRGB) czyli 3 bajty.
  • Level 31  
    khoam wrote:
    Fabu31 wrote:
    Nie wiem gdzie to sprawdzić, jak już mówiłem nigdy wcześniej nie miałem styczności z Arduino

    Na każdy potrzebuje sizeof(CRGB) czyli 3 bajty.

    No to w czasie transmisji do WS2812 obciążenie procka 100%, przerwania zawieszone.

    Dodano po 3 [minuty]:

    Fabu31 wrote:
    Nie wiem gdzie to sprawdzić, jak już mówiłem nigdy wcześniej nie miałem styczności z Arduino

    Kiepsko! Języka programowania nie znasz,bibliotek Arduino nie znasz, sprzętu (oscyloskop itp) pewnie nie masz. Słabo to widzę.

    Moderated By Madrik:

    3.1.9. Nie ironizuj i nie bądź złośliwy w stosunku do drugiej strony dyskusji. Uszanuj odmienne zdanie oraz inne opinie na forum.

  • Level 5  
    LChucki wrote:
    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.
  • Level 31  
    Fabu31 wrote:
    LChucki wrote:
    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?
  • Level 38  
    Fabu31 wrote:
    Kod wygląda teraz tak:
    .........................
    a efekt jak na filmie, czyli żadnej zmiany:
    https://drive.google.com/file/d/1CzzQW6cS0G-qZOA_bUy4Nuio1eGV1VJ7/view?usp=sharing


    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...

    e marcus
  • Level 5  
    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) :)