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



Teraz jest 3 wrz 2025, o 12:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 15 sie 2014, o 17:23 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 111
Pomógł: 0

Witam,
W jednym projekcie, chcę wykonać pewną akcję gdy klawisz jest wciśnięty 5 sekund. Nie mogę wykorzystać opóźnienia delay w pętli while. Próbuję to zrobić za pomocą przepełnienia Timera, w przerwaniu. Coś takiego mi wyszło i nawet działa, ale chciałbym sie poradzić bardziej doświadczonych ode mnie.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przerwanie wykonuje się co 10ms, co 1000 ms, sprawdzamy czy wciśnięty jest klawisz i zwiększamy zmienną sec, jeśli jest większa od 5 , to wywołujemy funkcje.
Czy to dobry sposób?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 18:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Ja bym to zrobił tak że gdy przycisk jest wciśnięty to wtedy zaczyna zliczać licznik. W chwili gdy zliczy do wartości cnt==500 to wykonujesz te instrukcje, jednakże jeżeli gdy zostanie puszczony zmienna cnt będzie zerowana. W tym momencie u Ciebie, gdy będziesz trzymał przycisk przez np 2 sek to po ponownym naciśnięciu będziesz czekał nie 5 sek a 3 sek.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 19:22 
Offline
Moderator
Avatar użytkownika

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

mat3usz napisał(a):
Czy to dobry sposób?


Polecam zdecydowanie Bluebooka i poczytanie - podpatrzenie na przykład funkcji typu Superdebounce() ... warto

_________________
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: 15 sie 2014, o 21:07 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 111
Pomógł: 0

Dzięki wielkie, czegoś takiego szukałem, ale jeszcze do projektów na końcu książki nie dotarłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 22:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Jest oczywiście wiele sposobów, ale można też zastosować tryb pomiaru szerokości impulsu timer'a.
Wszystko zależy od uC, ale ten w pełni sprzętowy sposób zwalnia zaangażowanie CPU w cały proces pomiaru.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2014, o 16:27 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 111
Pomógł: 0

Mam jeszcze małą zagwozdkę.
Chciałbym wykorzystać przerwania(z tego przerwania korzysta funkcja SuperDebounce, przerwanie następuje co 10ms) Timera do odliczania czasu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

W programie po wciśnięciu przycisku ustawiam Timer3 na 2000(czyli 20 sekund), i po tych 20 sekundach powinna się zapalić dioda za pomocą funkcji LED_ON(), (docelowo będzie inna funkcja). Problem w tym że dioda zapalanie się od razu po wciśnięciu przycisku, a nie po odczekaniu 20 sekund.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2014, o 23:16 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

za mało kodu umieściłeś, wygląda, że tu wszystko jest ok. Zmienna Timer3 jest oczywiście volatile ?

Pozdrawiam, QuadMan.



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

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