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 graficzne z kontrolerem S1D15705

13 Lut 2011 12:50 3003 8
  • Poziom 2  
    Witam!
    Posiadam wyświetlacz graficzny 162x64 z kontrolerem S1D15705, dokumentację kontrolera Link oraz prostą instrukcję obsługi wyświetlacza: Link.
    Mam problem z poprawną inicjalizacją wyświetlacza. Są już na forum tematy na ten temat, jednak żaden z nich nie odpowiada mojemu problemowi.
    Komunikacja z wyświetlaczem przebiega poprawnie i udaje mi się "coś" wyświetlić, jednak wygląda to tak jak na załączonym obrazku (w tym przypadku wszystkie piksele powinny być zapalone).
    LCD graficzne z kontrolerem S1D15705
    Generalnie wyświetlając np. poziome paski, piksele na górze się nie świecą, na dole świecą się za bardzo (nawet tam gdzie nie powinny), a po środku jest mniej więcej to co chcę uzyskać.

    Moja funkcja inicjalizująca (mikrokontroler STM32):
    Code:
    void GLCD_Init(void)
    
    {
       uint8_t cmd[] = {
             0xE1,   // Power Save Reset
             0xAB,   // Built-in Oscillator Curcuit ON
             0xA3,   // LCD Bias Set (1/7)
             0xA0,   // ADC Select (normal rotation)
             0xC0,   // Common Output State Selection (normal rotation)
             0xE4,   // n-Line Reversal Drive Reset
             0x26,   // V5 Voltage Adjusting Internal Resistance Ratio Set
             0x81,   // Electronic Control Mode Set
             0x13,   // Electronic Control Register Set
             0x2A   // Power Control Set
       };

       InitGPIO();

       ClearRst();
       delay_ms(100);
       SetRst();
       delay_ms(10);

       uint8_t i, j;
       for (i=0; i<sizeof(cmd)/sizeof(cmd[0]); ++i) {
          GLCD_Cmd(cmd[i]);
       }

       GLCD_Cmd(0x40); // Start line 0
       for(i=0xB0; i<0xBA; ++i) {
          GLCD_Cmd(i); // Set page
          GLCD_Cmd(0x10); // Set column
          GLCD_Cmd(0x00);
          for(j=0; j<168; ++j)
             GLCD_WriteData( ((i&0x01)==0x01) ? 0x00 : 0xFF );
       }
       GLCD_Cmd(0xAF); // Display ON

    }

    Na chłopski rozum problem powinien leżeć gdzieś w tych instrukcjach
    Code:
    0x26,   // V5 Voltage Adjusting Internal Resistance Ratio Set
    
    0x81,   // Electronic Control Mode Set
    0x20,   // Electronic Control Register Set
    0x2A   // Power Control Set
    jednak próbowałem już chyba wszystkich kombnacji i nie udało mi się wyeliminować tego efektu. Ciekawe jest to, że zgodnie z instrukcją (i innymi tematami na elektrodzie) komenda Power Control Set powinna mieć wartość 0x2B co wg. dokumentacji skutkuje włączeniem także "V/F Curcuit" (?), jednak z takim ustawieniem wyświetlacz w ogóle nic nie pokazuje.

    Moje pytania do Was:
    Czy ktoś spotkał się już z taką sytuacją i może coś na ten temat napisać lub wie co może być nie tak?
    Czy może to być usterka wyświetlacza (np. uszkodzony "V/F curcuit" czymkolwiek by nie był)?
    Czy ktoś mógłby się podzielić informacją, jakimi instrukcjami sam przeprowadza inicjalizację takiego wyświetlacza?
  • Poziom 2  
    Niestety przedstawiony tam sposób inicjalizacji powoduje, że na wyświetlaczu nic się nie pokazuje (wspomniana wcześniej komenda "Power Control Set" o wartości 0x2B).
    Z tym pokazaniem włanego sposobu bardziej chodziło mi o jakąś magiczną sztuczkę, o której nic nie ma w instrukcji :) lub inicjalizację przy użyciu komedy "Power Control Set" o wartości 0x2A lub 0x2E (czyli z wyłączonym "V/F Curcuit", bo tylko tak cokolwiek się na wyświetlaczu pokazuje).
  • Poziom 2  
    Zdobyłem kolejną sztukę tego wyświetlacza i tym razem powyższa procedura inicjalizacji działa z ustawieniem Power Control Set na 0x2B (czyli tak jak powinno wg. instrukcji być). Można więc pzypuszczać, że poprzednia sztuka miała jakąś wadę.

    Niestety nie wszystko poszło gładko, ponieważ mam kolejny problem. Tym razem dotyczy on regulacji kontrastu. Przy domyślnym ustawieniu (V5 Voltage Adjusting: 0x26 oraz Electronic Control: 0x81, 0x13) piksele są ledwo widoczne. Zmiana "V5 Voltage Adjusting" na 0x27 (maks. wartość) znacznie to poprawia, ale i tak efekt jest daleki od oczekiwanego. Najdziwniejsze dla mnie jest to, że wg. instrukcji regulacja kontrastu powinna się odbywać za pomocą komendy Electronic Control Set, natomiast zmiana wartość tego parametru nie powoduje żadnego widocznego efektu. Ma ktoś może pomysł, dlaczego tak się dzieje?
  • Poziom 16  
    pokaż zdjęcie, może ten wyświetlacz nie potrafi lepiej świecić :)
  • Poziom 2  
    Problem rozwiązany, winę ponosił idiotyczny błąd w oprgramowaniu. Na początku procedury wysyłającej komendę miałem wstawioną instrukcję WaitForReady(), która odczytywała status wyświetlacza. Oczywiście psuło to cały cykl wysyłania komend 2-bajtowych, a ustawianie kontrastu taką komendą jest.
    Byłem przekonany, że w programie jest wszystko ok, bo komunikację testowałem dokładnie wcześniej i działało, jednak oczekiwanie na gotowość wstawiłem później walcząc z tym zepsutym wyświetlaczem.
    Dzięki za poświęcony czas.
  • Poziom 1  
    Witam.
    Jestem nowy i akurat mam problemy z tematem tego lcd na stm32. Jak mają by ustawione porty, tzn. komendy dla STMów, ponieważ mam problem z przeniesieniem kodu w języku C z AVR na STM32 (definiowanie portów w pliku nagłówkowym) posiłkowałem się Twoim kodem, jak i innymi na tym forum (związane z tematem tego graficznego lcd). Korzystałem również z książki Pana K. Paprockiego i skończyły mi się pomysły.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 10  
    Witam

    Obecnie staram się wyświetlić coś na takim ekranie i mam kilka pytań:

    1. Które komendy minimalnie trzeba przesłać do LCD, żeby można było zacząć coś na nim wyświetlać?
    2. Czy konieczne jest sterowanie sprzętowym resetem wyświetlacza? W moim przypadku podpiołem go do VCC przez rezystor podciągający, ale we wszystkich kodach programu znajduje na początku resetowanie sprzętow? Czy jest ono konieczne?
    3. Jak wygląda wyświtlacz po samym podpięciu zasilania? W moim przypadku wszystkie piksele się świecą? To dobry czy zły znak?

    Z góry dzięki za odpowiedź.