Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 30 maja 2026, o 20:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 5 lip 2015, o 08:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Witam!
Bardzo proszę o pomoc w wyjaśnieniu następującego problemu. Piszę razem z Mirkiem kod biblioteki do obsługi diod WS2812. Pod koniec części 5 poradnika prezentowany jest program, który zmienia kolor diod co 500ms. Działa u mnie dobrze z małym wyjątkiem. Kolor niebieski otrzymuje coraz większą domieszkę koloru czerwonego począwszy od diody nr 1 (tylko ona świeci na niebiesko). Każda następna dioda jest bardziej fioletowa i to niezależnie od ich ilości (2-30). Kolor czerwony i niebieski bez zarzutu. Próbując zlokalizować błąd wpisuję na sztywno k warunku:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

k=0 kolor czerwony
k=1 kolor zielony
k=2 kolor niebieski z domieszką czerwonego j.w.
i spróbowałem:
k=3 kolor czerwony o wzrastającej intensywności z diody na diodę
Wygląda na to, że gdy k=2 to miesza się z k=3 (trochę to nielogiczne, ale obserwowane na żywo)

Oto kod w pętli while(1):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 09:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Nie jestem pewien czy dobrze sobie to wymyśliłem
ale zainicjuj zmienną i w pętli for wartością 1.

Możliwe że nie trafiasz w co trzecią wartość k,
mogę się mylić bo jest straszliwy upał i to od samego rana :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 09:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Zaba napisał(a):
Nie jestem pewien czy dobrze sobie to wymyśliłem
ale zainicjuj zmienną i w pętli for wartością 1.

Efekt niestety identyczny :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 12:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2013
Posty: 101
Lokalizacja: Wrocław
Pomógł: 4

Chociaż może się wydawać, że nie ma to związku z problemem - sprawdź zasilanie.
Diody pobierają dość duży prąd i mogą występować duże spadki napięć na ścieżkach zasilających. Zmierz napięcie na początku i na końcu ścieżek, oczywiście przy działających diodach.

_________________
ATB 1.04, Bluebook wyd.II, Greenbook wyd.II



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 12:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Ryszard56 napisał(a):
Zmierz napięcie na początku i na końcu ścieżek, oczywiście przy działających diodach.

Efekt opisany przeze mnie występuje nawet przy dwóch diodach, a więc nie można chyba mówić o spadkach napięcia.
Zmierzyłem: jest 5V na początku i końcu "taśmy" (2 diody)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Ryszard56 napisał(a):
Chociaż może się wydawać, że nie ma to związku z problemem - sprawdź zasilanie.

Podłączyłem zasilacz komputerowy o wysokiej wydajności - nadal kolor niebieski nie jest wyświetlany poprawnie (podbarwiony na czerwono). Wszystko wskazuje na babol w mojej implantacji kodu. Bardzo proszę o spojrzenie na kod i sugestie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Witam!
Czy protokół sterujący diodami WS2812 jest podatny na zakłócenia? Próbuję zaimplementować najprostszy efekt w postaci wyświetlenia linijki w danym kolorze, w Dawcy Czasu. Linijka zaświeca się ładnie synchronicznie co zadany okres czasu, ale pojawiają się zakłócenia. W okresach pomiędzy kolejnymi synchronizacjami zegara, przez ułamek sekundy mrugają dowolne diody na całym pasku led. Nie zależy to od liczby zdefiniowanych diod. Funkcja ws281x_asm_send wywoływana jest tylko jednokrotnie.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W Dawcy Czasu działają protokoły: I2C_TWI, SPI, 1-Wire, WS2812
W programie oddzielnym wszystkie efekty z poradników działają znakomicie. Proszę o pomoc w rozwiązaniu zagadki.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Wylacz przerwania na czas wysylania ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

http://forum.atnel.pl/post130430.html?hilit=sei%20magic%20led#p130430 ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

RafPe napisał(a):
Wylacz przerwania na czas wysylania ?

Nie :(
Jak to zrobić?
Moja pętla zaświecająca i gasząca linijkę wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

1. wyłączasz przerwania - cli();
2. wysyłasz
3. włączasz przerwania - sei();



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

anshar napisał(a):
1. wyłączasz przerwania - cli();
2. wysyłasz
3. włączasz przerwania - sei();


Wysyłam dane do linijki LED w dwóch miejscach - Linia 4 i 12 kodu w poście powyżej.
cli() przed linią 4 zablokuje działanie zegara.
Czy to blokowanie przerwań jest konieczne?

Przeniosłem "czyszczenie" linijki do funkcji parsującej i zastosowałem cli() - linia 13, sei() - linia 15;
Nadal bez efektu! Pasek wyświetla często przypadkowe "piksele".
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 8 lip 2015, o 14:55 przez avrfun, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

avrfun napisał(a):
Czy to blokowanie przerwań jest konieczne?

Prztestuj - kolega z forum @Majster walczyl podobnie jak ty z takim problemem w projekcie gdzie rownies mial rozne protokoly komunikacyjne/etc i jesli dobrze pamietam to pomoglo mu rozwiazac problem

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

RafPe napisał(a):
Prztestuj - kolega z forum @Majster walczyl podobnie jak ty z takim problemem w projekcie gdzie rownies mial rozne protokoly komunikacyjne/etc i jesli dobrze pamietam to pomoglo mu rozwiazac problem

Testuję jak w poście powyżej. Masz może namiar na ten topic?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 14:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Przecież masz go kilka postów wyżej! Nie ma?

------------------------ [ Dodano po: 1 minucie ]

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 15:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

anshar napisał(a):
Przecież masz go kilka postów wyżej! Nie ma?

------------------------ [ Dodano po: 1 minucie ]

Składnia: [ Pobierz ] [ Ukryj ]
język c
cli();
ws281x_asm_send( linijka1, 5, WS_PIN); //tutaj potrzebujesz wyłączyć przerwania
sei();
GeSHi

Dziękuję. Wydaje się działać poprawnie.
Napisz proszę kilka słów wyjaśnienia. Chcę zrozumieć dlaczego trzeba wyłączać przerwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 15:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

A czytałeś ten wątek o ktorym była mowa wyżej, czy nie?
Proszę zobacz http://forum.atnel.pl/post130430.html?hilit=sei%20magic%20led#p130430, jest tam pięknie wyjaśnione, dlaczego tak się dzieje. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 15:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

RafPe napisał(a):
Wylacz przerwania na czas wysylania ?

anshar napisał(a):
Proszę zobacz post130430.html?hilit=sei%20magic%20led#p130430, jest tam pięknie wyjaśnione, dlaczego tak się dzieje.

Pięknie dziękuję Kolegom za pomoc :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO