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



Teraz jest 11 maja 2026, o 19:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 25 sie 2013, o 22:28 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 17
Pomógł: 0

Witam

Napisałem funkcje menu wyswietlająca opcje w zależności od wciśniętych klawiszy, lecz roi się tam od delay-ów czy ktoś mógłby mi doradzic sposób jak zminimalizować ich ilość ew przedstawić mi jakiś inny pomysł na menu?
Oto moja funkcja menu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam
Mirek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2013, o 02:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Głównym podejściem prowadzącym do eliminacji _delay_ms jest zastosowanie Timerów programowych napędzanych timerem sprzętowym (najlepiej działającym w trybie CTC).

Zasada jest taka, że odpalasz sobie jeden z timerów sprzętowych w procu, żeby sobie tykał i liczył. Jego licznik będzie zwiększał się za każdym cyknięciem z predkością wynikającą z ustawionego preskalera.
Dla przykładu
F_CPU 16 MHz i preskaler 1024 spowoduje podzielenie 16MHz przez 1024 czyli licznik będzie zliczał impulsy o częstotliwości 15625 Hz. Włączasz sobie obsługę przerwania na zdarzenie CompareMatch czyli sytuacje gdy wartość licznika osiągnie zadaną wartość którą zapisujesz do rejestru OCRx. W przerwaniu inkremetujesz jakąś zmienną (musi być rodzaju volatile). Następnie w pętli głównej sprawdzasz czy wartość tej zmiennej osiągnęła jakąś wartość.

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


Procedura przerwania:
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.


Zmienne Timer1 i Timer2 zwiększają wartość co 10ms. (wartość OCR0 = 155); pierwsza funkcja będzie wykonywać się co 100ms druga co 1000ms.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2013, o 07:12 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 17
Pomógł: 0

No tak ale mi chodziło zebym sterował procesam za pomocą micro-switchy a nie żeby wykonywały się zawsze z okresloną zwłoką czasową. Chcę mieć możliwość selektywnego wybrania danej opcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2013, o 08:26 
Offline
Moderator
Avatar użytkownika

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

MirekP napisał(a):
Chcę mieć możliwość selektywnego wybrania danej opcji.


To zacznij jednak poznawać programowanie strukturalne oparte m.in o timery programowe i zdarzenia a nie to co teraz robisz czyli programowanie LINIOWE.

Wyżej to bardzo dobra sugestia - tylko ty na razie nie wiesz pewnie w ogóle o co w tym chodzi ....

dlatego na początek poczytaj sobie to:

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

a docelowo pomyśl jednak o poczytaniu rozdziału pt:

"wstęp do systemów czasu rzeczywistego"

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

bo być może tam jeszcze nie dotarłeś albo omijasz ten rozdział bojąc się, że to coś strasznie trudnego

_________________
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: 26 sie 2013, o 11:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

MirekP napisał(a):
No tak ale mi chodziło zebym sterował procesam za pomocą micro-switchy a nie żeby wykonywały się zawsze z okresloną zwłoką czasową. Chcę mieć możliwość selektywnego wybrania danej opcji.


To było raczej tutułem wstępu. Chodziło o pokazanie idei usunięcia _delay_ms. Najlepiej jest chyba zacząć od tego, żeby płynnie operować timerami, bo to podstawa działania jeśli chodzi o programowanie nieliniowe.

http://forum.atnel.pl/topic3887.html
Tutaj masz dyskusję związaną z tematem oraz z obsługą klawiszy w oparciu i timery.


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

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