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



Teraz jest 10 sty 2025, o 12:12


Strefa czasowa: UTC + 1





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

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

Witam.

Piszę ponieważ mam problem, a jakoś nie mogę go rozwiązać. Nie wiem czy dobrze zdefiniowałem temat mojego problemu ale już wyjaśniam o co chodzi. Do ATmegi8 mam podłączony przełącznik (ON/OFF) i diodę LED. Chcę aby na wyświetlaczu LCD informowało mnie w jakiej pozycji jest przełącznik, ON lub OFF. Oprócz wyświetlania informacji na LCD mam dodatkowo podłączoną diodę która pokazuje czy przełącznik jest włączony czy wyłączony. Problemem jest zmiana wyświetlonego stanu na LCD. Wyświetla mi na LCD OFF, zmieniam stan przełącznika i wyświetla ONF. Po prostu nie wyczyściło wyświetlacza LCD i na stary komunikat OFF nałożyło ON i powstało ONF. Jeśli użyje lcd_cls(); w pętli while(1) to będzie mrugać bez końca... Problem dla większości pewnie trywialny, ale jestem początkującym w tym temacie.

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

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 16:00 
Offline
Użytkownik
Avatar użytkownika

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

Zrób 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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 16:32 
Offline
Użytkownik

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

Na coś takiego też wpadłem, ale rozwiązanie trochę "dziwne" jak dla mnie :)

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 16:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Wyświetlacz LCD sam nie czyści pozycji za jak i przed wyświetlanym napisem,
sam musisz decydować co trzeba wyczyścić
(zapisać spacjami).
Takie działanie jest w większości wskazane :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 16:37 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3209
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

A co w tym dziwnego? Jedno z rozwiązań.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 16:43 
Offline
Użytkownik

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

No w sumie nic dziwnego. Właśnie... To jest jedno z rozwiązań. Jak to zrobić za pomocą lcd_cls(); Dlaczego jak używam lcd_cls(); to nie działa...?

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 17:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

bo jak uzywasz lcd_cls() to w kazdym przejsciu pętli głównej czyscisz ekran, sprawdzas warunki i zapisujesz go na nowo... dlatego mruga z prędkością pętli while().
Musiałbyś dorobic jakąś flagę w tych warunkach żeby ci czyściło tylko raz ekran, po wyczyszczeniu ustawiasz flage ze byl wyczyszczony i w kolejnym przejsciu sprawdzasz czy ta flaga jest czy nie i wtedy czyscisz albo nie znowu. w zaleznosci czy zmienil sie stan wejscia...

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2014, o 20:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

Dokładnie tak :) Spacja załatwi sprawę ale może kolega chce poćwiczyć inne opcje to może sobie wymyśleć milion innych rozwiązań ;) Jak już też ktoś wyżej napisał ilu programistów tyle rozwiązań :) dla treningu można się bawić ale normalnie każdy pewnie wstawił by spacje :)

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 cze 2014, o 08:44 
Offline
Użytkownik

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

Spoko. Tak więc zrobię. Dzięki za pomoc!

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2014, o 15:20 
Offline
Użytkownik

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

Problem rozwiązany ale teraz mam trochę inny w tym temacie. Chce robić to samo co robiłem poprzednio, tylko wcześniej używałem przełącznika który przyjmował stan 0 lub 1. Jak przełączyłem w jedną stronę to było 0 jak w druga to 1. Teraz chciałbym wykorzystać mikroswitch, który jak wiadomo nie podtrzymuje stanu 0 ani 1. Tylko daje nam impuls. Próbowałem różnych sposobów ale jakoś nie do końca działa tak jak powinno. Chciałbym, żeby normalnie na wyświetlaczu było OFF i dioda była wyłączona, gdy wcisnę mikroswitch'a zmieni mi stan, dioda się zapali, a na wyświetlaczu pojawi się ON. Kolejne kliknięcie na mikroswitch'a znów zmieni na OFF i tak w kółko.

Zmieniać stan diody mogę w prosty sposób za pomocą LED_TOG, lecz nie umiem powiązać tego z komunikatem na wyświetlaczu (zmiana z OFF na ON). Gdy próbowałem normalnie, za pomocą LED_ON, LED_OFF działa ale tylko jak mikroswitch jest wciśnięty. Gdy go puszczę nie zapamiętuje stanu i wraca na OFF.

Ma ktoś propozycje jak mogę sobie z tym poradzić?

_________________
www.electrobot.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2014, o 15:26 
Offline
Moderator
Avatar użytkownika

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

mateusz_dan napisał(a):
Próbowałem różnych sposobów


ciekawe czy zaglądasz pan na bloga www.mirekk36.blogspot.com ? ... bo tam jest sposób który działa doskonale ;)

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


Autor postu otrzymał pochwałę

_________________
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: 8 lip 2014, o 15:36 
Offline
Użytkownik
Avatar użytkownika

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

mateusz_dan napisał(a):
Ma ktoś propozycje jak mogę sobie z tym poradzić?


Jak zwykle radze skorzystać z flagi :) tzn.

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  
PostNapisane: 9 lip 2014, o 12:20 
Offline
Użytkownik
Avatar użytkownika

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

mateusz_dan napisał(a):
Dlaczego jak używam lcd_cls(); to nie działa...?


Jest jeszcze taki prosty sposób z fllagą. Na początku zerujesz flagę, a potem przed każdym wyczyszczeniem/ odświeżeniem ekranu sprawdzasz jej stan i jeśli jest wyzerowana to czyścisz ekran po czym dajesz jej wartość różną od zera. Następnie przy każdej zmianie jakiegoś parametru, który ma być wyświetlony znowu zerujesz flagę. Taki algorytm powoduje, że ekran jest kasowany TYLKO przy wprowadzaniu na nim jakichś zmian, w przeciwnym wypadku procedura czyszczenia jest omijana.

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

Strefa czasowa: UTC + 1


Kto przegląda forum

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