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



Teraz jest 5 kwi 2026, o 01:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 15 lut 2017, o 14:21 
Offline
Nowy

Dołączył(a): 20 sty 2017
Posty: 15
Lokalizacja: Aleksandrówek/Konin
Pomógł: 0

Witam kolejny raz.
Dalej idę w Bluebooka. Napotkałem problem przy PWMie.

Na podstawie książki i tego projektu z płyty CD zapisałem taki oto kod. Męczę się z tym od rana ale nie mam pomysłu i niestety nie mogę go poprawnie skompilować bo wywala mi błąd przy linijce ISR:
- static declaration of 'TIMER_OVF_vect' follows non-static declaration
- previous declaration of 'TIMER_OVF_vect' was here

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


Wcześniej sprawdzałem kod w trybie Fast PWM i wszystko działa okej. Nie wiem gdzie popełniłem błąd.
Procesor to ATmega8A, diody LED podłączone katodami do pinów PB3 i PB4.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 14:25 
Offline
Użytkownik
Avatar użytkownika

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

A czasem klamra zamykająca funkcję main nie jest w złym miejscu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 14:26 
Offline
Użytkownik
Avatar użytkownika

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

Procedura obsługi przerwania powinna znajdować się poza ciałem funkji int main(void). Musisz dać pętlę nieskończoną while(1) choćby pustą, bo inaczej program przestanie 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 15 lut 2017, o 14:49 przez anshar, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 14:43 
Offline
Nowy

Dołączył(a): 20 sty 2017
Posty: 15
Lokalizacja: Aleksandrówek/Konin
Pomógł: 0

Kolego worner - masz rację. Moje gapiostwo.
Kolego anshar. Poprawiłem kod zgodnie z twoimi wskazówkami, niby się skompilowało ale przy linijce z ISR jest wykrzyknik i podświetla mi to: 'TIMER_OVF_vect' appears to be a misspelled signal handler [enabled by default]

A po wgraniu wsadu do procka diody są cały czas wyłączone. Zero reakcji :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 14:46 
Offline
Użytkownik
Avatar użytkownika

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

Na jakim uC działasz?

------------------------ [ Dodano po: 2 minutach ]

ISR (TIMER2_OVF_vect)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 15:29 
Offline
Nowy

Dołączył(a): 20 sty 2017
Posty: 15
Lokalizacja: Aleksandrówek/Konin
Pomógł: 0

ATmega8A



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 16:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 lut 2017
Posty: 48
Pomógł: 4

Ale Ty nigdzie nie masz przypisanej wartości do pwm1 i pwm2?
Wówczas wypełnienie jest równe 0



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 17:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

danko91 napisał(a):
Kolego anshar. Poprawiłem kod zgodnie z twoimi wskazówkami, niby się skompilowało ale przy linijce z ISR jest wykrzyknik i podświetla mi to: 'TIMER_OVF_vect' appears to be a misspelled signal handler [enabled by default]
No i dobrze podświetla bo w atmedze8A nie ma takiego wektora! Dla timera2 wektor przepełnienia to TIMER2_OVF_vect



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 18:38 
Offline
Użytkownik
Avatar użytkownika

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

danko91 napisał(a):
Ale Ty nigdzie nie masz przypisanej wartości do pwm1 i pwm2?
Wówczas wypełnienie jest równe 0


Dokładnie tak, przecież pwm1 i pwm2 to zmienne globalne, które są zainicjowane wartośćią 0.
Używasz timera 8 bitowego, więc te dwa pwm'y mogą przyjąć wartośći od 0 (diody nie świecą) do 255(maksymalna jasność). Oczywiście kwestia jak masz podłączone diody LED czy anodmi czy katodami do uC. Jeśli odwrotnie dla wartości 0 będą świeciły maksymalnie, a dla 255 nie będą świeciły.
Oczywiście jak pisałem wyżej wektor przerwania powinien 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.

Poniżej masz przykładowy program do naprzemiennego zapalania i gaszenia tych diod.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak widzisz w pętli głównej programu napisałem dwie pętle for, które zmieniają wartości pwm1 i pwm2, pierwsza od 0 do 255, a druga od 255 do 0. Dzięki temu diody będą się naprzemian zapalały i gasły.
Przetestuj sobie i daj znać czy jest to dla ciebie jasne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 19:20 
Offline
Nowy

Dołączył(a): 20 sty 2017
Posty: 15
Lokalizacja: Aleksandrówek/Konin
Pomógł: 0

Rzeczywiście mój błąd. Faktycznie nie dopatrzyłem, że wkradła się drobna literówka w nazwie przerwania. Wiem, wiem, że nie przypisałem tych wartości, bo to planowałem zrobić później. Zazwyczaj mam tak, że piszę kod, a w zasadzie jego część i kompiluję sprawdzając czy nie mam błędów. Jak nie ma to piszę dalej :) takie zboczenie :D Na CTC mi śmigało elegancko a teraz w trybie normalnym też. Problem był banalny :) Wybaczcie mi za to zamieszanie. W końcu dopiero się uczę programowania:]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 19:30 
Offline
Użytkownik
Avatar użytkownika

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

Jesteśmy tutaj po to, by sobie pomagać. Za nic nie przepraszaj.
Człowiek się uczy całe życie, głupi się rodzi i głupi umrze. :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: 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO