Skocz do zawartości

Kurs STM32L4 – #15 – diody RGB WS2812B (liczniki), quiz


Pomocna odpowiedź

Kurs STM32L4 – #15 – diody RGB WS2812B (liczniki), quiz

Sterowane cyfrowo diody RGB to elementy, które spotyka się w coraz większej liczbie urządzeń. Są one wygodne dla konstruktorów, bo wymagają tylko jednego pinu mikrokontrolera. Komunikacja z diodami WS2812B wymaga jednak precyzji. Idealnie sprawdzą się tutaj liczniki, dzięki którym wygenerujemy odpowiednie sygnały.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Link to post
Share on other sites

Przypominamy: w komentarzach do kursów rozmawiamy wyłącznie na tematy związane z konkretnym kursem. Mile widziane są również informacje od osób, które korzystały wcześniej z naszych poradników. Wszystko po to, aby kursanci, którzy mają zamiar korzystać z tego kursu nie musieli "przedzierać" się przez dziesiątki postów na inne tematy. Tematy na pytanie, które nie są związane z kursem można zadawać na naszym forum o mikrokontrolerach.

Link to post
Share on other sites

Zachęcam do lektury kolejnej części kursu - tym razem o znanych i lubianych diodach RGB, dzięki którym każdy projekt może zyskać mnóstwo kolorów. Oczywiście diody były tutaj głównie pretekstem do tego, aby pokazać jak (w kolejny sposób) wykorzystać uniwersalne liczniki!

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@michal1210 witam na Forbocie i dziękuję z miłe słowa - cieszę się, że kurs się podoba! Życzę udanych eksperymentów, w razie ewentualnych pytań pisz śmiało na forum 🙂

Link to post
Share on other sites

Muszę przyznać, że totalnie zgłupiałem. Zrobiłem wszystko zgodnie z instrukcjami (kod kopiuj-wklej etc.). A diody zachowują się bardzo dziwnie. A konkretnie, linijka diod czasami zapomina o diodzie numer 0. Żeby znaleźć przyczynę tej usterki zmodyfikowałem kod funkcji main() (wszystko inne pozostawiłem tak samo). Teraz wygląda on tak:

  ws2812b_init();
  HAL_Delay(1000);
  ws2812b_set_color(0, 32, 0, 0);
  ws2812b_set_color(1, 0, 32, 0);
  ws2812b_set_color(2, 0, 0, 32);

  while (1)
  {
	  ws2812b_update();
	  HAL_Delay(250);

Czyli spodziewane zachowanie to: wszystkie diody gasną na sekundę, potem zapalają się trzy pierwsze: czerwona, zielona i niebieska, a potem sytuacja ta się już nie zmienia. Niestety, zamiast tego diody dziwnie mrugają. Żeby ustalić czy to nie jest wina posiadanej przeze mnie linijki, podpiąłem równolegle drugą linijkę spodziewając że będzie się zachowywać jak pierwsza. Efekt jest taki, że druga linijka ma podobny problem, ale mrugnięcia są zupełnie losowe i nie są zsynchronizowane z pierwszą linijką.  

Wygląda to tak: 

 

Na wideo resetuję układ. Jak widać ws2812b_init() nie wyłącza diody 0, ale gaśnie ona przy którymś kolejnym wywołaniu ws2812b_update(), potem zapala się na czerwono i już się nie zmienia. Niestety nie mam oscyloskopu, żeby sprawdzić dokładnie jak wygląda sygnał. Czy ktoś wie z czego może wynikać takie zachowanie?

Link to post
Share on other sites

Witam. Rozwiązałem problem. Program funkcjonuje poprawnie po zmienieniu linijki 

  led_buffer[RESET_LEN + 24 * LED_N] = 100;

na

  led_buffer[RESET_LEN + 24 * LED_N] = 0;

Ogólnie, wydaje mi się, że w tym odcinku kursu znajduje się poważny błąd. Zaprezentowany sposób komunikacji z linijką led jest niezgodny z notą katalogową. Zacznijmy od następującego zdania:

Cytat

Wolelibyśmy, żeby po przesłaniu danych stan linii był ustawiony jako wysoki, dlatego możemy na końcu dodać wartość 100, czyli pełne wypełnienie.

Dlaczego? Po co potrzebne jest nam pełne wypełnienie? W nocie katalogowej nigdzie nie jest napisane że stan wysoki jest do czegokolwiek potrzebny. 

Następnie:

Cytat

Wielkość tego buforu wynika z tego, że potrzebujemy miejsca na następujące elementy:

  • 40 cykli PWM zerowych, aby wysłać sygnał RESET,
  • następnie dane dla 7 diod WS2812B (każda oczekuje 24 bitów koloru),
  • 1 cykl z wypełnieniem 100%, który będzie powtarzany po zakończeniu transmisji.

Dlaczego RESET jest na początku? W nocie katalogowej nie ma nic o stanie przed rozpoczęciem transmisji. Reset ma zostać wysłany PO zakończeniu transmisji. Czyli zgodnie z notą katalogową transmisja wygląda tak: 1) przesyłamy dane, 24 bitów na każdą diodę, 2) ustalamy stan NISKI na przynajmniej 50 us, 3) możemy wysłać kolejną transmisję. Tak więc ani robienie RESET na początku ani ustalanie 100% PWM na koniec nie ma sensu. 

Ten błędny model komunikacji jest potem ciągnięty przez cały artykuł, w efekcie zarówno kod podstawowy (przed utworzeniem biblioteki) jak i kod już po optymalizacji nie działają poprawnie. Zasugerowana przeze mnie zmiana wypełnienia z 100 na 0 sprawia, że urządzenie zaczyna działać poprawnie (najprawdopodobniej dlatego, że diody odebrały w końcu prawidłowy sygnał RESET na koniec komunikacji), choć kod nadal konceptualnie jest niepoprawny. 

  • Pomogłeś! 1
Link to post
Share on other sites

Cześć, mam taki problem. Wywołanie funkcji HAL_TIM_PWM_Start_DMA nie powoduje u mnie zmiany wypełnienia sygnału PWM, cały czas jest stan niski. Czy ktoś mógłby mi coś doradzić jak to rozwiązać?

Link to post
Share on other sites

@Emtorek akurat ostatnio coś robiłem i u mnie działa na wersji IDE1.6.0. A jak zmienisz polaryzacje w cubie to coś się dzieje?

Link to post
Share on other sites

@Gieneq wyszła z tego bardzo ciekawa sytuacja, bo dopiero za 3 próbą tworzenia projektu, kiedy zmieniłem wersję firmware na V1.17.0, wszystko zaczęło działać. Co jeszcze ciekawsze, kiedy wróciłem na V1.17.2 też już wszystko działało, więc w sumie nawet nie dowiedziałem się co było przyczyną.

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.