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.

[STM32F4][KS0108][KEIL] Wyświetlacz nie odpowiada/reaguje.

Rossi90 14 Cze 2012 17:53 2638 25
  • #1 14 Cze 2012 17:53
    Rossi90
    Poziom 9  

    Witam,
    Mam problem z obsługą wyświetlacza 128x64 zgodnie z ks0108 na mikrokontrolerze STM32F4 . Po poprawnym przyłączeniu do układu wyświetlacza, zabrałem się za oprogramowanie tego mikrokontrolera. Mój schemat podłączenia wyświetlacza wygląda tak :
    RS (Di) - PB1
    R/W - PE7
    E - PE9
    CS1 - PB2
    CS2 - PE8
    RST - PE10
    Data - PA0 do PA7

    I mam sterownik:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Oraz sterownik:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    I funkcje opóźnień:
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Po zainicjowaniu wyświetlacza init_ks0108(); oraz wywołaniu przykładowej funkcji puts_ks0108("Hello World!"); niestety nie ma rezultatu na wyświetlaczu. Proszę bardzo o pomoc i z góry dziękuję.
    Pozdrawiam

    0 25
  • #2 14 Cze 2012 19:09
    stanleysts
    Poziom 27  

    Jak masz skonfigurowany zegar, bo te delay'e dzialaja tylko dla konkretnego zegara (168MHz)?

    0
  • #3 14 Cze 2012 19:19
    Rossi90
    Poziom 9  

    Standardowo jak to jest w STM32F4-Disocvery, 168Mhz właśnie.
    Plik: system_stm32f4xx.c

    0
  • #4 14 Cze 2012 19:42
    gaskoin
    Poziom 38  

    Ciekawe jaki standard o tym wspomina?

    Zrób opóźnienia na delayu albo napisz kod który go nie używa. Albo użyj RTOSa to w czasie kiedy będziesz czekał na odpowiedź wyświetlacza będziesz mógł coś innego porobić.

    0
  • #5 14 Cze 2012 20:06
    Rossi90
    Poziom 9  

    Nie miałem na myśli standardu jakiegoś, chodziło mi bardziej o domyślną wartość w projektach udostępnianych przez ARM.

    Zrobiłem opóźnienia do 10ms oraz 20 ms, jednak bez rezultatu.

    0
  • #6 14 Cze 2012 20:10
    stanleysts
    Poziom 27  

    Ciężko coś powiedzieć, pokaż może funkcje main, sprawdziłbym dodatkowo jeszcze raz połączenia, jeśli jest to gotowy soft (całkowicie i nie modyfikowany przez Ciebie) to powinien działać, bo nikt w zasadzie nie udostępnia niedziałających projektów. Jeśli coś robiłeś sam to sprawdziłbym własne funkcje, a potem to debugging, może w jakimś konkretnym miejscu staje program.

    0
  • #7 14 Cze 2012 20:20
    Rossi90
    Poziom 9  

    Korzystam z przykładów pokazanych tutaj: http://www.st.com/internet/evalboard/product/252419.jsp

    Dokładnie z projektu Demo jako baza do rozwoju jako takiego. Podłączyłem LCD pod odpowiednie piny, wykomentowałem jedynie z main() kod, który wywołuje domyślne zachowanie układu (miganie ledami). Wstawiłem natomiast swój własny kod, funkcja main wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #8 14 Cze 2012 20:48
    stanleysts
    Poziom 27  

    No na przykład tu jak robisz wywołanie funkcji

    Kod: c
    Zaloguj się, aby zobaczyć kod


    RCC_Clocks to zapewne jakaś struktura, gdzie ona ma więc ustawiane pola?

    0
  • #9 14 Cze 2012 21:23
    Rossi90
    Poziom 9  

    Struktura ma w pliku stm32f4xx_rcc.h , jest to systemowy plik płytki.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wklejam jednak całośc kodu, nad funkcją main. Wykomentowałem to i ten sam efekt.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #10 14 Cze 2012 22:47
    stanleysts
    Poziom 27  

    No ok, tylko ja pytałem, gdzie Ty ustawiasz te pola struktury? Nie wiem, czy funkcja:
    RCC_GetClocksFreq()
    przyjmuje jakies wartości defaultowe, ale jeśli nie to nie dziw się, że Ci nie działa bo tam będą w pamięci śmieci.

    0
  • #11 14 Cze 2012 23:09
    Rossi90
    Poziom 9  

    W wywołaniu funkcji ustalają się wartości:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Są to funkcje standardowe w tym projekcie wykorzystujące biblioteki od układu.

    W ogóle dziękuje za chęci i cierpliwość do mnie, stanleysts :)

    0
  • Pomocny post
    #12 14 Cze 2012 23:13
    stanleysts
    Poziom 27  

    No wiem, że to jest jakaś funkcja "standardowa" (za często używasz tego słowa), ale wklej może jej wnętrze jeśli możesz. Ty podajesz jej adres struktury ale nie widzę nigdzie , żebyś jakieś jej pola konfigurował wcześniej, a co za tym idzie to może i ta funkcja operuje na tej strukturze ale w jej środku będą same śmieci.

    Na przykład tu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    skąd wiemy co znajduje się pod:RCC_Clocks.HCLK_Frequency.

    0
  • #13 14 Cze 2012 23:18
    Rossi90
    Poziom 9  

    Ok, poprawię się.
    Funkcja:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I wartości stałych przypisywanych do SYSCLK w niektórych przypadkach:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Natomiast to:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    To odwołanie do wartości struktury.

    0
  • Pomocny post
    #14 14 Cze 2012 23:25
    stanleysts
    Poziom 27  

    Cytat:
    Natomiast to:

    Kod C - [rozwiń]

    RCC_Clocks.HCLK_Frequency




    To odwołanie do wartości struktury.


    Wiem co to jest poprostu nie wiedziałem jakie wartości się kryją w tym polu ale teraz wiem, że są ustawiane w tamtej funkcji.

    BTW. Włączasz gdzieś taktowanie odpowiednich magistral?

    0
  • #15 14 Cze 2012 23:35
    Rossi90
    Poziom 9  

    Raczej nie włączam, ba! Przyznam się szczerze, że nie wiem jak.

    0
  • Pomocny post
    #16 14 Cze 2012 23:43
    stanleysts
    Poziom 27  

    Ja Ci teraz dokładnie nie powiem jak one wyglądają na F4 bo nie mam dostępu ale to są funkcje typu:

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

    0
  • #17 14 Cze 2012 23:45
    Rossi90
    Poziom 9  

    Dziękuję, poszukam i dam znać.
    ---
    Bazując na projekcie demonstracyjnym odnośnie urządzeń peryferyjnych, udało mi się znaleźć jak włączyć magistrale i zainicjować piny.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jednak nadal niestety brak efektów.

    0
  • #18 15 Cze 2012 00:14
    stanleysts
    Poziom 27  

    Straszny bałągan tam masz, jeśli robisz jakiś pin jako AF (alternative funciton) to tam też trzeba włączyć taktowanie.

    Po co na przykład jest ta linijka:
    RCC_MCO2Config(RCC_MCO2Source_SYSCLK, RCC_MCO2Div_2);

    Jak już na podstawie tych struktur: GPIO_InitStructure
    ustawiasz kilka pinów tak samo to zrób to bardziej czytelnie:

    zamiast:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    to

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Skąd wiesz, że Ci się udało włączyć i zainicjalizować poprawnie: sprawdzałeś jakimś miganiem diody na przykład?

    Zresztą widzę, że akurat ustawianie pinów masz zrobione makrami w funkcji:
    void init_ks0108(void)

    Natomiast tak jak powiedziałem nie widzę tam włączenia zegarów.

    0
  • #19 15 Cze 2012 00:26
    gaskoin
    Poziom 38  

    Ja sobie jak zwykle nabiję posta i zarzucę kozią poradą:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To wygląda jak wytwór czyichś torsji, nie można tak?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #20 15 Cze 2012 00:36
    stanleysts
    Poziom 27  

    Można Panie można, ale są tu też wady Twojego rozumowania, tzn niekoniecznie pola są w takiej kolejności to raz a dwa niekoniecznie wszystkie trzeba ustawiać a tamtym zapisem wybierasz tylko wybrane pola (no polonistą to nie jestem)

    Lepiej koledze doradź których clock enable nie ustawia, żeby mu projekt ruszył :D

    0
  • #21 15 Cze 2012 00:52
    Rossi90
    Poziom 9  

    No tak, w sumie by się przydało :)

    0
  • #22 15 Cze 2012 05:44
    tymon_x
    Poziom 30  

    stanleysts napisał:
    Można Panie można, ale są tu też wady Twojego rozumowania, tzn niekoniecznie pola są w takiej kolejności to raz a dwa niekoniecznie wszystkie trzeba ustawiać a tamtym zapisem wybierasz tylko wybrane pola (no polonistą to nie jestem)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    I tez mozna wybierac konkretne pola, nie trzeba wszystkich. A inicjalizacja i tak wiekszosci wypadkow jest jednokrotna.

    0
  • #23 15 Cze 2012 09:57
    gaskoin
    Poziom 38  

    Da się da, tymon mnie uprzedził :) Taki zapis jest trochę czytelniejszy.

    stanleysts napisał:
    Lepiej koledze doradź których clock enable nie ustawia, żeby mu projekt ruszył :D


    Jak będziesz miał tyle postów co ja, to już Ci się nie będzie chciało pisać w kółko tych samych uwag :P

    0
  • #24 15 Cze 2012 10:27
    Rossi90
    Poziom 9  

    Jednak może zrobisz mały wyjątek? ;)

    0
  • #25 15 Cze 2012 12:12
    stanleysts
    Poziom 27  

    Ok to ja napisze - znów się powtarzam - prawie napewno nie działa Ci to przez to, że nie włączasz zegarów dla peryferiów odpowidających za ten wyświetlacz, pisałem Ci jakimi mniej więcej funkcjami się to robi, poszukaj takowych albo RM i do dzieła.

    0
  • #26 15 Cze 2012 20:08
    Rossi90
    Poziom 9  

    Okej udało się :) Był jakiś błąd w makrach, bo źle przesuwał piny danych. Dziękuje wszystkim za pomoc :)

    0
  Szukaj w 5mln produktów