Komentator Napisano Czerwiec 29, 2021 Udostępnij Napisano Czerwiec 29, 2021 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. Cytuj Link do komentarza Share on other sites More sharing options...
Komentator Czerwiec 29, 2021 Autor tematu Udostępnij Czerwiec 29, 2021 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. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 29, 2021 Udostępnij Czerwiec 29, 2021 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! Cytuj Link do komentarza Share on other sites More sharing options...
michal1210 Czerwiec 30, 2021 Udostępnij Czerwiec 30, 2021 Szanuje za podjęcie tego tematu ! ;) Tym razem przekonałeś mnie do tego kursu. Kupię płytkę i zaczną ćwiczyć ;) 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Treker (Damian Szymański) Lipiec 1, 2021 Udostępnij Lipiec 1, 2021 @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 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 2, 2021 Udostępnij Lipiec 2, 2021 Kolejna część kursu jest już dostępna - zachęcam do lektury: Kurs STM32L4 – #16 – zdalne sterowanie IR, NEC (liczniki) Cytuj Link do komentarza Share on other sites More sharing options...
adamnar Grudzień 18, 2021 Udostępnij Grudzień 18, 2021 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? 1 Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post adamnar Grudzień 19, 2021 Popularny post Udostępnij Grudzień 19, 2021 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. 1 2 Cytuj Link do komentarza Share on other sites More sharing options...
Emtorek Maj 15, 2022 Udostępnij Maj 15, 2022 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ć? Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Maj 16, 2022 Udostępnij Maj 16, 2022 @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? Cytuj Link do komentarza Share on other sites More sharing options...
Emtorek Maj 16, 2022 Udostępnij Maj 16, 2022 @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ą. Cytuj Link do komentarza Share on other sites More sharing options...
rafaljuziu 14 stycznia Udostępnij 14 stycznia Dnia 19.12.2021 o 13:21, adamnar napisał: 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; Natknąłem się na ten sam problem z linjką - działała niedeterministycznie. Twoje rozwiązanie również mi pomogło. Zakładam, że może to być różnica w konkretnym modelu urządzenia, skoro autorowi kursu to działało w wersji przedstawionej w artykule i nikt inny nie zgłaszał tego problemu, ale może i tak warto dodać o tym informację wewnątrz tekstu - ja sobie przez jakiś czas włosy wyrywałem, nie wiedząc o co chodzi. Oczywiście pomijając tę niedogodność podnoszę wszystkie kończyny na cześć tego cyklu. Nie natknąłem się nigdy na tak świetny kurs programowania mikrokontrolerów, a może nawet na tak dobry kurs programowania w ogóle 😀 2 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) 14 stycznia Udostępnij 14 stycznia @rafaljuziu dziękuję za zgłoszenie - sprawdzimy to, aby mieć pewność, że to nie jest jakiś inny błąd. 16 minut temu, rafaljuziu napisał: Nie natknąłem się nigdy na tak świetny kurs programowania mikrokontrolerów, a może nawet na tak dobry kurs programowania w ogóle 😀 Nawet nie wiesz jak miło czytać takie opinie, dziękuję 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!