Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LCD od Siemensa CX65 L2F50. Zmiana trybu z 565 na 444.

16 Wrz 2008 10:19 3797 9
  • Poziom 43  
    Witam.
    Mógłby mi ktoś pomóc zmienić tryb danych w wyświetlaczy L2F50? Normalnie ludzie stosują tryb 565 i ja też taki stosowałem od 2 lat. Ale teraz muszę koniecznie przełączyć LCD-ka na 444. Pytanie wydaje się być pytaniem kompletnego początkującego, ale nim nie jest. Problem w tym że mniej więcej wiem jak zmienić tryb, ale gdy go zmienię to wyświetlacz przestaje działać (robi się cały biały – tak jak ma to miejsce np. podczas wyjęcia procesora z podstawki i podłączeniu zasilania).
    Gdyby wyświetlał jakieś krzaki, albo nadal pracował w jakimś innym trybie to bym zrozumiał. A on po prostu robi kompletny zgon. Wygląda to tak jak by ten bajt do zmiany trybu był w rzeczywistości bajtem zmieniającym cos innego, np. wybudzającym wyświetlacz z trybu PowerDown.

    W wielu mam nadzieję niezależnych źródłach znalazłem podobny kod:

    Code:

    Lcd_init_c:
      'Generate Clean Display Reset
      Lcd_reset = 0                                             'Reset Display
      Lcd_cs = 1                                                'Cs Is High During Reset Release
      Lcd_rs = 1                                                'Rs Is Set To High

      Waitms 10

      Lcd_reset = 1                                             'Release Reset

      Waitms 35


      Lcd_cs = 0                                                'Select Display

      ldi R17, datctl
      Gosub Lcd_cmd_8

    [b]
      ldi R17, &H2a
      Gosub Lcd_dat0_8                                          '&H2a = 565 Mode , &H0a = 666mode , &H3a = 444mode
    [/b]

      Gosub Lcd_cspulse


      ldi R17, disctl
      Gosub Lcd_cmd_8

      For I = 0 To 8
        Data_8 = Lookup(i , Disctl_data)
        lds R17, {Data_8}
        Gosub Lcd_dat0_8
      Next


      ldi R17, gcp64
      Gosub Lcd_cmd_8

      For I = 0 To 28
        Data_8 = Lookup(i , Gcp64_0)
        lds R17, {Data_8}
        Gosub Lcd_dat0_8

        ldi R17, &B00
        Gosub Lcd_dat0_8
      Next


      For I = 0 To 33
        Data_8 = Lookup(i , Gcp64_1)
        lds R17, {Data_8}
        Gosub Lcd_dat0_8

        ldi R17, &B01
        Gosub Lcd_dat0_8
      Next


      ldi R17, gcp16
      Gosub Lcd_cmd_8

      For I = 0 To 14
        Data_8 = Lookup(i , Gcp16_data)
        lds R17, {Data_8}
        Gosub Lcd_dat0_8
      Next


      ldi R17, gsset
      Gosub Lcd_cmd_8

      ldi R17, &H00
      Gosub Lcd_dat0_8


      ldi R17, ossel
      Gosub Lcd_cmd_8

      ldi R17, &H00
      Gosub Lcd_dat0_8


      ldi R17, slpout
      Gosub Lcd_cmd_8

     'waitms 7

      ldi R17, sd_cset
      Gosub Lcd_cmd_8

      ldi R17, &h08
      Gosub Lcd_dat0_8

      ldi R17, &h01
      Gosub Lcd_dat0_8

      ldi R17, &h8b
      Gosub Lcd_dat0_8

      ldi R17, &h01
      Gosub Lcd_dat0_8

      ldi R24, sd_pset
      Gosub Lcd_cmd_8

      ldi R17, &h00
      Gosub Lcd_dat0_8

      ldi R17, &h8f
      Gosub Lcd_dat0_8


      ldi R17, ascset
      Gosub Lcd_cmd_8

      ldi R17, &h00
      Gosub Lcd_dat0_8

      ldi R17, &haf
      Gosub Lcd_dat0_8

      ldi R17, &haf
      Gosub Lcd_dat0_8

      ldi R17, &h03
      Gosub Lcd_dat0_8


      ldi R17, scstart
      Gosub Lcd_cmd_8

      ldi R17, &h00
      Gosub Lcd_dat0_8

      Lcd_rs = 0

      ldi R17, dison
      Gosub Lcd_dat0_8


      Lcd_cs = 1                                                'Deselect Display
    Return



    To od trybu pogrubiłem.
    I gdy zmienię liczbę &H2A na &H3A, tak jak chyba powinienem to wtedy wyświetlacz pada.
    Od razu mówię że to nie jest wina BASCOM-a. Praca w trybie 565 przebiega prawidłowo. A w dodatku zdeassemblowałem program no i wszystko jest ok.
  • Poziom 43  
    Naprawdę nikt nie wie?
  • Poziom 32  
    To są formaty zapisu kolorów RGB pikseli. 565 oznacza, że kolory czerwony i niebieski są na 5 bitach, a zielony na 6.
  • Poziom 43  
    Tryb kolorów. Normalnie jest 565 czyli 5 bitów R, 6 bitów G i 5 bitów B. Jeden pixel zajmuje 2 bajty. A ja chcę 444, czyli po 4 bity na kanał. Wtedy piel zajmie 1,5 bajtu. Wysyła się po 3 bajty wtedy i zmieniają się po dwa piele naraz.
    Wiele wyświetlaczy pracuje w tych obydwu trybach. Domyślam się że L2F50 także bo znalazłem to w wielu kodach programów. To znaczy znalazłem to z komentarzach do kodów. A jeszcze nie widziałem żadnego kodu w którym ktoś używał tego trybu.
    No i przełączenie trybu zgodnie z tym co pisze w opisach kodów nie działa.
    Coś mi się zdaje że ten wyświetlacz po prostu nie obsługuje tego trybu i wiele osób w internecie rozpuszcza tylko plotkę że obsługuje.
    Nie mam datasheeta kontrolera tego wyświetlacza bo nawet nie wiem jaki tam siedzi kontroler. I nie mogę sprawdzić. A jak zaczynałem zabawę z LCD dawno temu to nawet nie szukam (datasheeta) bo miałem kod który działał (w trybie 565).


    PS. Jak to się dzieje że duża liczba odpowiedzi do postów pojawiają się dopiero jak ktoś odpowie na post? Tzn. gdy post zniknie z „posty bez odpowiedzi”. Skoro znika z „posty bez odpowiedzi” to teoretycznie mniej ludzi powinno widzieć post a więc prawdopodobieństwo że ktoś odpowie powinno być mniejsze.
  • Poziom 32  
    Nigdy nie próbowałem zmienić kodowania bitów w tym wyświetlaczu. Na stronie Christiana Kranz'a można znaleźć jedynie informacje o dwóch trybach: 565 i bliżej nie określony "different color coding".
  • Poziom 33  
    Obawiam się że prace Christiana Kranz'a nad tą wersją LCD skończyły się tylko na testach , wstępnym uruchomieniu i nikt inny tego nie weryfikował. Trzeba by więc do niego skierować zapytanie.
  • Pomocny post
    Poziom 27  
    W załączniku masz datasheet kontrolera z tego wyświetlacza.
    Z tego co się tam doczytałem kontroler epsona może pracować w 6 trybach:
    666, 332, 565-mode8, 444, 565-mode16
    Załączniki:
  • Poziom 43  
    Dzięki J_Bravo za datasheeta.
    Mniej więcej się wyjaśniło. Christian do ustawiania trybu wysyła 1 bajt komendy i jeden bajt parametru, a z datasheeta wynika że trzeba wysłać 1 bajt komendy i 2 bajty parametru. W dodatku do ustawienia trybu 565-16 używa nie takiego parametru jak trzeba.
    Wysyła 2Ah, czyli 00101010b a potrzeba wysłać 00101000b czyli A8h.
    Możliwe że ustawianie trybu kolorów w Christiana nie działa, ale wyświetlacz działa bo tryb 565-16 jest domyślnym trybem pracy. Możliwe też że wystarczy wysłać 38h zamiast 3Ah.
    Jak nie to trzeba wysłać dwa bajty parametru. Na razie Mie mam gdzie tego sprawdzić. Jak to zrobię to się odezwę. Może komuś się to przyda.

    Dodano po 1 [godziny] 29 [minuty]:

    Trudno powiedzieć czy działa. Wysyłam parametr 3Ah i potem dodatkowe zero, czyli razem 2 bajty parametru (Z tym że zarówno komenda jak i każdy parametr zawierają dodatkowe zero, czyli razem wysyłam 6 bajtów. Ale o tym puźniej.). Wysyłam je dopiero po wcześniejszym ustawieniu trybu 565 i narysowaniu kwadratu 10x10 pixeli.
    Gdy się przełączę w tryb 444, to teoretycznie działa. Wyświetla pixele zgodnie z kodowaniem 444 (te nowo wysyłane – stare zostają jakie były). Ale nie da się ustalić początku rysowania. Rysowanie zaczyna się od 0 w osi Y. To jeszcze mogę zrozumieć. Ale rysowanie w osi X postępuje zgodnie z wcześniej ustawionymi parametrami Xs i Xe.
    Nie ważne gdzie wcześniej narysowałem kwadracik w trybie 565. Rysowanie w trybie 444, nieważne jak ustawię nowe parametry Xs, Xe, Ys, Ye, zawsze zaczyna się od 0 do 176 w osi Y i od Xs do Xe ustawionych wcześniej dla kwadracika.
    Wyjaśnia to obrazek:
    LCD od Siemensa CX65 L2F50. Zmiana trybu z 565 na 444.

    Gdy wczesniej nie narysuje kwadracika to wysyje od 0 do 132 w osi X, czyli po całym ekranie.

    Domyślam się nawet o co chodzi ale jeśli to prawda to to będzie nienajmądrzejsze zachowanie się kontrolera wyświetlacza.
    Wyświetlacz może pracować w dwóch trybach: 16-to i 8-mio bitowym. Ale to dotyczy przesyłania danych obrazu, a w dodatku przy szynie równoległej. Niestety ten datasheet nic nie wspomina o komunikacji szeregowej, a przecież taką się najczęściej stosuje. W ogóle czy ktoś z Was stosował komunikację równoległą? Jak tak to ciekawe jak skoro wyświetlacz nie ma wyprowadzonych wszystkich 16-tu albo przynajmniej 8-miu linii danych.
    W kodach, na przykład Krystiana, po wysłaniu każdej komendy albo parametru do komendy następuje wysłanie bajtu o wartości 0. Może to mieć coś wspólnego z szyną 16-to bitową. Możliwe że kontroler także podczas pracy w trybie szeregowym potrzebuje wszystkich 16-tu bitów i stąd trzeba wysyłać to zero.
    I moim zdaniem po przełączeniu trybu na 444 zmienia się tez ilość danych jaką trzeba wysyłać do ustawiania parametrów Xs, Xe, Ys, Ye.
    Czy Wy także wysyłacie jakieś zera po każdym parametrze?

    Dodano po 1 [godziny] 10 [minuty]:

    Niestety przełączanie trybu na 565 w celu zmiany Xs, Xe, Ys, Ye i ponowne przełączanie na 444 tez nie działa.
    W ogóle to to 444 działa jakoś lipnie. Zanim zacznie się wysyłać dane trzeba „ustawić” Xs, …, Ye. Oczywiście takie „ustawianie” jak już wcześniej napisałem nic nie zmienia. Ale wysłać trzeba żeby zaczęło potem rysować.
    Po prostu nie tak ma wyglądać sterowanie w trybie 444. Tak jak ja zrobiłem działa, ale tylko na fuksa i to niezbyt dobrze.
    Może na początek pochwalił by się ktoś procedurami do wysyłania komend i parametrów (to znaczy komenda zawiera parametry ale u mnie są to dwie procedury które oczywiście muszą być wywoływane parami i dopiero razem tworzą prawdziwą komendę). Zobaczył bym czy wysyłacie jakieś zera i może jeszcze jakieś inne nietypowe rzeczy.