Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] STM32F103 + LCD HD44780 - Nieprawidłowe działanie

08 Mar 2018 21:57 1500 7
  • Level 10  
    Szanowni.

    Ostatnimi czasy wpadło mi w ręce rozszerzenie do płytek arduino z wyświetlaczem LCD 2x16. Zapewnia ono możliwość komunikacji w trybie 4-bit z pinem R/W podłączonym na stałe do masy. Postanowiłem go uruchomić na płytce Nucleo z procesorem STM32F103RB. Wyprowadzenia wyświetlacza połączone są następująco:

    WyświetlaczuC
    RSPA9
    EPC7
    DB4PB5
    DB5PB4
    DB6PB10
    DB7PA8

    Niestety mimo usilnych starań i kilku nocy kombinowania wyświetlacz nie pracuje prawidłowo. Po wykonaniu kodu inicjującego wyświetlacz, pojawiają się na nim znaki widoczne na zdjęciu. Znaki są bardziej blade niż klasycznie wyświetlająca się pojedyncza linijka w przypadku niezainicjowanego wyświetlacza, dla tego samego ustawienia kontrastu. Sprawdziłem też czasy generowane przez funkcje DelayUs na oscyloskopie i te były prawidłowe. Sprawdziłem też sam wyświetlacz uruchamiając go na kodzie wygenerowanym na stronie z kompilatorem online Mbed OS 5:
    Code: c
    Log in, to see the code

    I tu śmiga bez problemów.

    Niestety na moim kodzie nie działa:
    Code: c
    Log in, to see the code


    Proszę o podpowiedź gdzie popełniam błąd.

    STM32F103 + LCD HD44780 - Nieprawidłowe działanie
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • MCUs specialist
    Przerwanie SysTick co jedną MIKROsekundę? Naprawdę uważasz, że to dobry pomysł? Przy okazji brakuje magicznego słówka na "v...".

    Osobiście używam opóźnień 200 us przy inicjalizacji (u Ciebie 100 us) i 50 us po zapisie jeden raz (u Ciebie 20 us po każdej połówce).
  • Level 10  
    nie lepiej porównac z tym kodem z os.mbed.com który działał ?
    Code: c
    Log in, to see the code

    Twój init
    Code: c
    Log in, to see the code


    zobacz czasy jakie są w os.mbed.com a u Ciebie to jak to ma działać zresztą w nocie jest dokładnie podane jakie muszą być
  • MCUs specialist
    grizley wrote:
    zobacz czasy jakie są w os.mbed.com a u Ciebie to jak to ma działać zresztą w nocie jest dokładnie podane jakie muszą być

    No właśnie - jest podane w nocie i są to czasy dużo krótsze niż użyte przez kod z mbed. 15 ms po power-up, 4.1 ms po pierwszym zapisie, 100 us po kolejnym, reszta wg tabelki (nie więcej niż 1.5 ms dla "return home", 37 us dla "function set"). Więc wg datasheeta czasy są akurat OK.
  • Level 10  
    Dziękuję kolegom za cenne uwagi.

    Co do wersji z os.mbed.com, to próbowałem ją do siebie przeportować ale niestety efekt był podobny.

    Poprawiłem kod według wskazówek kolegi Freddie Chopin, przerwanie SysTick jest generowane co 10 us oraz wydłużyłem czasy dla półbajtów, ale efekt jest dalej taki sam. Pojawiło się też słówko volatile.


    Kod wygląda teraz tak:
    Code: c
    Log in, to see the code


    Macie może Panowie jeszcze jakieś sugestie co mogę sprawdzić?
  • User removed account  
  • Helpful post
    MCUs specialist
    Domyślnie na pinie PB4 jest sygnał NJTRST - jeśli w jakimś tam rejestrze AFIO nie wyłączysz "pełnego JTAGa", to nie uda Ci się sterować tym pinem. Tylko uważaj, żebyś sobie z rozpędu nie wyłączył też SWD, bo możesz mieć potem "lekki" problem żeby się skomunikować z układem.
  • Level 10  
    Freddie Chopin wrote:
    Domyślnie na pinie PB4 jest sygnał NJTRST - jeśli w jakimś tam rejestrze AFIO nie wyłączysz "pełnego JTAGa", to nie uda Ci się sterować tym pinem. Tylko uważaj, żebyś sobie z rozpędu nie wyłączył też SWD, bo możesz mieć potem "lekki" problem żeby się skomunikować z układem.


    Strzał w dziesiątkę! Wyłączenie obsługi tego sygnału rozwiązało problem. W sumie nie wiem sam czemu szumnie założyłem, że jeśli programuję przez SWD to JTAG jest wyłączony.

    Dla osób, które natką się na podobny problem dwie linijki poniżej wyłączają interfejs JTAG (zwalniając piny zgodnie z tabelką) nie blokując komunikacji poprzez SWD:

    STM32F103 + LCD HD44780 - Nieprawidłowe działanie

    Code: c
    Log in, to see the code


    Serdecznie dziękuję kolegom za pomoc w rozwiązaniu problemu.