logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

LCD, dziwne zachowanie sie kursora w drugim wierszu

maggik01 26 Mar 2007 19:12 1382 5
REKLAMA
  • #1 3721574
    maggik01
    Poziom 2  
    Posty: 3
    Witam!

    Mam pewien problem... posiadam ja sobie LCD podpięty do atmegi 8515. Wszystko byłoby pięknie, ale dziwi mnie zachowanie się tego LCD, a konkretnie rozkazu DDRAM SET. Rozkazu tego używam do przesuwania kursora w żądane miejsce na ekranie... napisałem sobie takie makro:
    #define LCD_CURSOR_POSITION(ZNAK) (0x80+ZNAK)

    oraz funkcję przesyłającą rozkaz do wyświetlacza:
    void WriteCmd( char cmd );

    (kodu nie przytaczam, bo funkcja działa poprawnie)
    Teraz tak... piszę sobie:
    WriteCmd( LCD_CURSOR_POSITION(4) )

    efekt: kursor skacze do 5 znaku w 1 linijce (indeksowane jak wiadomo od 0), czyli fajnie... i ogólnie działa super w 1 linijce (czyli adresy od 0 do 39)

    Problem pojawia się gdy odwołuje się do 2 linijki... nieważne który z adresów z zakresu 40-79 podam, kursor i tak ląduje w 1 znaku 2 linijki wyświetlacza (czyli adres 40).
    Makro na pewno działa dobrze... funkcja także (debugowane wielokrotnie)... więc podejrzewam, że mogę czegoś nie rozumieć w związku z samym wyświetlaczem. Niestety po wielogodzinnych staraniach nie udało mi się znaleźć błędu w moim rozumowaniu i dlatego też zwracam się z tym do Was szanowni forumowicze :)

    editka: jak zaczynam coś pisać w drugiej linijce, to kursor normalnie przesuwa się dalej i działa fajnie... niby mogę w pętli wywoływać rozkaz przesunięcia w prawo/lewo, ale wolę to załatwić jednym rozkazem - stąd to pytanie
  • REKLAMA
  • #2 3723498
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    maggik01 napisał:

    Problem pojawia się gdy odwołuje się do 2 linijki... nieważne który z adresów z zakresu 40-79 podam, kursor i tak ląduje w 1 znaku 2 linijki wyświetlacza (czyli adres 40).


    Jesteś pewien, że jest tak dla wszystkich adresów z zakresu 40-79?
    Bo w moich wyświetlaczach (2x16, 2x20) druga linijka zaczyna się od adresu 0x40, czyli 64. Ale podobno bywa też inaczej.

    Pozdrawiam.
  • REKLAMA
  • #3 3723574
    maggik01
    Poziom 2  
    Posty: 3
    hmmm no przyznam się, że każdego adresu nie sprawdzałem... nie wpadło mi to do głowy ;) Postaram się dziś to sprawdzić.
    Takie pytanie uzupełniające - ta pamięć ma 'dziurę' między adresami 40 a 64 ? Czy jak to wygląda?
  • REKLAMA
  • Pomocny post
    #4 3723748
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    maggik01 napisał:

    Takie pytanie uzupełniające - ta pamięć ma 'dziurę' między adresami 40 a 64 ? Czy jak to wygląda?

    Specyfikacja, którą mam, nie definiuje tego tak dokładnie, ale raczej ma być tak, że po prostu ten kawałek pamięci nie jest wyświetlany (nie sprawdzałem).
    Nie tłumaczyłoby to zachowania takiego, jak opisujesz. Ale może kontroler w Twoim wyświetlaczu zachowuje się trochę inaczej (jest "kompatybilny" :wink:).
  • REKLAMA
  • #5 3723836
    Robot_
    Poziom 18  
    Posty: 277
    Pomógł: 22
    Nie ma tam dziury,
    Jeśli coś zapiszesz do tej pamięci to wyświetli się na LCD jeśli przesuniesz całe okno w lewo.
  • #6 3723922
    maggik01
    Poziom 2  
    Posty: 3
    faktycznie - 2 linijka zaczyna się od 64... a pisanie pod dowolny adres z zakresu 40-63 powoduje wpisanie czegoś na pozycję numer 64... nie mam pojęcia czemu tak jest, ale wielkie dzięki za pomoc :)

    editka:

    Robot_: wyświetlacz to 2x16 i faktycznie jak przesunę okienko wyświetlania w prawo, to w pierwszej linijce zobaczę kolejne znaki, ale tylko do pozycji nr 39 (w sumie 40 znaków). Logicznie rzecz biorąc druga linijka powinna zaczynać się od adresu 40, a faktycznie zaczyna się od 64... pisanie na dowolny adres z zakresu 40-63 powoduje zapis pod adres 64 i to jest właśnie ta dziura, która mnie tak zaciekawiła :)
REKLAMA