środa, 17 października 2012

[STM32] Pierwsza rozkmina - wyświetlacz hd44780

Witam!

Jako że korzystanie z interfejsu złożonego z jednego przycisku i dwóch ledów (jak w STM32F0DISCOVERY) jest nudne potrzebne jest nam coś co pomoże nawiązać głębszy kontakt z naszym mikrokontrolerem, by mógł powiedzieć nam co go boli, co chce zjeść itd. Mianowicie chodzi o standardowy wyświetlacz LCD zgodny ze sterownikiem hd44780. Jako że brakowało w internecie bibliotek stricte gotowców, co nieco przerobiłem tak żeby jakoś w miarę chodziło przy moim zestawie i w miarę komfortowo się z nich korzystało.

Zaznaczam że nie jest to rozwiązanie profesjonalne, broń boże nie brać tą bibliotekę za wzorowo wykonaną, ale tyle o ile zdatną do uruchomienia lcd. Znasz się lepiej? Popraw i przekaż dalej, a wszyscy z tego skorzystają!

Oto efekt:




Nieprzerobione biblioteki znalazłem na blogu:
http://avrkwiat.nstrefa.pl/omnie/index.php?option=com_content&view=article&id=123&Itemid=145

Przerobione przeze mnie ww. biblioteki:
http://adf.ly/DznoN

 Gotowy program testowy do wgrania przez Keil uVision:
http://atmegan.blogspot.com/2013/03/stm32f0-hd44780-raz-jeszcze.html


Dodałem uproszczoną konfigurację, funkcję do wyświetlania liczb i pozmieniałem nazwy funkcji. Jako że jestem leniem i nie lubię się bawić w wpisywanie LCD_GoTo (czyż nie jest to "PoKeMoŃskIe"? :D), a gdy zapomnę gdzieś wstawić dużej litery kompilator krzyczy wniebogłosy.
Wolę po prostu wpisać lcd_goto lub lcd_locate jako że przy avr taką funkcją operowałem.


Składa się z lcd_hd44780_lib.c i lcd_hd44780_lib.h

Piny wyświetlacza konfigurujemy w lcd_hd44780_lib.h

//**********  Ustawienia pinów wyswietlacza     **********//
#define LCD_GPIO GPIOB //port
#define LCD_CLK_LINE RCC_AHBPeriph_GPIOB //linia zegarowa, zmienic litere portu

#define LCD_D4 GPIO_Pin_6
#define LCD_D5 GPIO_Pin_5
#define LCD_D6 GPIO_Pin_4
#define LCD_D7 GPIO_Pin_3

#define LCD_RS GPIO_Pin_13
#define LCD_RW GPIO_Pin_14
#define LCD_EN GPIO_Pin_15
//********** Koniec ustawien pinów wyswietlacza **********// 
 Lista funkcji:
lcd_init(); //inicjacja wyświetlacza
lcd_cls(); //czyszczenie wyswietlacza
lcd_str("Teskt"); //wprowadzanie tekstu
lcd_strxy("Teskt", liczba kolumny, liczba wiersza); //wprowadzanie tekstu + lokalizacja
lcd_locate(liczba kolumny, liczba wiersza); //lokalizacja kursor
lcd_int(66); //wprowadzanie liczb
lcd_intxy(66, liczba kolumny, liczba wiersza); //wprowadzanie liczb + lokalizacja

Pozdrawiam :)

11 komentarzy:

  1. Bardzo fajnie, że przerobiłeś tą bibliotekę, bardzo się przyda. Może teraz zrobisz program, który wyświetli ilość kliknięć przycisku "user"? Jeżeli coś takiego zrobisz i udostępnisz kod programiku, będę niezmiernie wdzięczny ;).
    Pozdro

    OdpowiedzUsuń
  2. Witaj!
    Nawet myślałem stworzyć program przykładowy aby każdy mógł odpalić, nawet w celach testu poprawności połączeń. Co do przycisku jeszcze muszę rozkminić aby funkcja niwelująca drgania styków nie blokowała programu w tle, opóźnienie delay(x) na dłuższą metę się nie nada. Jak uda mi się rozwikłać ten problem, umieszczę program.

    Ja też się uczę, obsługa peryferiów na arm wygląda deczko inaczej jak przy avr.

    OdpowiedzUsuń
  3. A czy mógłbyś udostępnić gotowy projekt w Atollic TrueSTUDIO? Bo mam parę błędów, a muszę sprawdzić czy mój LCD działa (znalazłem w "śmieciach" xD). Może być spakowany do archiwum .rar
    Pozdrawiam

    OdpowiedzUsuń
  4. Przepraszam za brak odpowiedzi, autor tego bloga jest leniem patentowanym i woli spędzać czort-wie-ile czasu w przeróżnych grach nich odkrywać świat mikrokontrolerów... Ale nadrabiam to.


    https://docs.google.com/open?id=0ByyXOOtWDAmuNy00enEzY25CUW8

    Skleiłem na szybko, powinno chodzić, ale ze względu na to że mój zestaw się wypiął nie mam jak tego odpalić. Jak uda mi się zmusić go do pracy wrzucę konkretny program z opisem.

    OdpowiedzUsuń
  5. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  6. Świetnie - wszystko działa, dziękuje bardzo ;)
    Aha - odnośnie drgań styków polecam artykuł:
    http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html

    W ogóle cały blog jest pomocny :).
    Pozdrawiam
    MDR

    OdpowiedzUsuń
    Odpowiedzi
    1. Znam tego bloga i z chęcią często tam zaglądam, wiele się z niego nauczyłem. Co do drgań styków - w avr mam problem rozwiązany, przy stm32 jeszcze nie wiem jak się zabrać za przerwania.

      Pozdrawiam

      Usuń
    2. A powiedz mi, jaki masz problem z STM? Cytując: "mój zestaw się wypiął nie mam jak tego odpalić". Może jakoś uda się mi zrewanżować za pomoc ;).

      Usuń
    3. Ano konsola wyrzuca mi że nie może odpalić urządzenia:

      Error in initializing ST-Link device.
      Reason: Unknown. Please check power and cabling to target.

      Hardware'owej usterki raczej nie podejrzewam. Stało się to po zmianie antywirusa z nortona na avire, grzebałem w zaporze - serwer gdb jest dodany do wyjątków.

      Usuń
    4. Zablokowany port 3333 w antyvirze? Bo innej opcji nie widzę. Spróbuj połączyć się bezpośrednio z płytką przez OpenOCD albo telnetuj się do niej. Jeżeli się nie uda, to na pewno problem z portem.

      Usuń
  7. witam mam pytanie czy jest możliwość żeby wrzucił pan skompilowany kod w Hex lub bin bo niestety u mnie po dużej ilości prób nadal wyświetlacz się zapala wszystkimi znakami

    OdpowiedzUsuń