Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zegarek na STM32F4Discovery z wyświetlaczem TFT LCD Touch

Tytus Kosiarski 12 Lip 2013 16:03 15948 19
  • Zegarek na STM32F4Discovery z wyświetlaczem TFT LCD Touch

    Witam

    Tym razem chciałbym zaprezentować programowy projekt zegarka i datownika uruchomionego na sprzęcie: STM32F4Discovery oraz LCD TFT DEM240320E TMH-PW-N(A-Touch) na sterowniku Renesas R61580 (kupiony swego czasu w TME. Obecnie nie mają na stanie, można próbować kupić go tutaj:http://www.soselectronic.pl/?str=371&artnum=104638&name=display-elektronik-dem240320etmh-pw-ntp). Prezentowany projekt będzie częścią bardziej złożonego projektu realizowanego na mikrokontrolerze STM32F407VG, dlatego teraz nie budowałem dedykowanego do tego sprzętu, tylko wykorzystałem gotowa płytkę Discovery i dołączony do niej "na pająka" wyświetlacz LCD.
    Program do swojego działania wykorzystuje RTC zawarty w tym mikrokontrolerze. RTC taktowany jest zewnętrznym kwarcem zegarkowym 32768Hz. Skanowanie panelu dotykowego odbywa się poprzez odczytywanie wartości z trzech kanałów przetwornika ADC, do których dołączony jest panel dotykowy. Komunikacja z wyświetlaczem odbywa się poprzez interfejs SPI (dla jednej wersji programu) lub 8-bit interfejs równoległy zrealizowany przy pomocy FSMC (dla drugiej wersji programu). Program tworzyłem najpierw dla interfejsu SPI, po czym przerobiłem go na interfejs równoległy, gdy okazało się, że odświeżanie zawartości ekranu przy przełączaniu widoków jest trochę za wolne.
    Program po uruchomieniu wyświetla na wyświetlaczu główny ekran, na którym jest bieżący czas w formacie 24-godzinnym (na niebieskim pasku) i data (na zielonym pasku), przy czym w przypadku niezaprogramowanego wcześniej RTC, liczenie czasu zacznie się od godziny 0:00:00, a data będzie: "Poniedziałek, 1 stycznia 2000r" lub w angielskiej wersji "Monday, 1 January 2000". Poniżej wyświetlanego czasu i daty są ekranowe przyciski służące do ustawiania czasu, daty i zmiany wyświetlanego języka polski <-> angielski. Po naciśnięciu przycisku ustawiania czasu pojawia się niebieskie okno z komunikatem, co trzeba zrobić, poniżej niego pojawia się białe okno edycyjne z kursorem, w którym jest wyświetlany edytowany czas, a poniżej tych dwóch okien pojawia się klawiatura numeryczna. Po wprowadzeniu czasu zatwierdza się zmiany przyciskiem Enter na klawiaturze numerycznej i program powraca do wyświetlania głównego ekranu. Próba wprowadzenia nieprawidłowego czasu podczas edycji (godziny większej od 23, minut i sekund większych od 59) jest ignorowana. Przyciskiem Backspace można przesunąć kursor na już wyedytowane elementy, przez co można je ponownie edytować.
    Podobnie jest po naciśnięciu przycisku ustawiania daty, z tą różnicą, że pod klawiaturą numeryczną pojawia się dodatkowo pomoc w wybranym języku, podpowiadająca, jakie wartości należy wprowadzać przy edytowaniu elementów daty. Nieco inaczej natomiast zrobiłem obsługę błędnego wprowadzenia elementów daty (np. próba ustawienia 30 lutego, czy temu podobne). Wtedy po naciśnięciu Enter, okno komunikatu zmienia kolor na czerwony, pojawia się w nim tekst informujący o błędzie w dacie i w konsekwencji porzuceniu bez zapisywania wprowadzonych danych. Ekran ten jest wyświetlany przez 2sek, po czym program powraca do wyświetlania głównego ekranu bez zapisywania źle ustawionej daty. Przyczyną takiego podejścia do problemu możliwości wprowadzenia błędnej daty był fakt, iż w momencie ustawiania dnia miesiąca w przypadku nieprogramowanego wcześniej RTC, domyślnym miesiącem jest styczeń 2000 (a więc przestępnego) roku.
    Każdorazowe naciskanie przycisku zmiany języka powoduje zmianę języka w wyświetlanym głównym ekranie, jak również powoduje zmianę języka wyświetlanych ekranów ustawiania czasu i daty.

    Wszystkie funkcje graficzne: czyszczenie ekranu, zapalenie piksela, rysowanie okien i przycisków i wypełnianie ich wnętrz, klawiatury, pisanie tekstów napisałem sam, toteż można je dowolnie modyfikować i przerabiać, jak również kopiować. Teksty pisane są czcionką Times New Roman 16 i 18. Bitmapy tej czcionki (również polskich znaków) uzyskałem przy pomocy programu The Dot Factory v.0.1.4. Program napisałem w środowisku Rowley Crossworks 2.0.11.

    Na płytce Discovery trzeba było dodatkowo:
    1. wlutować kwarc zegarkowy 32768Hz w miejscu X3
    2. wlutować kondensatory ceramiczne 6,8pF w miejscach C16 i C27
    3. i koniecznie wlutować rezystor 10MΩ między wyprowadzenia kwarcu. Bez tego rezystora generator LSE nie wstawał. Ja wlutowałem ten rezystor między goldpiny PC14 i PC15 (na płytce brak dla niego miejsca).
    Ponadto dorobiłem podtrzymanie pracy RTC przy wyłączonym zasilaniu. W tym celu należy:
    1. wylutować zworkę (rezystor zerowy) R26 i w jego miejsce wlutować jakąkolwiek diodę SMD katodą w stronę wyprowadzenia VBAT mikrokontrolera (pin 6)
    2. wlutować kondensator GoldCap, plusem do wlutowanej w punkcie 1. katody diody, minusem do masy. Ja dałem kondensator 0,22F 5,5V. Kondensator ten ładował mi się do napięcia ok. 2,4V, po ponad dobowej przerwie w pracy, napięcie na nim spadło do ok.2,1V.

    Przy programowaniu korzystałem z bibliotek SPL STMicroelectronics, jedynie przy konfigurowaniu portów i zegarów ustawiałem bezpośrednio rejestry. Jednakże natrafiłem już na błąd w tej bibliotece: w funkcji FSMC_NORSRAMInit z pliku stm32f4xx_fsmc.c składnik FSMC_AccessMode struktury konfiguracyjnej nie był przesuwany w lewo o 28 bitów, a musi być, by prawidłowo ustawić pole ACCMOD w rejestrze FSMC_BTR. Jak na razie poza tym błędem nie trafiłem na jakieś inne.

    Do napisania procedury obsługi panelu dotykowego wykorzystałem algorytm przedstawiony w artykule "Obsługa rezystancyjnych paneli dotykowych w systemach mikroprocesorowych" z EP 10/2009.

    Jedno ze zdjęć przedstawia sposób dołączenia wyświetlacza do pozostałej części elektroniki przy wykorzystaniu płytki uniwersalnej UMSMD516 (również z TME). Wyświetlacz przyklejony jest do płytki za pomocą lepkiej gumki silikonowej. Złącze FFC jest, co prawda, za długie do szerokości taśmy połączeniowej LCD, niemniej jednak do prototypu dało się zastosować.

    Pozdrawiam, KT
    Zegarek na STM32F4Discovery z wyświetlaczem TFT LCD Touch Zegarek na STM32F4Discovery z wyświetlaczem TFT LCD Touch


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • PCBway
  • #2
    piotrva
    Moderator na urlopie...
    Witam,
    Bardzo fajnie, że wreszcie coś na STM32 się pojawiło.
    Sam program to, jak niektórzy pewnie stwierdzą, nie odkrycie, ale moim zdaniem projekt bardzo dydaktyczny.
    Fajnie też, że wykryłeś przy okazji ten błąd w bibliotece (swoją drogą korzystałeś z najnowszych wersji?)

    Co do prędkości zmiany obrazu na LCD - nic szybciej na tym modelu nie udało się zdziałać?
    Ponadto jaka jest dokładność tego RTC?
  • PCBway
  • #3
    Tytus Kosiarski
    Poziom 14  
    Witam
    Dzięki za słowa uznania :) Wersja tego pliku z błędem jest datowana na 30 września 2011 - nie sprawdzałem, czy są nowsze. Na pewno można by szybciej odświeżać obraz, puszczając dane do LCD przez 16-bit magistralę, ale dla mnie oznacza to za dużą już ilość ścieżek na przyszłej PCB (teraz jest już znacząco więcej w porównaniu do SPI). Na razie ustawiłem zawartość rejestru FSMC_BTR1 ustawiającego timingi na równoległej magistrali na minimalne wartości oraz ustawiłem zegar mikrokontrolera na 48MHz. Można próbować jeszcze zwiększyć częstotliwość zegara mikrokontrolera. Bawię się już tym zegarkiem kilka dni i nie stwierdziłem odchyłki wskazań minutowych w porównaniu z zegarkiem w tel.komórkowym, tak że chyba nie będzie trzeba trymować generatora LSE.

    Pozdrawiam, KT
  • #4
    hehehehuhuhu
    Poziom 19  
    Jakieś praktyczne zastosowanie tego projektu jest, jakoś nie mogę sobie wyobrazić?
  • #5
    piotrva
    Moderator na urlopie...
    piotrva napisał:
    Sam program to, jak niektórzy pewnie stwierdzą, nie odkrycie, ale moim zdaniem projekt bardzo dydaktyczny.

    Cóż, jestem wróżbitą :D

    Co do prędkości to przy 48MHz rzeczywiście nie wyciskasz dużo z tego procesora.
    Ja w tej chwili pracuję nad grą typu "labirynt z kulką" na procesorze STM32F103@72MHz i LCD SSD1289 240*320 i właśnie nie wiem czy nie będę musiał przesiąść się na STM32F407@168MHz + FPU
  • #6
    Karol966
    Poziom 30  
    piotrva napisał:
    Bardzo fajnie, że wreszcie coś na STM32 się pojawiło


    Na tych prockach sporo się dziej tylko zwykle jest mało czasu na sam projekt co dopiero na jego ew upublicznienie ;)
    W zeszłym tygodniu bawiłem się połączeniem STM32F103(HY-mini)+SSD1963 sterujący panelem TFT AT070TN92. Niby procek szybki bo 72MHz a samo czyszczenie ekranu jednym kolorem również trwało sporo. Niestety bufora SSD1963 użyć chyba się tu za bardzo nie da bo przy tej rozdzielczości brakuje po prostu nieco pamięci :(

    Mogę mieć pytanie dlaczego tak proste procedury jak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Są wywoływane w przerwaniu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zamiast się bezpośrednio w nim znaleźć? W końcu wtedy była by to 1 linijka kodu.

    PS. Rewelacja, taka ilość komentarzy dla początkującego z stm32 (jak ja) czasami może coś rozjaśnić ;)


    hehehehuhuhu napisał:
    Jakieś praktyczne zastosowanie tego projektu jest, jakoś nie mogę sobie wyobrazić?

    Wystarczy czytać ze zrozumieniem - czesto mi to powtarzano to i ja teraz powtarzam ;)
    Cytat:
    Prezentowany projekt będzie częścią bardziej złożonego projektu realizowanego na mikrokontrolerze STM32F407VG
  • #7
    Tytus Kosiarski
    Poziom 14  
    Witam

    Do Kol. hehehehuhuhu: Otóż w dalszej kolejności chcę zająć się zapisem danych dźwiękowych na kartę SD w postaci plików. Do tego będzie mi potrzebna znajomość daty i czasu przy zapisywaniu plików.

    Do Kol. piotrva: Wybrałem taką częstotliwość, gdyż chcę jeszcze uruchomić USB Device, gdy już opanuję obsługę karty SD w trybie SDIO. Zresztą, jak się doczytałem w PDF-ie, tam też jest potrzebna taka częstotliwość. Poza tym nie chcę przekraczać powiedzmy 55-60MHz, gdyż to będzie urządzenie bateryjne, a 55MHz wystarcza do płynnego dekodowania WMA (to i innych formatów też), jak w tym wątku: link (37.post).

    Do Kol. Karol966: Faktycznie, masz rację, jak się temu przyjrzałem. Kopiowałem po prostu potrzebne fragmenty z jakiegoś przykładowego programu na tę płytkę, no i tak już zostało... :)

    Pozdrawiam, KT
  • #8
    waldi1995
    Poziom 19  
    Ile maksymalnie dni potrafi poprawnie pracować bez zasilania.
  • #9
    piotrva
    Moderator na urlopie...
    Taką częstotliwość (48MHz) musi mieć tylko kontroler USB - cała reszta (w tym CPU) może działać na 168MHz. Do serii F4 jest bardzo fajny konfigurator zegara (dokument excel z makrami), gdzie dokładnie jest pokazane na jakich stopniach sygnał zegarowy jest generowany - zaznacza się tylko ptaszka, że trzeba 48MHz dla usb i na odpowiedniej magistrali zegarowej tyle się pojawi - tyle dementując plotki o tym, ze cały procesor musi chodzić w żółwim tempie.
    To samo z SDIO - też taktowanie i preskaler tego peryferium są niezależne od częstotliwości taktującej CPU. (Tu jeśli chcesz mogę podrzucić działającego gotowca z FatFS i SDIO).
  • #10
    Tytus Kosiarski
    Poziom 14  
    Tego niestety nie wiem, bo nie zostawiałem zegarka wyłączonego przez parę dni. Najdłuższa przerwa była chyba 25...26h i przez ten czas napięcie na GoldCap'ie spadło o 0,3V, o czym pisałem na początku. Ale można oszacować, że jeśli minimalne napięcie zasilania RTC według producenta wynosi 1,65V, a spadek napięcia wynosi 0,3V/dobę, to czas podtrzymania pracy RTC przez GoldCap'a powinien wynosić 2,5 do 3 dni.
  • #12
    Tytus Kosiarski
    Poziom 14  
    Do piotrva: Bardzo chętnie obejrzę sobie tego gotowca :) Dzięki :) Bo ja na razie tylko przygotowałem część sprzętową do obsługi SD (przylutowałem slot SD w trzech miejscach do poligonu masy, po umownej stronie druku obok gniazda słuchawkowego na tej płytce oraz podłączyłem przewodami wyprowadzenia slotu do odpowiednich goldpinów). Swoją drogą, producent mógł tam umieścić slot na kartę i pociągnąć ścieżki - miejsca jest tam dosyć.
  • #13
    piotrva
    Moderator na urlopie...
    Cóż, ja dzięki konkursowi stałem się szczęśliwym posiadaczem płytki rozszerzającej ze slotem SD oraz kontrolerem PHY ethernetowym + LCD + Kamerka, ale obecnie pracuję nad HY-MINI STM32 który też ma slot SD na pokładzie.
    Załączam projekt z obsługą kart SD, oczywiście bez bibliotek + schemat podłączenia karty SD.
  • #14
    Tytus Kosiarski
    Poziom 14  
    Dzięki za plik, już ściągnąłem:)

    Acha, dziś mam wyjazd, a nie wiem, czy w docelowym miejscu będę mieć dostęp do Internetu, toteż jest możliwe, że na ewentualne, dalsze pytania odpowiem dopiero po powrocie.
    Pozdrawiam, KT
  • #15
    Kamien12
    Poziom 9  
    Witam,
    Ja też zaczynam zabawę z układami STM i kartami SD. Mam problem bo nie mogę ogarnąć jak zrobić, żeby plik z obrazem z karty SD został przekazany na wyświetlacz. Jeżeli bitmapę zapiszę w pamięci procesora to nie ma problemu, ale odczyt z karty już nie wychodzi.
    Będę wdzięczny za jakieś wskazówki.
    Pozdrawiam
  • #16
    piotrva
    Moderator na urlopie...
    1. Off-topic
    2. Na karcie zapisuj bitmapy w formacie który potrafisz obsłużyć. Może być np. bmp bez kompresji lub nawet taka tablica, jak dołączasz do programu w C zapisana w postaci pliku binarnego.
    3. Ogólnie nie wiadomo co już zrobiłeś, więc ciężko jest Ci pomóc - najlepiej załóż oddzielny wątek.
  • #17
    Tytus Kosiarski
    Poziom 14  
    Witam

    Mam dostęp do Internetu:)

    Do Kol. Kamien12: Dopiero zaczynam pracować nad obsługą karty SD przez STM32F407, toteż na teraz nie jestem w stanie pomóc... Jak doradził Tobie kol. piotrva, załóż nowy, oddzielny temat na Elektrodzie, dotyczący tego problemu - szybciej dostaniesz odpowiedź.

    Pozdrawiam, KT
  • #18
    fixlol
    Poziom 12  
    Witam,

    Ile mniej więcej wyniosły Cię koszta ?
  • #19
    piotrva
    Moderator na urlopie...
    Ja strzelę w ceny:
    Discovery: 80zł
    Wyświetlacz - pewnie około 100zł (a przynajmniej w widełkach 80-140) - w zależności od tego kiedy i gdzie kupiony
    Drobnica - wyjdzie pewnie z 20-30 zł
  • #20
    Tytus Kosiarski
    Poziom 14  
    Witam

    Podobny wyświetlacz w TME (DEM240320H-TMH-AT - inny kontroler) cena 162zł netto, Discovery za free (dostałem na szkoleniu z STM32F4), drobnica, tak, jak napisał piotrva.

    Pozdrawiam, KT