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

LPC1114+NT7538H - Wyświetlacz nie reaguje

docencior 20 Wrz 2014 17:48 804 8
  • #1 20 Wrz 2014 17:48
    docencior
    Poziom 10  

    Witam

    Chciałem napisać dla siebie własną bibliotekę obsługującą jednokolorowy wyświetlacz 128x64 ze sterownikiem NT7538H i po około 20 godzinach pracy zwątpiłem i postanowiłem poprosić o pomoc.

    datasheet

    Oto datasheet do tego kontrolera. Może zanim wrzucę schemat połączeń i kod zadam jedno pytanie.
    Mój problem polega na tym, że wyświetlacz kompletnie nie reaguje na żaden rozkaz. Jest całkowicie pusty (działa tylko podświetlenie). Dlatego pomyślałem, że jest po prostu wadliwy. Zmierzyłem napięcie z wbudowanego konwertera dc na wyjściach V0-V4 i wskazują jakieś 0,3V. Moje pierwsze pytanie brzmi. Czy podłączając tylko zasilanie do takiego wyświetlacza na wyjściach V0-V4 nie powinno się pojawić napięcie? Jeśli jest to zupełnie normalne zjawisko i wewnętrzny konwerter trzeba uruchomić odpowiednim rozkazem to wrzucę mój kod. Na początku chciałbym się upewnić, że wyświetlacz nie jest wadliwy.


    EDYCJA.

    Plik cr_startup_lpc11xx.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Plik initlcd.h
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Plik initlcd.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Plik main.c
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 8
  • #2 20 Wrz 2014 19:33
    michalko12
    Specjalista - Mikrokontrolery

    To pisałeś kod i nie wiesz czy "jakimś rozkazem" trzeba coś uruchomić? To co ty tak naprawdę pisałeś? Pisałeś czy "kopiuj wklej" z netu bez wnikania co ten kod robi?

    Co do twojego pytania to odpowiedź brzmi "TAK". Trzeba wysłać odpowiednie rozkazy żeby wewnętrzny generator napięć zaczął pracować. Jest to związane z trybem oszczędzania energii.

    0
  • #3 20 Wrz 2014 21:04
    docencior
    Poziom 10  

    W takim razie się poddaje i wrzucam wszystkie funkcje, które według mnie powinny uruchomić wewnętrzny generator. Po wywołaniu funkcji initLCD nic się nie dzieje. Dodam, że pracuje na LPC1114 taktowanym zegarem wewnętrznym 12MHz.

    0
  • #4 20 Wrz 2014 22:10
    BlueDraco
    Specjalista - Mikrokontrolery

    Czy włączyłeś blok IOCON?

    0
  • #5 20 Wrz 2014 22:49
    docencior
    Poziom 10  

    BlueDraco napisał:
    Czy włączyłeś blok IOCON?


    Jeśli chodzi o poniższą linie to nie, nie dodałem. Ale już dodaje. Niestety wyświetlacz dalej nie reaguje.
    Code:

    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);

    0
  • #6 20 Wrz 2014 23:00
    michalko12
    Specjalista - Mikrokontrolery

    Przede wszystkim wstaw cały kod - inicjalizacja procesora, pętla main, startup, definicje wejść/wyjść (A0L,CSL,D1H...). Będziemy się tutaj wałkować cały tydzień, a okaże się, że błąd jest gdzie indziej.

    I używaj znaczników SYNTAX przy wklejaniu kodu.
    https://www.elektroda.pl/rtvforum/topic349089.html

    0
  • #7 21 Wrz 2014 09:51
    docencior
    Poziom 10  

    Zgodnie z zaleceniem dodałem cały kod.

    0
  • #8 21 Wrz 2014 13:00
    michalko12
    Specjalista - Mikrokontrolery

    Skomplikowałeś do granic możliwości ten kod. Ciężko wyłapać w nim jakikolwiek błąd.
    Jeszcze jedną niewiadomą jest sprzętowa konfiguracja tego wyświetlacza na pinach.

    Jako sekwencję inicjalizującą wyświetlacz wyślij do niego zawartość tej tablicy

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #9 21 Wrz 2014 19:12
    docencior
    Poziom 10  

    Udało się uruchomić wewnętrzny konwerter

    Błąd był tu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Powinno być tak
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zwykłe gapiostwo z mojej strony...

    Ale wyświetlacz jak był pusty tak jest pusty.
    Stąd kolejne pytanie o wyświetlanie danych. Czy jest potrzebny jakiś trigger żeby dane z RAMu wyświetlacza wysłać na sam wyświetlacz? Datasheet mówi, że jest tam jakiś bufer ale jak zapalić jakieś piksele? Tego już tam nie umieścili...
    Jest tam graf jakiejś prostej sekwencji (write data -> display ON/OFF) ale to nie działa.

    0