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



Teraz jest 8 lut 2025, o 00:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 21 gru 2012, o 20:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Witam!

Wpadłem na genialny pomysł, aby poćwiczyć programowanie w C dla Atmegi32 i wymyśliłem programik, który będzie realizował proste zadania, wybierając je odpowiednio z menu na wyświetlaczu LCD.

Założenia:

Dwa przyciski: strzałka, która zmienia aktualnie wybrany element menu oraz enter
Dioda LED: aby coś tam się działo po wciśnięciu Enter.
Niestety to tyle, bo nie mam więcej drucików do zestawu ATB :P

Spłodziłem pewien kod, który działa bardzo dobrze, ALE.

Mam jego dwie wersje:

Pierwsza posiada błąd migotania - zauważalnie napisy migoczą dlatego, że w pętli czyszczę i wyświetlam napis na LCD, czyszczę i wyświetlam, czyszczę i wyświetlam [...]

Druga posiada błąd braku wygaszania - Załóżmy, że napisałem słowo: DLUGASNY_NAPIS [14 znaków]. Potem chcę wyświetlić napis PIES [4 znaki] bez kasowania. Wiadomym jest to, że wyświetli mi się PIESASNY_NAPIS, ponieważ nie wygasił poprzednich śmieci.

I teraz nie wiem co zrobić. Fakt, że wymyśliłem na szybko kod obsługi menu, na pewno istnieje inny, lepszy. Może ktoś się podzieli swoimi spostrzeżeniami? Chciałbym rozwinąć kiedyś menu, i zrobić kod taki jakby uniwersalny dla MENU, że jak sobie kiedyś wymyślę, aby zrobić termostat na AVR, to abym mógł zaadaptować już stworzone wcześniej menu. Taką mam zasadę życiową, po co tworzyć na nowo żarówkę, jak ktoś już ją wcześniej stworzył? Oczywiście chodzi mi o to, że to ja stworzyłem żarówkę (menu), kumacie? Ee, nie ważne :P

Oto moje wypocinki:

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


Film z migotaniem napisów


Film z nakładającymi się napisami:

_________________
sig off ;(



Ostatnio edytowano 22 gru 2012, o 08:06 przez kila, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2012, o 22:21 
Offline
Użytkownik

Dołączył(a): 16 lut 2012
Posty: 219
Pomógł: 1

Jeżeli chcesz kolego, aby nie migały ci wyświetlane znaki spowodowane ciągłym lcd_cls(); to możesz uzyć tej funkcji tylko tu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Funkcja ta wykona się tylko raz podczas wciśnięcia:) Sprawdź sobie


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2012, o 23:22 
Offline
Moderator
Avatar użytkownika

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

eeee tam ;)

w ogóle nie stosuj lcd_cls() - to tragicznie powolna operacja i w zasadzie jak dobrze pomyśleć to prawie w ogóle niepotrzebna.

Po pierwsze po co w każym case stosujesz ten sam zapis ????

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


czyż nie lepiej dać to jeden raz przed instrukcją switch ???

to po pierwsze

lcd_cls() w ogóle wywalasz z tego kodu na zbity pyszczek ;)

a w każdym case dajesz sobie:

Kod:
lcd_locate(1,0);


a potem kolejno:

Kod:
lcd_str("                ");

lcd_str("1. Zapal diode  ");

lcd_str("2. Zgas diode   ");


------------------------ [ Dodano po: 1 minucie ]

to jeden z najprostszych sposobów oczywiście


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: 22 gru 2012, o 08:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Koledzy, przeanalizowałem Wasze sposoby i uważam, że obydwa są dobre. Zniwelowały migotanie oraz nakładające się napisy i o to chodziło :)

Dziękuję za pomoc!

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2012, o 12:40 
Offline
Użytkownik

Dołączył(a): 07 gru 2011
Posty: 35
Pomógł: 0

Czy spotkał się ktoś z funkcją podobną w działaniu do lcd_cls(); ale czyszcząca tylko jedną wybraną linie alfanumerycznego wyświetlacza LCD?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2012, o 15:42 
Offline
Moderator
Avatar użytkownika

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

Taktyk napisał(a):
Czy spotkał się ktoś z funkcją podobną w działaniu do lcd_cls(); ale czyszcząca tylko jedną wybraną linie alfanumerycznego wyświetlacza LCD?


Tak - ja się spotkałem - po raz pierwszy się z nią spotkałem gdy ją sam sobie napisałem ;) .... Napisz ją sobie - to na prawdę nie jest trudne. Ale jeśli napotkasz przy tym kłopot - to śmiało pytaj , pokaż co stworzyłeś i gdzie masz problem - szybko pomożemy ;)

_________________
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: 23 gru 2012, o 18:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Ja bym zapisał spacjami całą linijkę. Może wystarczy stworzyć makro?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2012, o 18:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Np tak:

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


??

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2012, o 19:12 
Offline
Moderator
Avatar użytkownika

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

w ten sposób tracisz więcej pamięci flash a w tym przypadku także ram. Można np tak ;)

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

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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