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

[Rozwiązano] [ATMEGA1284P][C] - FT810 nieprawidłowa komunikacja SPI

chicken123 24 Maj 2018 11:50 1233 12
  • #1 17237956
    chicken123
    Poziom 12  
    Witam,

    Niedawno wpadł w moje ręce wyświetlacz 4.3 cala z rezystancyjnym panelem dotykowym oraz procesorem graficznym FT810. Pierwsze co to poszukałem sobie informacji na ten temat oraz znalazłem książkę Pana T.Francuza oraz dołączone do niej biblioteki dla układów FT8xx. Przykłady są napisane dla AVR i ARM i wydawało by się że to formalność by napisać własną obsługę SPI na inny procesor. Niestety pomimo takich prostych rzeczy wyłożyłem sie i program nie działa - wyświetlacz nic nie wyświetla/nie uruchamia się.

    Czy mógłby ktoś przejrzeć mój kod oraz nakierować mnie gdzie mogłem popełnić błędy?

    Używam procesora ATmega1284p-AU wraz z makietką od HAOYU Electronics.

    Ze względu na ilość plików wrzucam w załączniku spakowany projekt zrobiony w eclipse.

    FT810_16MH...NewLIB.zip Download (135.95 kB)

    poniżej kod obsługi SPI z pliku "FT_SPI.H"

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


    oraz ustawienie parametrów wyświetlacza z pliku "FT_Platform.h"
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 17238635
    NoweMillennium
    Poziom 17  
    Założę się, ze nie sprawdzałeś oscyloskopem czy analizatorem logicznym jak wydjada transmisja. Gdybyś to zrobił, to nie używał byś postu B do ustawiania a D do kasowania bitu, np
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Definiujesz stałe
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ale ich nie używasz (przykład wyżej, zamiast PD używasz PB4) co zmniejsza czytelność kodu. Podobnie zadeklaruj sobie porty. Inaczej zginiesz w tym bałaganie.

    Dlaczego nie pracujesz ma maksymalnej prędkości? FT8xx mogą pracować do 25 czy 35MHz, pracujesz ma Fckl/4 (nie widzę nigdzie ustawienia bitu X2) czyli max 5MHz a mógłbys na 10MHz.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 17239011
    chicken123
    Poziom 12  
    Dziękuje za wskazanie błędów koledze. Te błędy to rzeczywiście moje niedopatrzenie i wynik bałaganu w kodzie.
    Po porawieniu błędów coś ruszyło bo mam niebieski ekran. Będę dalej drążył i postaram się uporządkować bałagan w kodzie.
  • Pomocny post
    #4 17239095
    NoweMillennium
    Poziom 17  
    chicken123 napisał:
    coś ruszyło bo mam niebieski ekran

    Od lat 90, niebieski ekran źle mi się kojarzy. Wcześniej dobrze (C-64).

    Proponował bym, poszukać biblioteki na Arduino. Jak ruszy przenieść na swoją platformę. Wiele osób tak robi.
  • #5 17239442
    chicken123
    Poziom 12  
    Witam,

    Po analizie kodu wyszło że niebieski ekran jest spowodowany
    tablicą
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    tę tablice wrzuca do Display Listy polecenie z funkcji Ft_BootupConfig()
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja main wygląda tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Niestety po wywołaniu funkcji Ft_BootupConfig() program nie realizuje Display Listy i nie wyświetla tekstu ani liczby.
  • #6 17239532
    NoweMillennium
    Poziom 17  
    chicken123 napisał:
    Po analizie kodu wyszło że niebieski ekran jest spowodowany
    tablicą

    Dla pewności zmień kolor na inny. Jeśli zmiana będzie poprawna to oznacza, ze komunikacja po SPI jest poprawna.
  • #7 17239600
    chicken123
    Poziom 12  
    Wypróbowałem to już i kolor się zmienia.

    [edit]
    Zauważyłem że brakuje polecenia Ft_Gpu_CoCmd_Dlstart(phost) by stworzyć nową DL ale niestety to nie rozwiązało problemu[/i]
  • #8 17239652
    NoweMillennium
    Poziom 17  
    chicken123 napisał:
    Wypróbowałem to już i kolor się zmienia.

    [edit]
    Zauważyłem że brakuje polecenia Ft_Gpu_CoCmd_Dlstart(phost) by stworzyć nową DL ale niestety to nie rozwiązało problemu[/i]

    Dlaczego nie chcesz skorzystać z bibliotek dla Arduino? Łatwo sie je przenosi na inne platformy. Najprościej zainwestować 30zł w Arduino UNO, na nim wypróbować bibliotekę, jak działa przenieść i po robocie.
  • #9 17242342
    chicken123
    Poziom 12  
    Kolego NoweMillenium juz powinieniem mieć z górki skoro komunikacja po SPI działa, ale niestety wyświetlanie Display Listy nie działa i to nie ważne czy arduino (biblioteka jest ta sama tylko rózni sie część odpowiedzialna za komunikację) czy inny procesor. Próbowałem sobie wygenerowac DL za pomoca EVE Screen Editor (generuje dokładnie identyczna biblioteke wraz z nazwami funkcji oraz "wyklikaną" DL) i niestety dalej procesor "staje" na funkcji Ft_BootupConfig() i nie wykonuje zadanej mu DL.
  • Pomocny post
    #10 17242526
    dasej
    Poziom 32  
    Witam.

    Konfigurację wysłałeś?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • Pomocny post
    #11 17242969
    tmf
    VIP Zasłużony dla elektroda
    Tak jak pisałem koledze w PW, problem leży w sekwencji:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    w funkcji ft_void_t Ft_BootupConfig().
    Jak widać sekwencja ta sprawdza odpowiedź chipu, kod 0x7C świadczy o poprawnej komunikacji. Skoro nie można odczytać tego kodu, to program utknie w tej pętli. Świadczy to o tym, że komunikacja po SPI jest napisana błędnie i program nie jest w stanie odczytywać danych z FT8xx. Należałoby się więc jeszcze raz przyjrzeć funkcjom komunikacji SPI.
  • Pomocny post
    #12 17243792
    NoweMillennium
    Poziom 17  
    SPI najłatwiej sprawdzić, podobnie jak USART, zapętlając MOSI z MISO.
  • #13 17252223
    chicken123
    Poziom 12  
    Po wielogodzinnych bojach i zarwanych nockach rozwiązaniem okazało się przerobienie biblioteki od producenta z dokumentów BRT_AN_006 oraz BRT_AN_007.

    Dziękuję kolegom za pomoc. Problem został rozwiązany.

    W załączniku dla potomnych działający projekt na ATmega1284P.
REKLAMA