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



Teraz jest 17 lis 2024, o 21:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 12 gru 2013, o 00:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Witam, od jakiegoś czasu siedzę nad kodem do lampki RGB. Mam diodę RGB 3W i steruje ją driverami i mikrokontrolerem ATmega32 (8 MHz).Skorzystałem z pomocy kolegi "tomekpop" z tematu : topic2376.html i napisałem poniższy kod do płynnego przejścia między kolorami. 3 kanały PWM sterowane 3 oddzielnymi TIMERAMI w trybie FastPWM + timer programowy na przerwanie systemowe. Nie wiem dlaczego ale podczas przejścia występuje przeskok i nie wiem jak go wyeliminować. Gdy czerwony miesza się z zielonym występuje krótka przerwa(przeskok) ?! Próbowałem zmienić już wszystko w kodzie i nie wiem gdzie leży błąd. Poniżej przedstawiam kod. Dzięki za pomoc i odzew w temacie.


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 13 gru 2013, o 00:10 przez zlata_n, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 09:09 
Offline
Użytkownik

Dołączył(a): 06 lut 2013
Posty: 38
Pomógł: 0

Nie analizując kodu bo teraz jestem w pracy. Wez pod uwagę że diody sa nie liniowe tzn. swieco nie proporcjonalnie do szerokosci PWM. Ponadto różnią się kolory między sobą.

Najprościej mozesz to wyeliminowac robiąc w pewnym zakresie wieksze kroki przyrostu tj. najpierw zwiekszaj np o 3 wartosci a potem 2 i o 1.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 09:14 
Offline
Moderator
Avatar użytkownika

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

Odnośnie zagadnienia liniowego sterowania diod LED proponuję zapoznać się z tym ;)

http://mirekk36.blogspot.com/2013/09/ga ... zie-w.html

_________________
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: 12 gru 2013, o 10:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Wiem, że diody są nieliniowe, oraz dobrze zapoznałem się z korekcją GAMMA. Ale w moim przypadku to nie o to chodzi. W poście podałem linka do tematu kolegi "tomekpop" który używa podobnego kodu i nie ma żadnego problemu, nie ma przeskoków ... więc coś jest nie tak w moim kodzie a już nie mam pomysłu co ... Pewnie błąd leży w jakiejś pętli, wartość nagle skacze do 255 albo do 0 i robi się krótki nieprzewidziany błysk... a powinno być płynnie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 10:24 
Offline
Moderator
Avatar użytkownika

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

przeanalizuj sobie swoje warunki np taki:

if (o <= 0) o = 0;

co to znaczy "jeśli mniejsze równe zero" ? jak może być mniejsze ? skoro zmienna ma typ uint ???

widzisz babola ?

_________________
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: 12 gru 2013, o 10:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

tutaj wkradł się mój błąd, powinno być w każdym ">" ( w trakcie testów próbowałem z "przyrównaniem") Pierwszy post edytowany poprawnie. Ciągle dzieje się to samo... dziwny przeskok w dwóch momentach ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 11:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Użyj wszędzie takich zapisów:

if (m>0) m--;

if (m<255) m++;


w miejscach gdzie masz samo m--, m++, itp.

dotyczy to wszystkich zmiennych, na których zmieniasz kolory.

No i oczywiście pozbądź się tej litanii warunków sprawdzających zakres:

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


EDIT:

Dodam jeszcze, że taki zapis if (m>255) dla zmiennej uint8_t jest bezsensowny... Dlaczego??? Zastanów się :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 12:47 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
Dodam jeszcze, że taki zapis if (m>255) dla zmiennej uint8_t jest bezsensowny... Dlaczego??? Zastanów się


Bardzo słuszna uwaga ;) ....

a ja dodam, że w jednym ze swoich poradników video (ale nie pamiętam którym) właśnie mówiłem o tym jak sobie poradzić - no tyle że teraz po podpowiedzi kolegi SylwekK - to już jesteś na prostej drodze żeby złapać swojego BUG'a i dokonać jego anihilacji :lol:

_________________
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: 12 gru 2013, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

wiem że zmienna uint_8t posiada wartości od 0 do 255. Zmieniłem kod i ciągle jest ten przeskok.... nie wiem co tam brudzi w kodzie.... czy to może ustawiona zła częstotliwość TIMERA..?!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 08:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

To wywal jeszcze wszystkie n=0, m=0, o=0, i pokaż kod.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 11:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

To samo. Czy ktoś mógłby odpalić u siebie ten kod? na zwykłej diodzie RGB + ATmega? Poniżej kod...


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: 13 gru 2013, o 11:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

No ale nie dodałeś warunków, o których Ci już na początku pisałem, to jak ma nie przeskakiwać!

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 12:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

nie do końca rozumiem w którym miejscu te warunki wrzucić ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 12:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

No jak pisałem zamiast m++, n++, o++, m--, n--, o-- odpowiednio: if (m>0) m--; if (m<255) m++; itd...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

działa! dzięki piękne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 19:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Miło, że pomogło :) Widzisz, jakbyś od razu zrobił jak mówiłem to byś się wcześniej cieszył :)


Autor postu otrzymał pochwałę

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 19:56 
Offline
Moderator
Avatar użytkownika

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

zlata_n napisał(a):
działa! dzięki piękne


Na prawdę - czy trzeba przypominać - żeby kliknąć klawisz "POMÓGŁ" osobie która pomogła ? ;) ... nie chodzi o mnie - .... ale kolega SylwekK chyba dość mocno się przyczynił do rozjaśnienia sytuacji prawda ?

więc taka gorąca prośba - używajmy klawisza "POMÓGŁ" na forum 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: 19 gru 2013, o 22:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 gru 2011
Posty: 97
Lokalizacja: Radomsko/Poznań
Pomógł: 0

Mam pytanie odnośnie tej lampki jeszcze. Mianowicie gdy włączam zasilanie na 0,5 sek świeci dioda co powoduje brzydki błysk "na starcie". Da się go pozbyć programowo czy tutaj jest błąd projektowy ? Poniżej dokładny schemat.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 07:44 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2583
Pomógł: 128

A czy przyadkiem nie jest to zwiazane z domyslnym stanem pinow po resecie? Czy masz w kodzie inicjalizacje wyjsc/PWMow?

Sent from my mobile.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 14:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 108
Pomógł: 0

A może po int main() zresetuj wyjścia portu D , chociaż trudno powiedzieć ponieważ nie wiem jak wygląda kod który ci działa.

PORTD &= ~(1<<PD7)|(1<<PD5)|(1<<PD4);



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO