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



Teraz jest 22 gru 2024, o 10:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 11 mar 2014, o 12:13 
Offline
Nowy

Dołączył(a): 06 mar 2014
Posty: 7
Pomógł: 0

Witam Kolegów. Pozdrawiam Mirka i jak zwykle dziękuje za wszystko.
Mam mały problem przerabiam od pewnego czasu sterowanie diody RGB WS2812. I niestety utknąłem. W zasadzie zrobiłem taj jak w swoich filmach Mirek pisał. Niestety układ nie ruszył. Zacząłem dociekać i znalazłem coś dziwnego. Mianowicie po poprawnej kompilacji w pliku asemblera .lss nie mam bloku odpowiedzialnego za jedną funkcje tzn w moim przypadku (sendzero). Program kompiluje się prawidłowo wszystko jest prawidłowo ustawione. I naprawdę nie mam pomysłu dlaczego w asemblerze tego nie mam.
Gdzie popełniam błąd? Dziękuje z góry za pomoc i pozdrawiam.

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 asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 12:44 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

pierwsze co mi przychodzi na myśl - to dopisałeś sobie funkcję sendzero() i nie zapisałeś pliku projektu po czym skompilowałeś go

poza tym - być może w kodzie NIGDZIE nie wykorzystałeś tej funkcji i kompilator ją wywalił w wyniku optymalizacji - to nie dziwne a wręcz pozytywne jego działanie

więc zamiast takiego fragmentu kodu - pokaż cały jaki tworzysz albo większy fragment - bo gdzieś popełniasz błędy - samo nic się nie dzieje

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 14:54 
Offline
Użytkownik

Dołączył(a): 19 lut 2013
Posty: 26
Pomógł: 2

Czasami tez z punktu widzenie kompilatora funkcja nic nie robi i jest optymalizowana do braku kodu np jak działa tylko na zmiennych lokalnych ( bez żadnych rejestrów i zmiennych globalnych) i nie zwraca żadnego wyniku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 16:15 
Offline
Nowy

Dołączył(a): 06 mar 2014
Posty: 7
Pomógł: 0

I rzeczywiście coś w tym jest gdy usunąłem deklaracje funkcji send0 i send1 jako static to w pliku .lss kompilator ukazał bloki tych funkcji. Mało tego pozostawiając deklaracje przy funkcji send1 kompilator kompiluje w dalszym ciągu prawidłowo, natomiast określenie static dla funkcji send0 powoduje ze już w pliku .lss nie ma mu odpowiadającego bloku. Moje pytanie brzmi co się dzieje?
Ponadto zgłaszany jest komunikata implicit declaration of function 'send_rgb' - przecież jest zdeklarowana

Musze to zrozumieć i opanować w 100%. Na razie dioda świeci na niebiesko i nawet po zmianie zmiennych rgb tylko po programowaniu błyśnie na biało a potem błękit lazurowego lata. Ale z tym sobie poradzę. Wezmę oscyloskop i zobaczę co tam śmiga i w jakich czasach na nóżce uC
Jestem starej daty amatorem programistą, który przeszedł od dos'u poprzez logo i basic a skończył na Bascomie ale spotykając Mirka w necie zapragnęło mi się zgłębiać tajniki C. W załączeniu wszystkie listingi main.c, ws2812.c i .h oraz .lss w wersji gdzie funkcje przyjmuje jako Static. Proszę o pomoc w tym temacie z reszte wygrzebie w necie oraz w Twoich książkach Mirku

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.


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

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




ws2812.c


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: 11 mar 2014, o 16:34 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

rafmodel napisał(a):
natomiast określenie static dla funkcji send0 powoduje ze już w pliku .lss nie ma mu odpowiadającego bloku. Moje pytanie brzmi co się dzieje?


Funkcje "static" kompilator niekiedy optymalizuje do "static inline". Spójrz na wiersze 66-69, 80-83, 94-97 pliku .lss

rafmodel napisał(a):
Ponadto zgłaszany jest komunikata implicit declaration of function 'send_rgb' - przecież jest zdeklarowana


W main.c na pewno nie jest zadeklarowana.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 18:15 
Offline
Nowy

Dołączył(a): 06 mar 2014
Posty: 7
Pomógł: 0

No więc tak, rzeczywiście w main.c po zadeklarowaniu funkcji send_rgb w formie void send_rgb (uint8_t r, uint8_t g, uint8_t b);
wszystko wróciło do normy i zadziałało. Pytanie tylko do Mirka, dlaczego ty nie masz w main.c tej deklaracji a pomimo tego ci to działa.
Mam mały problem z zapaleniem koloru białego, gdyż przy podaniu PWN na 3 kolory układ gaśnie. Podejrzewam, iż moje diody ws2812 bez literki B potrzebują wyższego zasilania. W datasheet'ie jest to 6-7V.
Wszystkim bardzo dziękuje za pomoc i Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 18:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

rafmodel napisał(a):
Podejrzewam, iż moje diody ws2812 bez literki B potrzebują wyższego zasilania. W datasheet'ie jest to 6-7V.


Ta taśmia 30 LED na moich poradnikach to WS2812 czyli bez literki B .... i myślisz że wymyślałem jakieś dziwne napięcie 6-7V ? ;)

żartuje kolega chyba ..... zawsze je zasilam +5V ... więc tu nie ma co się domyślać .... dziwnych rzeczy

to ja raczej się dziwię - że pomimo iż przez wszystkie dotychczasowe poradniki tłumaczę o tym, że sposób który omawiam na sterowanie jest mocno ułomny bo trzeba ręcznie dobierać NOP'y .... to kolega na dodatek tworzy jakiś inny kod niż w poradnikach i zamiast doprowadzić do stanu jak w poradniku bo MUSI działać....

życzę więc samozaparcia i ew jeszcze raz uważnie oglądać poradniki i jednocześnie pisać ze mną kod na bieżąco ok ? ;)

popatrz na forum w wątkach dotyczących tych poradników jak inni działają - jakie mieli problemy a na końcu każdemu i tak wychodzi ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 18:36 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

rafmodel napisał(a):
Pytanie tylko do Mirka, dlaczego ty nie masz w main.c tej deklaracji a pomimo tego ci to działa.

Bo ma tę deklarację tam gdzie jej miejsce: w pliku nagłówkowym ws2812.h
Konwencja jest taka - w pliku nagłówkowym wstawia się deklaracje wszystkich funkcji i zmiennych, zdefiniowanych w danym pliku źródłowym, które mają być widoczne w innych plikach (w twoim przypadku "ws2812_init" i "send_rgb" lecz nie "send0" i "send1"). Nazwa pliku nagłówkowego jest taka sama (za wyjątkiem rozszerzeń oczywiście) jak pliku źródłowego, dzięki temu wiadomo co jest do czego. W każdym pliku źródłowym który wykorzystuje choćby jedną z tych funkcji czy zmiennych włącza się plik nagłówkowy dyrektywą "#include". I załatwione.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 19:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

rafmodel napisał(a):
Pytanie tylko do Mirka, dlaczego ty nie masz w main.c tej deklaracji a pomimo tego ci to działa.


pytanie do kolegi - posiada kolega tę książkę?

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

nie pytam złośliwie albo dlatego że od jej posiadania uzależniam pomoc - po prostu w tej książce sporo miejsca poświęciłem wyjaśnieniu tego na czym polega podział projektu w C na pliki - i co gdzie powinno się znaleźć. ok?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 21:26 
Offline
Nowy

Dołączył(a): 06 mar 2014
Posty: 7
Pomógł: 0

Oczywiście Mirku - obie . I staram się jak mogę je zrozumieć, ale długa droga przede mną :-) A swoją drogą to wszystko co robisz jest super. Dziękuje, Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 21:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

rafmodel napisał(a):
ale długa droga przede mną


Spokojnie - wcale nie taka długa - ale wszystko po kolei ;)

tzn ja wiem wiem - jak to człowieka łapki świeżbią i chciałby już .... teraz ;) nagle ... wiem wiem co to znaczy - sam tak często mam

ale jak widzisz bez poćwiczenia po kolei tych podstaw człowiek popełnia też podstawowe błędy i później się wydaje że wszystko nie działa ... Dlatego ta cierpliwość jednak zawsze w końcu popłaca

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO