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

Jak rozumieć ten fragment kodu? Monochromatyczny LCD na KS0108.

squelch 01 Cze 2017 08:00 1287 8
REKLAMA
  • #1 16506005
    squelch
    Poziom 11  
    Witam nie rozumiem tego kawałka kodu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    GLCD_x-rejestr sterownika którego liczba mówi o liczbie wierszy
    GLCD_y-rejestr sterownika którego liczba mówi o liczbie kolumn

    Dlaczego są tam jakieś modula i operacje sumy?

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 16506033
    pietia86
    Poziom 26  
    Często jest tak że wykonując zapis komendy do sterownika oprócz samego kodu komendy zapisywany jest także argument. Spójrz do dokumentacji sterownika.

    Z tego właśnie powodu do makra DISPLAY_SET_X oraz DISPLAY_SET_Y sumowane są argumenty.

    Użycie modulo jest spowodowane jedynie potrzebą dostosowania argumentu w komendzie.
  • REKLAMA
  • Pomocny post
    #3 16506057
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #4 16506897
    kamyczek
    Poziom 38  
    Ten wyświetlacz jest stosunkowo tani ale raz że posiada magistralę 6800 której nie mają mikrokontrolery atmela (8080). co więcej żeby go obsługiwać trzeba emulować programowo 6800 lub pokochać np. motorole bo ta posiada magistralę 6800 do tego w zasadzie to tylko kwadraty 68 na 68 pikseli do których trzeba samemu dorobić grafikę czcionki i całą resztę . Wygody w nim więc nie ma żadnej , może cena kusi ale za taką kasę kupuje się wyświetlacz oled na uc1602 lub podobnym i ma się do dyspozycji 6800,8080 , i2c i dwa rodzaje spi 3 i 4 przewodowy zajmuje więc mniej wyprowadzeń mikrokontrolera jest szybszy i nie pobiera tyle prądu . Ale jak już jest to się można przemęczyć chwilę i po prostu gdzieś go włożyć choć u mnie leżą takie 3 szt i proszą o wykorzystanie w jakimś projekcie .
  • #5 16507428
    squelch
    Poziom 11  
    Dzieki panowie tylko jeszcze te linie są niezrozumiałe
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    po co to wysyłać jak po tej pętli przesyłam kod komendy razem z danym adresem?
    A i dziwnie jest to zrobione, kod DISPLAY_SET_X powinien być odpowiedzialny za rejestr współrzędnych X a ja do niego pakuje y GLCD_WriteCommand(DISPLAY_SET_X | y, (x/64));?

    Pozdrawiam

    Dodano po 15 [minuty]:

    analizuje dalsze funkcje i widzę że za y nie podstawia się numeru pikselu wzdłuż y (0-63) tylko liczbę 0-8 o co tu chodzi.
  • REKLAMA
  • Pomocny post
    #6 16507682
    michalko12
    Specjalista - Mikrokontrolery
    squelch napisał:
    analizuje dalsze funkcje i widzę że za y nie podstawia się numeru pikselu wzdłuż y (0-63) tylko liczbę 0-8 o co tu chodzi.

    Naraz zapisywane jest 8 bitów danych, czyli jeden wiersz, a wierszy jest 8 (8*8=64=Y)
  • REKLAMA
  • Pomocny post
    #7 16507835
    kamyczek
    Poziom 38  
    Wszystko wynika z organizacji pamięci wyświetlacza każdy bajt to pionowy słupek 8 pikseli więc masz w każdej kratce 64*64 piksele daje to 8 wierszy po 64 bajty każdy więc masz 512 bajtów na każdą taką kratkę 64*64 . Program musi dzielić grafikę i napisy na takie kratki i dla każdej masz osobny sygnał CS jeśli grafika ma umiejscowienie w drugiej połowie wyświetlacza jej wektor X musi zostać przesunięty o 64 piksele o wartość x musi mieć wartość od 0 do 63 dlatego odejmujesz 64 dla 2 połowy grafiki w której X>63 . W wielu przypadkach można działać na pamięci wyświetlacza bezpośrednio ale można też zrobić sobie w ram odpowiednią przestrzeń i pracować na niej jak na jednym wyświetlaczu 128*64 . Jedynie przy odświeżaniu przepisywać ram do pamięci wyświetlacza . Gdybyś użył wyświetlacza z magistralą 8080 i mikrokontrolera z wyprowadzoną magistralą 8080 mógł byś traktować go jak zewnętrzny obszar ram i zapisywać go w taki sposób . Ja osobiście wolę jednak używać wyświetlaczy z magistralą spi bo zajmują mniej wyprowadzeń mikrokontrolera a w przypadku tanich wyświetlaczy oled ,które pobierają często prąd typu 1mA można używać ich z bateryjnymi źródłami zasilania . Wadą jest tylko wielkość w stosunku do ceny.
  • #8 16507978
    squelch
    Poziom 11  
    ok rozkminiłem to myślałem że bajty idą w poziomie a tu jednak idzie to w pionie

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    przecież te 2 linie na końcu wysyłają x(0-63) oraz y(0,63) więc po co ta petla?
    Dostrzegam jeszcze jeden problem z umiejscowiem na jakiejś pozycji tekstu co w przypadku kiedy tekst będzie przechodził przez styk kontrolerów?
  • #9 16534810
    squelch
    Poziom 11  
    Właśnie przyszedł mi wyświetlacz podłączyłem i odpaliłem kod Tomka Francuza coś tam wyświetla i nawet jakaś animacja. tylko pojawia się pytanie czy mogę wyświetlać tekst na pozycji jakiej chcę czy tylko 0,8,16,...(współrzędne y) czy może y może być dowolny np. 2 bo biblioteka Tomka działa tak że można wyświetlać tylko od 0,8,16(współrzęne y) nawet jak podamy 2(y) to zamienia to modulem na 0 więc jak z tym jest

    Dodano po 16 [minuty]:

    A już widzę w tej bibliotece są 2 funkcje jedna która rysuje bardzo dokładnie w niej y może być równy 2 oraz druga która dla y=2 będzie i tak rysowała od y=0. Bardzo fajnie napisany kod, czyta się dobrze.

    Dodano po 1 [godziny] 17 [minuty]:

    Coś tu nie gra gdy korzystam z wolniejszej funkcji tekst pojawia się na samej górze gdy z szybszej tekst skacze na dół, tak nie powinno być. W kodzie nie widzę błędu może chińczyk tam coś włożył i dlatego tak dziwnie działa, odpalał ktoś te kody na swoim LCD.
REKLAMA