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



Teraz jest 25 lut 2025, o 15:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 27 lis 2014, o 11:49 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 52
Pomógł: 0

Witam.

Chciałem na wyświetlaczu LCD wyświetlać w jednej linii kropkę która co jakiś czas (powiedzmy sekundę) jest zwiększana o następną. Czyli mamy pustą linię, za sekundę ".", za dwie sekundy "..", za trzy "...". Na początku linia jest pusta za sekundę pokazuje się jedna kropka potem druga obok itd. Coś na kształt pokazania, że coś się ładuje. Gdy ilość kropek osiągnie zadeklarowane maximum to wyświetlanie zaczyna się od nowa czyli od pustej linii, i potem od jednej kropki, drugiej itd.

Napisałem coś takiego, ale z użyciem _delay_ms lecz chciałbym zrobić to na timerze, ponieważ delay blokuje mi wyświetlanie temperatury z czujnika.

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

Z przerwaniem próbowałem tak, ale nie 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.


Jak to ma być poprawnie napisane z przerwaniem? I jak zrobić, żeby załadowało się kila znaków, znikło i ładowało od nowa, bez czyszczenia całego LCD tylko żeby wyczyścić jedną linię?

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 12:14 
Offline
Użytkownik
Avatar użytkownika

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

Pomijając fakt, że nie podałeś całego kodu i nie wiadomo jak obsługujesz przerwania i timery programowe to ten drugi sposób na pewno ci nie zadziała.
Pomyśl. W pierwszym przykładzie przy pierwszym obiegu pętli for program się zatrzymuje na delayu, potem coś tam wyświetla na LCD, następuje kolejny obieg pętli for, następnie delay, wyświetlanie na LCD... I tak 10 razy.

W drugim przypadku, przy pierwszym obiegu pętli for program sprawdza czy Tomer3 == 0. Jeśli nie to niczego nie wyświetla na LCD i przechodzi do drugiego obiegu pętli for. I znów sprawdza zmienną Timer3. Jeśli nie jest wyzerowana to przechodzi do kolejnego obiegu for. I zanim zmienna Timer3 osiągnie wartość zero pętla for już zdąży się skończyć. I pewnie dlatego ta druga wersja ci nie działa.

Zauważ jeszcze jedną rzecz. Jeśli w programie, który ma działać nieblokująco, zastosujesz np. pętlę for i w tej pętli program będzie się kręcił przez dłuższy czas np. 3 sekundy to na ten czas zablokujesz resztę programu (poza przerwaniami). Wtedy taka pętla for niczym się nie różni od _delay_ms(3000). Może jedynie tym, że wewnątrz takiej pętli program może coś robić. Ale pętla główna poza for i tak nic nie robi, tak samo jak przy delayu.

Dlatego pomyśl nad wykorzystaniem jakiejś zmiennej, w której będziesz odliczał ilość wyświetlonych kropek. Zamiast odliczać ilość kropek pętlą for.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 12:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Co prawda ja mechanizmu o jaki Ci chodziło użyłem do funkcji formatowania liczby, a konkretnie dopisywanie zer ale powinno Cię to naprowadzić na właściwe rozwiązanie (hmm, które w zasadzie Ci już podałem na tacy :) )

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


Dodaj tylko timer programowy, zmienną spc sterujesz ile ma być znaków.

(Nie zwracaj zbytnio uwagi na składnię obsługującą LCD, bo to moje instrukcje przystosowane do obsługi ekranu buforowanego)

_________________
http://www.sylwekkuna.com



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

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