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



Teraz jest 28 mar 2024, o 22:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 26 lip 2019, o 21:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

Obejrzałem kilka poradników Magic Led. Zatrzymałem się na gradiencie, wszystkie poprzednie funkcje działają bez problemu, analizowałem kod wszystko mam przepisane tak jak w poradniku, a wychodzi mi takie coś jak na zdjęciu. Myślałem ze może coś z Eclipse znowu, więc zaś wszystko zainstalowałem od nowa i nic, szukam w kodzie i tez nic, dziwne tym bardziej że wszystkie inne funkcje działają bez problemu od ''asm send'' po wszystkie poprzednie efekt. Co jeszcze ewentualnie może powodować taki problem?
Zmieniałem już procesor , fakt tez Atmega8 ale nic się nie zienia, wiec odpada ze coś nie tak z prockiem,
zmieniałem tez piny i dalej ten sam problem świecą jak chcą te diody, nie wiem co jeszcze mogłabym zrobić

Obrazek
main.c

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


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


ws281x.h

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: 26 lip 2019, o 23:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

Stawiam na to, że mogą być problemy z rzutowaniami, które robisz.
U siebie mam oczywiście ten sam wzór z poradnika ale rzutuję inaczej i mam poprawne kolory (tak mi się wydaje :) ):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ty rzutujesz na int32 to wartość działań spokojnie może przekroczyć wartość typu, w końcu kolor to 24 bit, a może dojść do mnożeń przez duży zakres np 0xFF, czy jeszcze więcej.
Spróbuj rzutowania, które podałem a zobaczymy czy to pomoże.

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

Wyniki różnią się, najpierw jest 0xff8100, a z drugiej funkcji 0xff8000, zatem stawiam, że jest coś na rzeczy :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2019, o 18:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

Ja nie do końca rozumie zasadę działania tego kodu, tzn gradientu, jest dost skomplikowany jak dla mnie, pierwszy raz go wpisywałem i nie wiem co z czym się je, masz całkiem inne nazwy, nazwę struktury wiec bez reszty kodu nie będę umiał sobie tego podstawić czy pozamieniać. Z drugiej strony Panu Mirkowi działa na tym kodzie, coś jeszcze musi być nie tak. Oglądam po raz kolejny poradnik, może coś "załapie".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2019, o 21:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

Dawid2379 napisał(a):
masz całkiem inne nazwy, nazwę struktury wiec bez reszty kodu nie będę umiał sobie tego podstawić czy pozamieniać.

W teście, który wykazał różnice wszystko jest napisane "po Twojemu", zatem wystarczy, że u siebie zamienisz int32_t na uint32_t i możesz potestować.
Moja teza zakłada, że zakres zmiennych int32_t jest za mały, dla niektórych kolorów może być OK, a dla innych nie, ale to tylko teza. Sprawdź, to nic skomplikowanego, zwykła podmianka. Chodzi o ten fragment:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zreszta popatrz na to trzeźwo, funkcja przyjmuje parametry typu uint32_t i taką też zwraca wartość.
Jaki zatem jest powód, że wewnątrz trzeba operować na zmiennych ze znakiem?

Jakimś specjalnym ekspertem w C nie jestem, ale trochę to kłuje w oczy :) i od powyższego bym zaczął.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2019, o 08:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

Ach, ja już chciałem wszystko pozamieniać, dobra ok.
Coś w tym jest co piszesz, dzisiaj podstawiłem tak jak podpowiedziałeś i cześć kolorów faktycznie działa ale niektóre się kompletnie rozsypuje na pasku albo wychodzą inne kolory, a jeszcze dziwniejsza rzecz się stała kiedy ustawiłem jakiś kolor ( przy podmiance o której napiłeś) i ten kolor się rozsypał, wtedy pomyślałem zobaczę co się stanie jak zamienię Twoje uinty na inty dokładnie tak jak miałem wcześniej, jak jest w poradniku i okazuje się że działa, nie tylko ten ustawiony kolor ale wszystko działa :shock: Dla mnie zrozumieć co się stało jest niemożliwe, coś się odblokowało, nie wiem może kompilator może coś procku, nie mam bladego pojęcia..
Dzięki bynajmniej dzięki Tobie udało się problem rozwiązać :)



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 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