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

[STM32][Eclipse] Sterowanie wyświetlaczem przez SSD1289

lolcat1 04 Lip 2011 18:43 13260 35
Najlepsze odpowiedzi

Jak sterować wyświetlaczem SSD1289 z STM32F103 przez FSMC w Eclipse i czy kod od ST7783 da się łatwo przerobić?

Najprościej podłączysz SSD1289 do STM32F103 przez FSMC w trybie interfejsu i80/8080; wtedy kontroler pamięci sam obsłuży zapis i odczyt, a do konfiguracji warto oprzeć się na dokumentacji FSMC, sekcji NOR Flash/PSRAM oraz nocie AN2790 [#9681867] Kod od ST7783 można potraktować jako bazę, ale trzeba dopasować inicjalizację sterownika, poprawnie ustawić rejestry oraz funkcje zapisu do RAM i pozycjonowania kursora [#9686046] Do uruchamiania najlepiej najpierw przetestować wyświetlanie jednego koloru tła, a dopiero potem przejść do bitmap i innych elementów [#9686046] Jeśli bitmapy wychodzą zbyt niebieskie, to problem jest w formacie obrazu — 24-bitowe bitmapy trzeba przekonwertować do R5G6B5, najlepiej eksportując je od razu w tym formacie [#9691962] Na start możesz też korzystać z Keila, bo darmowa wersja działa dla projektów do 32 kB [#9681867]
Wygenerowane przez model językowy.
  • #1 9681763
    lolcat1
    Poziom 10  
    Posty: 10
    Witam,
    Ostatnio dokonałem zakupu płytki prototypowej (ewaluacyjnej) z mikrokontrolerem STM32F103. Mini-STM32 -> http://arduinosolutions.com/index.php?route=product/product&product_id=90

    Chciałem przenieść się z 8-bitowych AVRów na coś mocniejszego, więc padło właśnie na to. Jednak od razu natrafiłem na dosyć poważny problem. Wprawdzie dostałem kody źródłowe kilku przykładów, ale są one napisane w środowisku Keil (MDK-ARM/uVision), które jest płatne i raczej nie uśmiecha mi się w nim pisać. Preferowałbym coś darmowego, najlepiej Eclipse.

    Szukałem bardzo długo i niestety nie znalazłem żadnych przykładowych kodów do obsługi LCD przez sterownik SSD1289 na STM32, z których mógłbym się uczyć.

    Czy mieliście może do czynienia z tym sterownikiem? Mam wrażenie, że jest niezwykle mało popularny. Dostałem również przykładowe kody do obsługi LCD przez inny sterownik (ST7783), czy da radę w łatwy sposób je zmodyfikować do tamtego sterownika?

    Będę wdzięczny za wszelkie lektury na temat i pomoc w temacie ;)
  • Pomocny post
    #2 9681867
    melersan
    Poziom 11  
    Posty: 71
    Pomógł: 3
    Ocena: 7
    Widzę, że procesorek ma FSMC, a wyświetlacz obsługuje interfejs i80 (8080). W związku z powyższym sterowanie nim będzie banalnie proste, gdyż FSMC będzie mu wrzucał wszystko co rozkażesz.

    Wskazana lektura to datasheet :) tam masz wszystko opisane na temat konfiguracji FSMC podpowiem, że interesuje Cię NOR Flash/PSRAM controller. Podłączenie jest w nocie AN2790
    http://www.icbase.com/hotic/html/docs/14811.pdf

    Poza tym Keil do kodu nie przekraczającego 32kB pamięci jest darmowy :)
  • #3 9684507
    lolcat1
    Poziom 10  
    Posty: 10
    Dziękuje, faktycznie przez FSMC to prosta sprawa.

    Jednak trafiłem na kolejny problem, siedziałem nad tym całą noc i nie mam pojęcia co robię źle.
    Korzystam obecnie z nieco zmodyfikowanej biblioteki GLCD, niestety dokumentacja jest po chińsku.

    Tak wygląda metoda wrzucająca na wyświetlacz bitmapę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tutaj jest plik nagłówkowy z bitmapą (dołączam dodatkowo jako załącznik)
    http://paste.org/pastebin/view/35779

    Natomiast w main, funkcję wywołuję tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Efekt to biały pasek po lewej stronie ekranu. Wydaje mi się, że sama metoda do wyświetlania jest zła. Co poradzić?

    Nazwa tablicy w pliku załączniku jest inna, ale w kodzie jest ona poprawna.
    Załączniki:
    • pig_glcd.h (57.88 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #4 9686046
    melersan
    Poziom 11  
    Posty: 71
    Pomógł: 3
    Ocena: 7
    Powodem może być niepoprawna konfiguracja rejestrów sterownika.

    poza tym nie pokazałeś jak wygląda funkcja zapisu do ramu i ustawienia kursora. Ja używam takich funkcji:

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


    W celu testowania funkcji skup się na ustawieniu tła, tzn zapisuj do ramu jeden kolor, jak to zadziała baw się we wskaźniki ;)

    Powodzenia,
    Damian
  • #5 9689571
    lolcat1
    Poziom 10  
    Posty: 10
    Dziękuję, faktycznie ten powyższy kod sporo mi pomógł znaleźć błąd :)
    Teraz bezproblemowo wyświetlam bitmapy z plików nagłówkowych, ale są one mocno niebieskie. Wygląda to tak, jakby patrzyło się na wyświetlacz przez niebieską folię półprzeźroczystą. Wyświetlanie tekstu poprzez funkcje biblioteki jest okej, kolory są normalne. Problem tyczy się jedynie bitmap z tablic. Podejrzewałem program do konwersji, ale przy innym miałem identyczną sytuację.
  • #6 9691962
    melersan
    Poziom 11  
    Posty: 71
    Pomógł: 3
    Ocena: 7
    bitmapy rozumiem 24bitowe. W tym przypadku należy zastosować konwersję na kolor z 24bit na R5G6B5. Najlepiej taką bitmapę eksportować z photoshopa w tym formacie ;)
  • #7 9968059
    sepako
    Poziom 15  
    Posty: 112
    Pomógł: 6
    Ocena: 28
    Witam
    Konfiguracja sprzętowa jak w powyższym temacie natomiast kod jak w temacie https://www.elektroda.pl/rtvforum/topic2088263.html#9923843. Mam problem z inicjalizacją wyświetlacza. Błąd występuje w momencie pierwszego zapisu do LCD funkcją LCD_WrReg(u8 reg, u16 data)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W momencie wykonania instrukcji mov.w r3, #1811939328 ; 0x6c000000
    następuje skok do:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Debuger ląduje w pliku vectors.c na static void __Default_Handler(void)
    {
    while (1);
    }

    Dlaczego zapis rejestru R3 wartoscia 0x6c000000 powoduje zawieszenie wykonania programu?
  • #8 9968093
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Błąd powodują instrukcje poniżej:
    200004b0: strh r0, [r3, #0]
    200004b2: strh r1, [r3, #2]
    Jest to zapis pod adres 0x6c000000, czyli że wyświetlacz musisz mieć podłaczony do FSMC, tyle że pewnie jest ono nieskonfigurowane - zapis pod nieistniejący adres wywołuje któryś tam wyjątek.

    4\/3!!
  • #9 9968211
    sepako
    Poziom 15  
    Posty: 112
    Pomógł: 6
    Ocena: 28
    Konfiguracje mam taką:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wiec wynikalo by z tego że dla tego wyswietlacza powinna byc inna.
  • #10 9968370
    Konto nie istnieje
    Poziom 1  
  • #11 9968596
    desperadoes
    Poziom 10  
    Posty: 10
    @lolcat1 również posiadam taka płytke
    możesz wstawić poprawiony kod do wyświetlania bitmamp ??
  • #12 9974522
    sepako
    Poziom 15  
    Posty: 112
    Pomógł: 6
    Ocena: 28
    Zestaw ten poprawnie działa przy ustawieniach (przynajmniej u mnie)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W moim przypadku DeviceCode = 0x8989
    Oraz poprawnie wspolpracuje z biblioteka poniżej. Funkcje inicjacyjne można pominąć używając powyższych ustawień.
    Załączniki:
    • GLCD.c (37.62 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • GLCD.h (5.81 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #13 9979380
    desperadoes
    Poziom 10  
    Posty: 10
    udalo sie wyswietlic bitmape ;p
    u mnie wsystko ladnie pokazuje konwersje robie za pomoca image2lcd
  • #14 10500555
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    Witam serdecznie ,

    Postanowiłem się przyłączyć do tematu ponieważ mój problem jest ściśle związany z przypadkiem tu opisywanym,

    W końcu znalazło się troszkę czasu żeby zabrać się za oprogramowywanie STMa ale jak to zwykle bywa początek nie był aż taki prosty..
    Posiadam płytkę HY-mini z STM32F103VCT6, oraz Jtag-lock-pick kolegi Freddie'go
    całość obsługiwana z poziomu eclipse przy pomocy ocd i gdb.
    uruchomienie przykładów Freddiego przysporzyło mi na początku troszkę kłopotów ale chyba wynikało to głównie z mojego braku doświadczenia w obsłudze eclipse (troszkę innej wersji niż ta opisana w tutorialu) ale do rzeczy.

    Postanowiłem uruchomić LCDka który znajduje się na płytce HY-mini ale pozostając przy minimalistycznym projekcie Freddiego tzn bez standardowych bibliotek. Troszkę pogrzebałem w dokumentacjach ST (swoja droga tragiczne jeśli by je porównać do dokumentacji TI - np. TMS320F28x , czy nawet Atmela) poskładałem wszystko razem to jest bibliotekę GLCD z konfiguracja "ręczna" FSMC i gpio. Niestety jak to zwykle bywa nie zadziałało. a ze oryginalnie wgrane demo uCOS działało bez zarzutów to oczywiście wina może tylko i wyłącznie leżeć po stronie softu poskładanego przeze mnie.
    siedziałem pol nocy żeby na wszelkie możliwe sposoby to uruchomić ponieważ tych bibliotek konfiguracji SSD1289 są setki w internecie to było na czym się oprzeć.. choć trochę w ciemno bo hardwarowa konfiguracja tego LCDka jest chińską wiedzą tajemna ponieważ akurat kontrolera wraz z konfiguracja jego pinów nie ma na schemacie HY32D.

    Przerobiłem nawet przykłady załączone na DVD do płytki tak aby można było je uruchomić z poziomu eclipse ale to tez nic nie dało .. cały czas pikny biały ekran..
    aż to nad ranem niespodzianka po zasileniu płytki program działa ... hym..ale..

    no wiec program działa wyświetla itd .. ale nie zawsze i tylko przez jaki czas..
    wygląda to jak by był skonfigurowany do pracy synchronicznej ale częstotliwości są delikatnie różne w związku z czym po jakimś czasie rozjeżdża się wszystko na ekranie i wracamy do białego ekranu.. do czasu aż odłączymy zasilanie, pozwieramy wszystkie piny zasilające, odmówimy modlitwę do Murphy'ego itd. :)

    tak "normalnie" po uruchomieniu na JTAGu jeszcze ani razu mi nie zadziałało.
    próbowałem wielu zmian w ustawieniach "czasowych" FSMC (oczywiście również z tymi które wychodzą na podstawie obliczeń opartych na dokumentacjach SSD1289, LCD gdzieś z internetu, AN2790 itd)

    żeby trochę zobrazować problem nakręciłem krotki (4min) filmik który obrazuje problem :)
    http://www.youtube.com/watch?v=c_bt6u0L5As&list=HL1328466113&feature=mh_lolz
    (uwaga muzyka dodana w tle w celach rozrywkowych - bo filmik jest jednak dosyć nudny;P jeśli ktoś nie przepada proszę od razu wyciszyć)

    jakieś pomysły?

    PS. na pewno pojawi się pytanie o kod oczywiście na życzenie mogę go zamieścić ale korzystałem już chyba ze wszystkiego wiec podejrzewam jakiś inny problem.

    EDIT:
    dodałem polskie krzaki do posta bo zupełnie o tym zapomniałem.
  • #15 10506526
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Zacznijmy może od tego w Twojej kompilacji:

    G_LCD.c:348:7: warning: suggest parentheses around '-' inside '>>' [-Wparenthese
    s]
    G_LCD.c:348:7: warning: suggest parentheses around comparison in operand of '&'
    [-Wparentheses]


    Opis problemu sugeruje że timingi są albo na granicy albo po prostu w końcu coś rozwala Ci transmisję jakimś "impulsowym zakłóceniem". Jeśli masz sporo przerwań, to postaraj się maxymalnie je ograniczyć <:

    4\/3!!
  • #16 10506820
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    Dzięki za odzew Freddie,

    Rzeczywiście w tej chwili timingi są dość wyżyłowane ale jak wspominałem nawet z nimi czasami się uruchamia i działa bardzo sympatycznie szybko. Nie mniej jednak już od początku próbowałem z "typowymi", wolnymi a nawet bardzo wolnymi ustawieniami FSMC jak i przerw przy konfiguracji SSD1289 i skutek był zawsze ten sam. Swoją drogą na filmku można zauważyć ze te ustawienia czasowe są dość wolne bo funkcja LCD_Clear(Red); ewidentnie powoli zapisuje piksel po pikselu co objawia sie płynnym przysłanianiem starego obrazu.

    co do przerwań to mam jedynie SysTick'a na 1ms
    no i zegary FSMC i SRAM (ale brak obsługi/wykorzystania przerwań)

    w załączniku jest kod źródłowy (projekt w eclipse+open OCD+ gdb) oparty na przykładzie Freddiego

    EDIT:
    Polskie krzaki:)
    poprawiłem kwestie nawiasów (jakiś chińczyk się nie postarał;P - funkcje wyświetlania sa prosto z GLCD) w funkcji wskazanej przez Freddiego niestety nie ma poprawy :)
    Załączniki:
    • STM32F103VCT6_HelloWorld.zip (3.14 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 10516969
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    rzuciłem jeszcze raz okiem na sygnały wychodzące do LCDka i natknąłem się na interesujące zjawiska.. mianowicie bardzo nie ładny sygnał D11 (FSMC) (NewFile0) (CH1 CS,CH2 D11) przy pierwszym wystąpieniu w czasie inicjalizacji ale mimo tego objawu inicjalizował się poprawnie..
    [STM32][Eclipse] Sterowanie wyświetlaczem przez SSD1289
    później wysyłane dane wyglądały całkiem normalnie (NewFile1) - LCD działał poprawnie..
    [STM32][Eclipse] Sterowanie wyświetlaczem przez SSD1289

    a jak obraz na wyświetlaczu zaczął się sypać to sygnały jak by były lekko podciągane wraz z CS = 1; nie powinno to być w zakresie tego co rozpoznaje LCD, nie mniej jednak jest to moim zdaniem dziwne dlaczego ma to związek z poprawnym/niepoprawnym działaniem LCD
    [STM32][Eclipse] Sterowanie wyświetlaczem przez SSD1289
    Jakieś pomysły koledzy?
  • #18 10517261
    sepako
    Poziom 15  
    Posty: 112
    Pomógł: 6
    Ocena: 28
    Witam
    Mam identyczny zestaw, po skompilowaniu programu i załadowaniu do procesora (program umieściłem w pamięci RAM i uruchamiam z jtaga) nie zauważyłem żadnych nieprawidłowych objawów o których pisałeś.
  • #19 10517342
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    o to już przynajmniej wiadomo że jest to kwestia hardware'owa (btw. nawet jak program chodził 10-15min to wszystko było w porządku?)
    Jeśli tak to zostaje mi tylko jedno podejrzenie, które wcześniej wydawało mi się nie realne .. ale o tym później jak będę miał chwilkę,

    Dzięki za test!:)

    Swoją drogą mógłbyś wrzucić wersje programu którą zapisujesz do ramu? byłbym bardzo wdzięczny to oszczędziło by mi setek niepotrzebnych cykli :)

    Pozdrawiam
  • #21 10517713
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    a nie jest to tak, że jak nie zapisuję do pamięci (FSMC) tzn jak CS jest podciągany do góry to szyna danych przestawia się na wejście? a następnie po jakimś czasie powstaje różnica potencjałów między masą kontrolera LCD a masą procesora i D=0 z punktu widzenia procka jest kilka set miliwoltów, a z punktu widzenia kontrolera dane z procka są ujemne lub mają za niską wartość HIGH.
  • #22 10517834
    sepako
    Poziom 15  
    Posty: 112
    Pomógł: 6
    Ocena: 28
    Oto Twoja wersja troche przerobiona tak aby poszła z ram czyli modyfikacja main zmienilem też skrypt linekera i makefile. Ladujesz to przez
    load_image C:\\ARM\\...\\flash.bin 0x20000000
    a odpalasz
    resume 0x20000000
    Załączniki:
    • HelloWorld.zip (1.47 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #23 10518009
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    Przechodzę podobne boje z wyświetlaczem HY35A na SSD1693. U mnie nie działa procedura odczytu danych z wyświetlacza.
    Objaw jest taki, że procedura odczytu dany zwraca mi wartości jakie były ostatnio wpisywane (jakby pamiętała ostatni stan?).
    Dziwna sprawa jest taka, że na początku miałem błąd w ustawieniach GPIO i w ogóle nie aktywowałem CS wyświetlacza
    a mimo to wszystko się wyświetlało prawidłowo. Poniżej przedstawiam procedury odczytu i ich asemblerowe rozwinięcie.
    Pierwsza LCD_X_Read01_16 - pojedynczy odczyt działa prawidłowo ale odczyt paczki już jest jak powyżej (nawet pierwszy odczyt jest już nieprawidłowy)

    
       157: /********************************************************************* 
       158: * 
       159: *       LCD_X_Read01_16 
       160: * 
       161: * Purpose: 
       162: *   Read from controller, with A0 = 1 
       163: */ 
       164: U16 LCD_X_Read01_16(void) { 
    0x08000A70 4770      BX       lr
       165:   return (LCD_DAT16); 
    0x08000A72 F04F40D8  MOV      r0,#0x6C000000
    0x08000A76 8840      LDRH     r0,[r0,#0x02]
       166: } 
       167:  
    
    
       181: /********************************************************************* 
       182: * 
       183: *       LCD_X_ReadM01_16 
       184: * 
       185: * Purpose: 
       186: *   Read multiple bytes from controller, with A0 = 1 
       187: */ 
       188: void LCD_X_ReadM01_16(U16 * pData, int NumWords) { 
    0x08000A8E 4770      BX       lr
       189:   for (; NumWords; NumWords--) { 
    0x08000A90 2900      CMP      r1,#0x00
    0x08000A92 D006      BEQ      0x08000AA2
       165:   return (LCD_DAT16); 
    0x08000A94 F04F42D8  MOV      r2,#0x6C000000
    0x08000A98 8853      LDRH     r3,[r2,#0x02]
       190:     *pData++ = LCD_X_Read01_16(); 
       191:   } 
    0x08000A9A F8203B02  STRH     r3,[r0],#0x02
    0x08000A9E 1E49      SUBS     r1,r1,#1
    0x08000AA0 D1FA      BNE      0x08000A98
       192: } 
    




    W trakcie działania programu nic nie zmienia ustawień FSMC ani GPIO a inny program który nie korzysta z odczytu pakietowego działa prawidłowo więc myślę, że podłączenia są prawidłowe.

    Dzisiaj mam zamiar zobaczyć na oscyloskopie co się dzieje
  • #24 10518093
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    thug napisał:
    a nie jest to tak, że jak nie zapisuję do pamięci (FSMC) tzn jak CS jest podciągany do góry to szyna danych przestawia się na wejście? a następnie po jakimś czasie powstaje różnica potencjałów między masą kontrolera LCD a masą procesora i D=0 z punktu widzenia procka jest kilka set miliwoltów, a z punktu widzenia kontrolera dane z procka są ujemne lub mają za niską wartość HIGH.

    Raczej ciężko żeby powstała taka różnica na masie, która jest połączona (jest?)... Może kilka mV, ale nie kilkaset.

    4\/3!!
  • #25 10522462
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    rzeczywiście z masą nie ma problemu - muszę przyznać, że jestem już chyba bardzo zdesperowany ;) bo dzięki koledze sepako można stwierdzić definitywnie iż nie jest to błąd software'owy. Równocześnie pamiętam, że demo soft działał zawsze prawidłowo (tylko nie wiem jak długo bo nigdy się nim dłużej nie bawiłem, a odpaliłem go może ze 3 razy :) ) a hardware'owo nic nie zmieniałem (poza do lutowaniem pinhead'era - ale wykluczam to jako przyczynę bo przy takiej operacji amator nie był by nawet w stanie uszkodzić procka, a ja mam doświadczenie nawet w lutowaniu takich układów jak ten procesor)

    Bez wyświetlacza wszystkie sygnały na data wyglądają dobrze ale to chyba właściwie nic nie znaczy.. :/

    PS. bootowanie z RAMu działa wyśmienicie - dzięki za tipa :)
  • #27 10523384
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    Wykonałem parę obserwacji przebiegów. U mnie tak samo jak u kolegi thug przebiegi sygnałów sterujących są prawidłowe. Dane jednak mają dziwne przebiegi i tak samo zmiana CS powoduje dziwne podciągnięcia i oscylacje na bitach danych. Nigdy nie ma pełnej "1". Jak pisałem wcześniej mam tylko problem podczas odczytu - sterownik inny ale problemy podobne. Objaw na oscyloskopie jest taki jakby prądowo nie "wydalał" LCD.
    Na działającym programie demo, przebiegi są bez zastrzeżeń.
    Moje podejrzenia są z goła odwrotne: sprzęt OK, tylko coś skopane w programie - konkretnie to podejrzewam timing FSMC. Mam zamiar się temu przyjrzeć właśnie pod kontem wymaganych czasów. Doczytałem dokładnie pdfa dla mojego SSD1963 ..jest tam napisane drobnym druczkiem ".. pierwszy odczyt z paczki nie może być szybciej niż.." Ustawienia ściągnąłem z dema "chinczyków"... może były na granicy?
    ... thug na str63 pdfa dla swojego LCD masz podane czasy porównaj czy masz prawidłowe ????
    // też jestem podłamany ..ze dwa tygodnie już na tym siedzę :/



    mam jeszcze pytania: co jest wymuszone na liniach danych w czasie gdy FSMC z nich nie korzysta.. L, H, HiZ?
    i czy można ( w jaki sposób) włączy rezystory podciągające w strukturze GPIO podczas pracy portu w trybie AF_PP?
  • #28 10531882
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    Niestety nie mam oryginalnego wsadu demo żeby porównać to w podobny sposób jak kolega (swoją drogą możesz zmierzyć na oscyloskopie mniej więcej jakie tam są czasy dostępu) bo te w źródłach programu uCOS demo z Bootloaderem są szybsze niż wynikają z obliczeń, ale sam próbowałem we wszystkich kierunkach, w trybie SRAM jak i NOR Flash.
    Co do odczytu to z tego co przeczytałem w tym pdfie do SSD1289 to przy odczycie czasy muszą być oczywiście dużo dłuższe no i przy odczycie z ramu trzeba odczytać najpierw dummy data.
    Ja natomiast nie mam żadnych problemów z odczytem sygnatury kontrolera LCD.

    oczywiście może to być zwyczajnie uszkodzony procek lub LCD, gdyby ktoś miał oryginalny wsad demo to mógłbym sprawdzić czy to demo rzeczywiście działało poprawnie na dłuższą metę, jak i porównać timing'i.

    nie wiem jak jest z tymi alternatywnymi (bo np wypadku szyny danych one muszą być tez czasami wejściami) funkcjami ale normalnie PP (push-pull) to półmostek wiec nie trzeba nic podciągać.
  • #29 10533094
    starob
    Poziom 29  
    Posty: 1088
    Pomógł: 128
    Ocena: 137
    Czasy które pomierzyłem:
    CS - ok 175ns, WR - 80ns, RD -175ns. Posiadam też zestaw Mini z SSD1289 i demo działa bez zarzutu godzinami. Mogę Ci je podesłać, tylko w jakiej formie chciałbyś?

    Najprościej zrzucić wszystko na uszkodzony sprzęt, sam sobie tak wytłumaczyłbym gdyby nie działające demo.
    Obecnie mam sytuacje taką:
    demo
    1.rozbiegówka napisana przez producenta w StdLib
    2.inicjalizacja FSMC i LCD moja własna
    3.nieskończona pętla zapisu i odczytu LCD
    Zapis i odczyt odbywa się prawidłowo

    mój program
    1.moja własna rozbiegówka napisana bez użycia StdLib
    2.inicjalizacja FSMC i LCD moja własna (dokładnie taka sama j/w)
    3.nieskończona pętla zapisu i odczytu LCD (j/w))
    Zapis prawidłowy.
    Przy odczycie objawy są takie: wyświetlacz jednak wystawia oczekiwane dane jednak nie potrafi ustawić odpowiednich poziomów na magistrali ponieważ w jakiś nie wytłumaczalny dla mnie sposób podczas odczyt pojawiają się ostatnio zapisywane. Tego jestem pewien bo robiłem też próby z wypiętym LCD. Podczas odczytu pojawiają ostatnio zapisywane dane.
    Na razie nie wiem jak to możliwe i co ustawiłem źle w rozbiegówce (bo tylko tym teraz różnią się te dwa programy) ale dojdę to tego :). Może masz jakiś pomysł - nawet bez sensu? ..być może jakieś inne urządzenie jednocześnie "odpowiada" tylko nie mam pojęcia jak to sprawdzić bo trochę tego wisi na magistrali?
  • #30 10533475
    thug
    Poziom 12  
    Posty: 58
    Ocena: 2
    postaram się to porównać u mnie jak będzie jakiś efekt :)

    Co do dema to hex, bin , elf najlepiej bo to mogę bezpośrednio przez OpenOCD wrzucić :)

    Jaką Ty masz płytkę uruchomieniową ? HY-mini tylko z wyświetlaczem HY-35A czy jeszcze coś innego np. RedBull ?
    bo na mini nic nie ma poza wyświetlaczem na FSMC. Jeśli masz tego RedBull'a to wisi USB, 2xFlash, SRAM , chyba tez ethernet.. podpatrz czy przypadkiem nie wystawiasz CSa któregoś przez ten trick z dekodowaniem.. swoją drogą na tej płytce sygnał CS musi wychodzić jednocześnie z RS bo CS jest na liniach adresowych, a nie na NE wiec może tu jest jakiś problem?

Podsumowanie tematu

✨ W dyskusji poruszono problem z obsługą wyświetlacza LCD sterowanego przez kontroler SSD1289 na płytce prototypowej STM32F103. Użytkownik poszukiwał darmowych przykładów kodu w Eclipse, ponieważ dostępne materiały były w płatnym środowisku Keil. Uczestnicy wymienili się doświadczeniami związanymi z konfiguracją FSMC, rejestrami sterownika oraz problemami z wyświetlaniem bitmap. Wskazano na konieczność konwersji kolorów bitmap z 24-bitowych na format R5G6B5 oraz na znaczenie poprawnej konfiguracji pinów GPIO. Ostatecznie, rozwiązanie problemu z odczytem danych z wyświetlacza okazało się związane z nieskonfigurowanymi pinami, co prowadziło do błędnego adresowania pamięci.
Wygenerowane przez model językowy.
REKLAMA