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



Teraz jest 20 cze 2026, o 12:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 3 mar 2016, o 14:44 
Offline
Nowy

Dołączył(a): 09 gru 2015
Posty: 4
Pomógł: 0

Witam serdecznie

Jestem na etapie nauki, więc z góry proszę o wyrozumiałość.
Chciałem sprawdzić działanie przerwań PCINT w celu obsługi przycisku, na ten moment używam funkcji delay ponieważ interesuje mnie istota działania tych przerwań, pomijając na ten moment kwestie zajętości procesora.

ATmega164A
Do pinu PB0 (PCINT8) podpięty jest przycisk.
Do pinu PD7 podpięta jest dioda.

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


Generalnie jeśli klika się szybko to działa. Problem w tym że jeśli przytrzymam przycisk dłużej to przerwanie wykonuje się drugi raz - co ciekawe wykonuje się drugi raz i koniec. Niezależnie od tego jak długi czas oczekiwania ustawie przy przytrzymywaniu przycisku przerwanie zawsze wykonuje się drugi raz. Nie mam pomysłu dlaczego tak się dzieje, ponieważ teoretycznie po naciśnięciu przez chwile jest drganie styków, a następnie trzymając przycisk cały czas jest poziom niski, w związku z tym po wykonaniu tej funkcji jedyne możliwe następne zbocze wystąpi po puszczeniu przycisku. Nie mam pomysłu dlaczego tak się dzieje.

Z góry dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2016, o 15:19 
Offline
Moderator
Avatar użytkownika

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

Z twojego postu jak na razie wynika to, że kompletnie nie rozumiesz jak działają w ogóle przerwania a w szczególności przerwania typu PCINT.

Wprowadzanie jakichkolwiek delayów do przerwań to po prostu koszmar ... zapamiętaj sobie jedno NIGDY tak się nie robi.

Chcesz dowiedzieć się podstaw na temat przerwań? zaglądaj na bloga:

http://mirekk36.blogspot.com/2013/12/pr ... acego.html

odnośnie przerwań PCINT też coś będzie ;)

http://mirekk36.blogspot.com/2013/12/pr ... sc-03.html

ale daj sobie spokój z marnowaniem przerwań na potrzeby przycisków - zajrzyj lepiej tutaj:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

jeśli interesują cię proste i ciekawe sposoby na ich obsługę ... a najlepiej jak zaczniesz od książki:

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

to naprawdę sporo się tobie wyjaśni

_________________
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: 3 mar 2016, o 17:21 
Offline
Nowy

Dołączył(a): 09 gru 2015
Posty: 4
Pomógł: 0

Znalazłem rozwiązanie - dla innych użytkowników:
Pod koniec procedury obsługi przerwania należy ustawić odpowiednią flagę w PCIFR na 1 ponieważ w innym przypadku po obsłudze ISR przerwanie wykonuje się po raz drugi (z tego co zrozumiałem jest "zakolejkowane").

Czy mógłby Pan rozwinąć o co chodzi z "marnowaniem przerwań"? W procesorach bez PCINT jest to oczywiste, ponieważ mamy np. tylko dwa wejścia INTx. Ale gdy praktycznie każda nóżka może służyć jako przerwanie jakie są przeciwwskazania żeby np. w panelu sterowania kilka przycisków obsługiwać właśnie w ten sposób?

Mam książkę i czytałem blogi ale stety lub niestety jestem bardzo niecierpliwy i wszystko chcę od razu przetestować na żywym organizmie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2016, o 17:39 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Tevis Skoro chcesz od razu tak testować to nie dziw się ze programy które piszesz nie działają. niestety trzeba najpierw pojąć o co chodzi w programowaniu, poznać zasady które są dobrze w książce opisane.

Cytuj:
marnowaniem przerwań

W skrócie to jakby grać w tetrisa na najlepszym komputerze jaki świat wyprodukował. A więc na tetrisie to komputer się marnuje z takimi potężnymi zasobami :)
Tak samo jest mniej więcej w tym przypadku :)

_________________
Programowanie to styl życia :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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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