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



Teraz jest 1 wrz 2025, o 21:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 7 lip 2016, o 21:08 
Offline
Nowy

Dołączył(a): 07 lip 2016
Posty: 2
Pomógł: 0

Szanowni użytkownicy,

próbuję nauczyć się obsługi przerwań pochodzących od timerów ale mam problem: program nie działa :)

Program miał być mega prosty: mruganie diodą co około 1s (kwarc 16MHz), ale to timer miał odliczać 1s, wywołać przerwanie a w obsłudze przerwania miała być zmiana stanu pinu z ledem na przeciwny. Możnaby powiedzieć: nic prostszego.
Dodam, że połączenia są na pewno dobre. Jak napiszę program z użyciem _delay_ms to działa tak jak ma działać. Poniżej zamieszczam kod:

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

Wersja bez scrollowania: http://wklej.org/hash/86f8ada703c/

Może któryś z szanownych użytkowników widzi jakąś nieprawidłowość? Dodam, że powyższy kod się kompiluje.
Rejestry są raczej dobrze ustawione - zgodnie z rozdziałem 20 noty aplikacyjnej:
http://www.atmel.com/Images/Atmel-42735 ... asheet.pdf

Atmega w płytce arduino programowana przez USBasp.

Za wszelkie wskazówki będę bardzo wdzięczny
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2016, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Jeśli to jest program, który próbujesz uruchomić to brakuje ci w nim pętli nieskończonej. W tym przypadku może to być pusta pętla while. Bez niej program po prostu się zakończy.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2016, o 21:42 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

i jeszcze

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


przerwanie powinno byc pod main, sei przed petla.
Tak mysle



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2016, o 21:46 
Offline
Nowy

Dołączył(a): 07 lip 2016
Posty: 2
Pomógł: 0

Rzeczywiście, kolega miał rację. Ja myślałem, że jak nic nie zamierzam w tej pętli wpisywać to jest ona zbędna. Jak bardzo się myliłem.
Po dodaniu pętli wszystko działa tak jak powinno.

Z całego serca dziękuję i pozdrawiam :)

@wchpikus
A co to zmieni? Przerzucenie obsługi przerwania poniżej maina.
W obu wersjach program tak samo działa. Pytam, bo nie wiem :)

No i czy jest sens żeby w pętlę while(1) wrzucać konfigurację mikrokontrolera? Wydaje mi się, że wystarczy to zrobić raz.



Ostatnio edytowano 7 lip 2016, o 21:48 przez gicu616, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2016, o 21:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Do poprawnego działania programu funkcja obsługi przerwania nie musi być za funkcją main. Może być przed nią. Ale dobry styl programowania mówi aby definicje funkcji były umieszczone za funkcją main.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2016, o 21:55 
Offline
Użytkownik

Dołączył(a): 05 kwi 2014
Posty: 339
Pomógł: 10

gicu616 napisał(a):
R

No i czy jest sens żeby w pętlę while(1) wrzucać konfigurację mikrokontrolera? Wydaje mi się, że wystarczy to zrobić raz.

Jasne ze tak, to tylko przyklad:)

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


Autor postu otrzymał pochwałę


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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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