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



Teraz jest 10 lut 2025, o 20:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 9 lut 2018, o 15:48 
Offline
Nowy

Dołączył(a): 21 lut 2014
Posty: 4
Pomógł: 0

Witam. Napisałem program wyświetlający odpowiedni komunikat na wyświetlaczu LCD w zależności od pojawienia się stanu niskiego na powiązanym z nim wejściu (np. jeśli stan niski na PA0 to wyświetl alarm1). Atmega sprawdza 12 takich wejść. Chciałbym teraz za pomocą dodatkowego przycisku przewijać komunikaty na LCD, ale tylko te które są w danym momencie "aktywne" (Wciśnięcie przycisku powoduje że wyświetla się następny komunikat).
W przypadku pojedynczych znaków można by je wpisywać do tablicy i wyświetlać poprzez podanie odpowiedniego indeksu, którego wartość zmieniamy przyciskiem. Jak to zrobić gdy mamy tablice znaków?
Myślałem nad użyciem pamięci eeprom, ale nie wiem jak zapisywać/odczytywać dane z konkretnych adresów.

Proszę o wskazówki. Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 15:53 
Offline
Moderator
Avatar użytkownika

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

czester88 napisał(a):
Myślałem nad użyciem pamięci eeprom,

eeprom??? żeby przewijać teksty na LCD ??? dobrze to kolega przemyślał ? ... a co ma wspólnego eeprom z LCD ? Chyba że coś źle zrozumiałem bo też i opis problemu jest taki troszkę delikatnie mówiąc mega zawiło-ogólny

czester88 napisał(a):
ale nie wiem jak zapisywać/odczytywać dane z konkretnych adresów.

Tak się w ogóle nie pracuje z EEPROMEM więc to już całkiem dziwna sprawa ...

Oczywiście jeśli będzie ci kiedyś naprawdę potrzebny EEPROM w C w AVR'kach to zobacz sobie koniecznie ten poradnik

https://www.youtube.com/watch?v=W7f0EnDzS_M

https://www.youtube.com/watch?v=ix0EBtdiviY

_________________
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: 9 lut 2018, o 16:24 
Offline
Nowy

Dołączył(a): 21 lut 2014
Posty: 4
Pomógł: 0

Cytuj:
eeprom??? żeby przewijać teksty na LCD ??? dobrze to kolega przemyślał ? ... a co ma wspólnego eeprom z LCD ? Chyba że coś źle zrozumiałem bo też i opis problemu jest taki troszkę delikatnie mówiąc mega zawiło-ogólny

wyświetlałbym komunikaty zapisane w eeprom
Cytuj:
Tak się w ogóle nie pracuje z EEPROMEM więc to już całkiem dziwna sprawa ...

ok, rozumiem.

W takim razie, czy mógłby Pan doradzić jak zabrać się do rzeczy? z jakich mechanizmów skorzystać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 18:33 
Offline
Użytkownik

Dołączył(a): 07 gru 2013
Posty: 90
Pomógł: 6

Zrób tak: dwie tablice jedna to co ląduje na lcd np 16 elementów nazwijmy ja lcd_tab[16] druga tablica to twój napis jaki chcesz przewijać na lcd.
I teraz: ( piszę z głowy mam nadzieje że nie będzie błędów )
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam nadzieje że niczego nie poknociłem. A i i jeszcze gdzieś dalej to co w lcd_tab wrzucasz na lcd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 21:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1033
Lokalizacja: Trójmiasto
Pomógł: 190

Jeśli dobrze zrozumiałem to chcesz za każdym naciśnięciem przycisku by na wyświetlaczu został wyświetlony kolejny komunikat "aktywnego" wejścia???
Możesz to zrobić na tablicach umieszczonych w eepromie. Każdy komunikat w jednej tablicy, a wszystkie tablice z komunikatami ubrać w kolejną tablicę - czyli tworzysz tablicę dwuwymiarową. I Teraz dla każdego wejścia będziesz miał analogiczny indeks w tablicy.
Naciskając przycisk uaktywniasz funkcję która inkrementuje indeks, następnie sprawdza czy wejście aktywne, jeśli tak to wyrzuca komunikat z tablicy o danym indeksie i break, jeśli nie to inkrementuje kolejny raz i sprawdza ponownie czy dane wejście aktywne, itd.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1166
Lokalizacja: Kraków
Pomógł: 93

Ale po co w eeprom? Przecież można umieścić odpowiednie napisy w pamięci flash. A resztę tak, jak kolega xentis zaproponował.
Chociaż nie do końca. Zrobiłbym to w ten sposób, że utworzyłbym tablicę dwuwymiarową o rozmiarze 12 wierszy 16-elementowych (bo maksymalnie może być 12 wejść, a 16 to długość pojedynczego napisu).
I teraz, jeżeli na którymś wejściu pojawi się stan aktywny, to do zerowego wiersza wpisuję odpowiadający mu tekst, a następnie zwiększam indeks o 1. W ten sposób będzie też zachowana kolejność wystąpienia stanów aktywnych na wejściach.
I teraz przyciskiem wyświetlasz pierwszy tekst, przesuwasz indeks wyświetlania na kolejny element. A jeśli indeks wyświetlania będzie równy indeksowi zapisu, to wyświetlić odpowiedni komunikat (np. brak alarmów). I wypełniać tablicę od początku.
Można też zmodyfikować w ten sposób, że po wyświetleniu napisu "kasować' go - przesunąć pozostałe elementy "do początku". i nie wiem, czy to będzie dobrze działać, to tylko taki mój pomysł.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 22:37 
Offline
Nowy

Dołączył(a): 21 lut 2014
Posty: 4
Pomógł: 0

Cytuj:
Jeśli dobrze zrozumiałem to chcesz za każdym naciśnięciem przycisku by na wyświetlaczu został wyświetlony kolejny komunikat "aktywnego" wejścia???
dokładnie o to mi chodzi

xentis i Marhef, dziękuję za odpowiedzi. Jutro spróbuję to zrobić przy pomocy tablicy dwuwymiarowej



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2018, o 21:58 
Offline
Nowy

Dołączył(a): 21 lut 2014
Posty: 4
Pomógł: 0

Poniżej fragment działającego kodu z obsługą jednego wejścia, może komuś się przyda. Dzięki wszystkim za pomoc.

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

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