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



Teraz jest 11 lut 2025, o 20:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2014, o 21:48 
Offline
Użytkownik
Avatar użytkownika

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

Witam

Nieśmiertelny temat czyli LCD :P Ale trochę (chyba) nietrywiany problem / zagadnienie.

1. Jest sobie LCD 1x16 Niby typowa sprawa.
2. Jest sobie biblioteka do obsługi HD44780 autorstwa Mirka oczywiście, choć to nie ma znaczenia czyja.

W bibliotece mamy (w definicjach) oczywisty i zrozumiały fragment:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak wiadomo ten fragment jest brany pod uwagę dla LCD innego niż 4x16

Mój wyświetlacz jest 1x16 więc fragment go dotyczy.
Jednak czytając notę PDF do LCD okazuje się, że mimo posiadania fizycznie jednego wiersza. Sterownik jest podłączony do LCD w taki sposób, że pierwsze 8 pozycji (kolumn) będzie pierwszym wierszem, a kolejne 8 kolumn będzie wierszem drugim.
Przynajmniej ja to tak rozumiem:
Obrazek

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


Jednak efekt jest nadal niepoprawny, wyświetlanie odbywa się tylko na 8 pierwszych kolumnach.
Dopiero gdy zrobię tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mogę wyświetlać na pozycjach 8-16.

Dodam, że posiadam jeszcze drugi taki wyświetlacz, innego producenta, który zachowuje się identycznie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 21:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Jest późno więc mogę coś zamotać...

A nie powinieneś przypadkiem dać
sq8dsr napisał(a):
#define LCD_Y 1         // ilość wierszy wyświetlacza LCD
#define LCD_X 16 // ilość kolumn wyświetlacza LCD


a tu :

sq8dsr napisał(a):
//#define LCD_LINE1 0x00          // adres 1 znaku 1 wiersza
#define LCD_LINE1 0x40          // adres 1 znaku 2 wiersza
#define LCD_LINE3 0x10          // adres 1 znaku 3 wiersza
#define LCD_LINE4 0x50          // adres 1 znaku 4 wiersza

_________________
50 znaków Atnela ....



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

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

Nie, to nic nie da.
Pierwsze 8 znaków ze stringa ląduje dobrze. Następnie trzeba przesłać następne 32 znaki, żeby przeszło do drugiej połówki.


---EDYCJA---
Zresztą zachowanie jest identyczne przy 2x8.

Ja rozumiem to tak, że wprowadzenie do biblioteki definicji ilości wierszy i kolumn jest potrzebne do tego by po przekroczeniu pozycji ostatniego znaku w wierszu "kursor" przeskoczył do drugiego wiersza.
I przykładowo na 2x40 to działa doskonale.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 22:44 
Offline
Użytkownik
Avatar użytkownika

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

Pamięć RAM sterownika posiada 80 bajtów. Więc w wyświetlaczu 2x40 cała pamięć jest wyświetlana. I dlatego po zapisaniu jednej linii kursor od razu przechodzi do drugiej. W wyświetlaczach mających mniej niż 40 znaków w linii te znaki które nie mieszczą się w linii są zapisane w pamięci RAM wyświetlacza poza obszarem wyświetlania i żeby je wyświetlić należy przewinąć wyświetlacz odpowiednią komendą.

Czyli wyobraź sobie że twój wyświetlacz składa się z dwóch linii po 40 znaków. Ale w każdej linii jest widoczne tylko osiem znaków. Reszta jest tak jakby poza obszarem wyświetlania. Tak więc po przekroczeniu ostatniego "widzialnego" znaku kursor nie przeskakuje na początek następnej linii.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 23:02 
Offline
Użytkownik
Avatar użytkownika

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

Jasne, czyli żeby ten wyświetlacz traktował te 16 kolumn jako jeden wiersz trzeba by najpierw, przy każdym wysłaniu stringa, wysłać najpierw 32 jakieś znaki żeby zajęły pierwsze 32 miejsca w buforze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 23:24 
Offline
Użytkownik
Avatar użytkownika

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

Zamiast wysyłać 32 puste znaki spróbowałbym zmodyfikować bibliotekę tak aby podczas wyświetlania stringa była liczona aktualna pozycja kursora. I w przypadku gdyby następny znak miałby być zapisany w RAM poza obszarem wyświetlania, polecenie locate ustawiało by kursor na początku drugiej linii.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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