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



Teraz jest 7 lut 2025, o 20:07


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 28 paź 2012, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Witam. Mój procek to Mega88 kwearc 18,432Mhz
Mam diodę RGB i chciałbym napisać soie funkcję, która rozjaśnia kolor czerwony, a na dodatek jest nieblokująca.
Tak inicjuję timer 16biotwy(tylko ten mi został)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


No i teraz dioda świeci cały czas słabo.. (coś nie tak z funkcją funkcja2();)
Natomiast gdy przerobię funckje2() na taką:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To dioda się rozjaśnia..


Tak napisana funkjca2(); równiez działa:
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 29 paź 2012, o 17:04 przez xamrex, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 paź 2012, o 19:53 
Offline
Moderator
Avatar użytkownika

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

Nie za bardzo na razie rozumiem, ale masz coś takiego:

Kod:
uint8_t pwmi;


więc jaką wg ciebie wartość przyjmie ta zmienna gdy będzie = 255 i zwiększysz ją o jeden ?

bo widzę tam coś takiego:

Kod:
if(pwmi>255) pwmi=0;

_________________
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: 28 paź 2012, o 19:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Może tutaj to podam bardziej dokładnie.
Wydaje mi się, że rpoblem lezy w mojej funkcji funkcja2();
1)Działa (dioda się rozjaśnia)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

2)Również działa:(czyli TIMER mam ustawiony dobrze)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

3)NIE działa: Dioda słabo świci cały czas (tak jakby był problem ze zmienną pwmi)
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: 28 paź 2012, o 20:00 
Offline
Moderator
Avatar użytkownika

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

Nie odpowiedziałeś na moje pytanie - a ja podpowiem ci że w żadnym z tych wypadków nie potrzebujesz ani:

Kod:
if(pwmi>254) pwmi=0;


ani

Kod:
if(pwmi>255) pwmi=0;


czekam zatem na odpowiedź

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

Nie wspomnę o tym że nigdzie w twoich kodach nie widać co to jest?

koncowkar

_________________
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: 28 paź 2012, o 20:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Ok,
warunek nie potrzebny, bo przyjmie wartość 0

koncowkar=pwmi; //koncowar to OCR0B (mam to zrobione przez #define)

Zrobiłem na szybko nowy projekcik, aby tylko i wyłącznie się tym pobawić i oto mój plik 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.


No i dioda cały czas świeci słabo.

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

To działa OK(rozjaśnia się)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 05:57 
Offline
Moderator
Avatar użytkownika

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

Gwyn to na pewno nie chodzi o volatile :( bo oba przypadki u xarmexa powinny działać.

_________________
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: 29 paź 2012, o 08:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Jeśli ktoś ma chwilkę czasu, to bardzo prosiłbym zachowanie tego kodu (oczywiście trzeba troche inaczej timer skonfigrować i PWM ) na M32..

Akurat pożyczyłem płytkę koledze, i nie mam jak tego przetestować..
Bo siedzę nad tym już i siedzę.. i nie mam pomysłów..
Powinno działać a tu nie chce ;/

------------------------ [ Dodano po: 13 minutach ]

Nie wiem Mirku, mógłbym tu wrzucić (po południu, koło 16.00) kod asemblera, jaki został wygenerowany..
Mógłbyś rzucić na niego okiem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 10:01 
Offline
Moderator
Avatar użytkownika

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

xamrex napisał(a):
Nie wiem Mirku, mógłbym tu wrzucić (po południu, koło 16.00) kod asemblera, jaki został wygenerowany..
Mógłbyś rzucić na niego okiem?


Posłuchaj,

po PIERWSZE to jeśli chcesz żebym np ja analizował kod, to niestety doprowadź go najpierw do porządku tak jak zaproponował ci GwynBleid, bo inaczej uznam że nie szanujesz nikogo na tym forum, a przecież już długo tu jesteś i wiesz że dobrze napisany kod - daje się o 100x szybciej przeanalizować.

CO WAŻNIEJSZE - sam popełnisz 100x mniej błędów

przyznam, że spróbowałem go zacząć analizować - ale mnie odrzuciło - poważnie.

Tym bardziej, że już od samego początku błędy ... tzn może inaczej powiem

w tym kodzie jest po prostu CAŁE STADO BŁĘDÓW - i sam się wcale sobie i innym nie dziwię, że nikt wcześniej tego nie zauważył :( .... bo tak samo pewnie się każdemu "chce się to czytać" :(

------------------------------

żeby nie było że tylko marudzę (chociaż nie marudzę) to dam ci kilka PORAD:

1. tak jak mówiłem to pwi++; oraz OC0B=pwi; nie ma prawa źle działać
2. zrób prawidłowe wcięcia w kodzie
3. zrób odstępy chociaż 1 linii między ważnymi blokami kodu
4. zwracaj uwagę na typy danych
5. otwórz notę PDF i czytaj co i w którym rejestrze się ustawia bo jest M A S A K R A (tu już sporo znajdziesz)
6. na ZEUSA - stwórz do testów (tak sobie sam) ... jakiś prostszy kod na chwilę żeby to przetestować. Po co ci do testów 30 PWM'ów i setki niepotrzebnych rzeczy. Przecież po kawałku łatwiej się testuje

a jak całość uporządkujesz to wtedy:

1. od razu sam wyłapiesz co najmniej kilka błędów
2. będę w stanie przeanalizować ten kod
3. pomogę albo pomożemy - i dasz sobie z tym radę

to jest moja propozycja OK ?

obejdzie się bez żadnego asemblera - bo to byłoby wręcz bez sensu przy kodzie w C napisanym z tyloma błędami

_________________
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: 29 paź 2012, o 10:44 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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


Odblokowałeś przerwania dla TIMER1 a masz TIMER2_COMPA_vect co dla AVR powoduje rozpoczęcie programu od początku. Oczywiście TIMSK1|=(1<<OCIE1B); też nie jest potrzebne.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 10:51 
Offline
Moderator
Avatar użytkownika

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

Krauser jest jeszcze sporo innych rzeczy - ale dajmy koledze może chwilkę na uporządkowanie kodu, ew zmniejszenie - bo wierzę, że wtedy sam zobaczy jeszcze inne rzeczy - a są napewno.

zresztą do takiego kodu przydałoby się np opis autora, że np:

zezwalam na przerwanie compare A ponieważ ..... ...... opis ....

zezwalam na przerwanie compare B ponieważ ..... ...... opis ....

już samo to pozwoliłoby zobaczyć wyżej wymienione błędy

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

Krauser napisał(a):
Oczywiście TIMSK1|=(1<<OCIE1B); też nie jest potrzebne.


To tak samo powoduje ciągłe resetowanie procka - jak każde odblokowane przerwanie, które nie ma procedury swojej obsługi w kodzie :(

_________________
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: 29 paź 2012, o 10:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Krauser
Dzięki,
Nie zwróciłem uwagi...

Pod wieczór, jak będę w domu, postaram się poprawić kod..
I pewnie problem się rozwiąże, a jeśli nie to znowu zacznę was męczyć..

Dziękuję serdecznie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 12:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 449
Pomógł: 4

mirekk36 napisał(a):
To tak samo powoduje ciągłe resetowanie procka - jak każde odblokowane przerwanie, które nie ma procedury swojej obsługi w kodzie


Nawet nie wiedziałem, że tak się zachowuje procek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 13:29 
Offline
Moderator
Avatar użytkownika

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

xamrex napisał(a):
I pewnie problem się rozwiąże, a jeśli nie to znowu zacznę was męczyć..


dokładnie - tzn ja liczę na to, że sam znajdziesz jeszcze JEDEN błąd OK ? ;) .....

ale jeśli nie to śmiało męcz - po to tu jesteśmy ;)

------------------------ [ Dodano po: 5 minutach ]

worner napisał(a):
mirekk36 napisał(a):
To tak samo powoduje ciągłe resetowanie procka - jak każde odblokowane przerwanie, które nie ma procedury swojej obsługi w kodzie


Nawet nie wiedziałem, że tak się zachowuje procek.


worner to troszkę nie tak jak piszesz ale doprecyzuję.

To nie procek się tak zachowuje - sam z siebie .... To jest tak, że jeśli programista czyli ty - odblokujesz jakieś przerwanie w odpowiednim rejestrze - ale nie napiszesz odpowiedniego makra ISR( vector ) bo np zapomniałeś ;) jak w tym przypadku ... to pomyśl co kompilator ma sobie pomyśleć ??? ;)

otóż kompilator gdy zobaczy, że nie ma chociażby takiego PUSTEGO makra - to pod adres obsługi tego wektora przerwania wstawi adres obsługi błędnych przerwań ;) ... a tam będzie skok na wszelki wypadek do początku programu. Więc to jest CELOWE działanie kompilatora - że taki kod wygeneruje.

Dlatego OBOWIĄZKIEM programisty jest zadbać o dodanie makra ISR() od razu jak odblokowujesz jakieś przerwanie. Ja zawsze od razu kolejną rzeczą którą robię za pamięci to daję

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


i potem nawet jak zapomnę wypełnić to makro - to już nic złego mi się nie stanie - program będzie po prostu skakał do pustej procedury i wracał. Czyli nic nie zrobi ale procek się nie zresetuje.

_________________
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: 29 paź 2012, o 16:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Ok,
Teraz ruszyło, ale coś te czasy nie takie:D
Postanowiłem napisać prościutki, program, aby sprawdzić w czym rzecz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No ale zamiast migania co 1 sek, miga co 3,5sek

Żeby nie było, że to fusy, załączam screen z Bootloadera:
Obrazek

Czyżbym coś źle liczył?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 17:21 
Offline
Moderator
Avatar użytkownika

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

Jak WGM1 jest w TCCR1A to ja jestem księdzem ;)

czytaj dokładniej noty ;)


Autor postu otrzymał pochwałę

_________________
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: 29 paź 2012, o 17:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

No jak zwykle działa :)
Ja nie wiem..
Ty to jesteś guru :))

Dzięki ;)
Myślę, że więcej pytań miał nie będę :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 17:33 
Offline
Moderator
Avatar użytkownika

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

No no no - spójrz na ten kod u góry i porównaj jaki typ dałeś zmiennym Timer1, Timer2

a na jakim typie pracujesz w przerwaniu - bo nigdy te timery programowe nie będą ci działać ;) (to ten kolejny błąd o którym pisałem wcześniej)

------------------------ [ Dodano po: kilkunastu sekundach ]

a pytania - śmiało zadawaj

_________________
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: 29 paź 2012, o 19:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Dzięki za zwrócenie uwagi :]



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 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