- Alfanumeryczny wyświetlacz LCD 16x2
- Biblioteka LCD CCS 16x2 dla MSP430
- Funkcje LCD dla wyświetlacza LCD 16x2 w MSP430
- Schemat obwodu do interfejsu LCD z MSP430
- Programowanie MSP430 za pomocą Code Composer Studio for LCD Display
Ten artykuł jest kontynuacją naszej serii samouczków na temat programowania MSP430 przy użyciu Code Composer Studio. Ostatni samouczek był oparty na zewnętrznych przerwaniach na MSP430 przy użyciu pinów GPIO. Ten samouczek dotyczy połączenia wyświetlacza z MSP430, jeśli chodzi o wyświetlanie wyświetlacza LCD 16 * 2, jest to pierwszy wybór dla każdego hobbysty elektronicznego. Wcześniej połączyliśmy również LCD z MSP430 za pomocą Arduino IDE, w tym samouczku użyjemy natywnej platformy studyjnej Code Composer zamiast Arduino IDE, dzięki czemu jako projektant zyskujemy większą elastyczność.
Aby dowiedzieć się więcej o wyświetlaczu LCD 16x2 i używaniu go z innymi mikrokontrolerami, zapoznaj się z poniższymi samouczkami.
- Połączenie wyświetlacza LCD z ATmega16
- Interfejs LCD z Raspberry Pi
- Interfejs LCD z mikrokontrolerem PIC
- Interfejs LCD z ARM7-LPC2148
- Łączenie LCD z NodeMCU
- Łączenie LCD z STM32
- Interfejs LCD z MSP430G2
- Połączenie LCD z STM8
Ma wbudowany układ scalony hd44780, który może przechowywać polecenia i dane przekazane do niego. Moduł LCD ma około 16 pinów. 8 z nich to wyprowadzenia danych, 4 z nich to piny do zasilania podświetlenia LED i całego modułu LCD, 3 do sterowania pracą, a 1 do regulacji kontrastu. Poradnik jest oparty na bibliotece stworzonej przez Dennisa Eichmanna. Biblioteka z oddzielnymi funkcjami do drukowania różnych typów danych jest bardzo łatwa. Ma również możliwość wyświetlania danych w różnych formach z zerami wiodącymi, pustymi i usuniętymi. Jest to dość obszerna i wszechstronna biblioteka, którą można konfigurować dla różnych połączeń. Tutaj plik nagłówkowy jest modyfikowany w celu dostosowania do 8-pinowej konfiguracji równoległej do przesyłania danych.
Alfanumeryczny wyświetlacz LCD 16x2
Ogólny wyświetlacz 16x2 ma wbudowany układ scalony hd44780 (zakreślony na czerwono poniżej), który może przechowywać polecenia i przekazane do niego dane. Moduł LCD ma około 16 pinów. 8 z nich to wyprowadzenia danych, 4 z nich to piny do zasilania podświetlenia LED i całego modułu LCD, 3 do sterowania pracą, a 1 do regulacji kontrastu.
Ten moduł LCD jest pokazany powyżej jako wszechstronny i wykorzystuje minimalną liczbę styków w porównaniu z innymi segmentowymi wyświetlaczami LCD. Jeśli jesteś ciekawy, jak dokładnie to wszystko działa, zapoznaj się z działaniem wyświetlacza LCD 16x2, w którym omówiliśmy już szczegółowo, jak działa LCD.
Pin RS: RS = 1 włączy rejestr danych na LCD, który służy do zapisywania wartości do rejestru danych na LCD. RS = 0 włączy rejestr instrukcji na wyświetlaczu LCD.
Włącz pin: wyzwalanie ujemnym zboczem; kiedy pin zostanie zmieniony ze stanu WYSOKI na NISKI, na wyświetlaczu LCD pojawi się monit o zapisanie danych na pinach. Dodatnie wyzwalane zboczem; gdy pin zmienia się ze stanu LOW na HIGH, wyświetlacz LCD jest proszony o odczytanie z pinów danych.
Pin R / W: R / W = 0 zapisze do rejestru instrukcji lub rejestru danych zgodnie z wyborem pinu RS. R / W = 1 odczyta z IR lub DR zgodnie z wyborem pinu RS.
Obsługa RS R / W
0 0 IR zapis jako operację wewnętrzną (czytelny wyświetlacz itp.)
0 1 Odczyt flagi zajętości (DB7) i licznika adresu (DB0 do DB6)
1 0 DR zapisuj jako operację wewnętrzną (DR do DDRAM lub CGRAM)
1 1 DR odczytany jako operacja wewnętrzna (DDRAM lub CGRAM do DR)
Kołki D0-D7: Dane są przesyłane do iz rejestrów poleceń i danych przez te kołki.
Piny zasilania: piny V ss, V dd służą do zasilania Modułu LCD. Piny A, K zasilą podświetlenie LED. Piny V 0 służą do regulacji kontrastu.
Biblioteka LCD CCS 16x2 dla MSP430
Poradnik jest oparty na bibliotece stworzonej przez Dennisa Eichmanna. Biblioteka z oddzielnymi funkcjami do drukowania różnych typów danych jest bardzo łatwa. Ma również możliwość wyświetlania danych w różnych formach z zerami wiodącymi, pustymi i usuniętymi. Jest to dość obszerna i wszechstronna biblioteka, którą można konfigurować dla różnych połączeń. Tutaj plik nagłówkowy jest modyfikowany w celu dostosowania do 8-pinowej konfiguracji równoległej do przesyłania danych. Bibliotekę można pobrać z poniższego łącza, po pobraniu należy wykonać poniższe kroki, aby dodać bibliotekę do CCS.
Pobierz bibliotekę 16x2 dla MSP430 - Code Composer Studio
Krok 1: Tworzenie plików i projektów
Domyślny projekt CCS jest tworzony za pomocą menu plików. W oknie dialogowym Utwórz projekt wybierz urządzenie i podaj hd44780 jako nazwę projektu. W obszarze Project type and toolchain wybierz typ danych wyjściowych jako bibliotekę statyczną i utwórz projekt.
Na pasku Project Explorer (lewa strona) utwórz plik nagłówkowy w folderze include i nazwij go hd44780.h . Następnie skopiuj zawartość pobranego pliku hd44780.h do tego nowo utworzonego.
Teraz utwórz projekt główny, zmieniając typ danych wyjściowych na plik wykonywalny i utwórz projekt o nazwie CCS_LCD .
Krok 2: Uwzględnij ścieżki wyszukiwania do głównego projektu
W oknie dialogowym właściwości projektu hd44780 i wewnątrz opcji dołączania dla kompilatora MSP430 dodaj folder dołączania do pliku ścieżkę wyszukiwania.
Następnie skompiluj ten projekt, aby utworzyć niezbędne pliki konsolidatora, takie jak pliki.lib . Zbudowanie tego spowoduje utworzenie pliku hd44780.lib w folderze debugowania.
Krok 3: Uwzględnij ścieżki wyszukiwania dla konsolidatora
W oknie dialogowym właściwości projektu CCS_LCD oraz w ścieżce wyszukiwania plików na karcie Konsolidator MSP430 umieść plik hd44780.lib znajdujący się w folderze debugowania projektu hd44780. Folder debugowania jest również uwzględniony w ścieżce wyszukiwania plików.
Folder include jest ponownie dodawany do opcji dołączania kompilatora MSP430 projektu CCS_LCD .
Biblioteka została pomyślnie skompilowana i dodana do konsolidatora głównego projektu.
Funkcje LCD dla wyświetlacza LCD 16x2 w MSP430
void hd44780_timer_isr (void): Jest to okresowo wywoływane w ISR timera A. Timer A jest używany do okresowego wykonywania funkcji LCD, takich jak czyszczenie ekranu, ustawianie kursora i wyświetlanie danych. Funkcja ma być używana w ISR. Nic nie zwraca.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): zapisze ciąg określony w pierwszym argumencie.
char * ch__string: ciąg znaków do zapisania w buforze danych (wewnątrz funkcji hd44780_timer_isr ). Dane zostaną skopiowane do rejestru danych i rejestru instrukcji układu scalonego LCD, gdy będzie okresowo wywoływany hd44780_timer_isr .
uint8_t u8__row: Definiuje wiersz, w którym zostanie zapisany ciąg.
uint8_t u8__column: Określa kolumnę, w której zostanie zapisany ciąg.
uint8_t u8__cr_lf: Jeśli jest ustawiony na 1, wiersz zostanie przeniesiony do następnego. Jeśli jest to 0, drukowanie zatrzymuje się w tym samym wierszu.
void hd44780_clear_screen (void): Ta funkcja czyści cały ekran. Nic nie zwraca.
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Funkcja wyświetli na wyświetlaczu LCD bez znaku 16-bitową wartość żądanej lokalizacji.
uint16_t u16__value: Wyświetlana liczba całkowita jest podana w pierwszym argumencie.
uint8_t u8__leading_zero_handling: Jeśli podano 0, początkowe zera zostaną pokazane jako liczba całkowita. Jeśli minie 1, zera zostaną wygaszone. Jeśli jako parametr zostanie przekazana wartość 2, zostaną wyświetlone tylko cyfry znaczące.
uint8_t u8__row: Zaznaczony jest wiersz, w którym wyświetlana jest liczba całkowita.
uint8_t u8__column: Kolumna do wydrukowania jest wybierana przy użyciu argumentu.
uint8_t u8__cr_lf: Jeśli jest ustawiony na 1, wiersz zostanie przeniesiony do następnego. Jeśli jest to 0, drukowanie zatrzymuje się w tym samym wierszu.
Schemat obwodu do interfejsu LCD z MSP430
Pełny schemat obwodu pokazano na poniższym obrazku. Jak widać, połączenia sprzętowe są bardzo proste, a całą płytkę zasililiśmy za pomocą adaptera 5 V.
Połączenia są wykonane zgodnie z powyższym szkicem. Szczegółowe połączenia znajdują się w poniższej tabeli.
Vss | Uziemienie zasilacza 5 V. |
Vdd | 5V |
V0 | Wyjście potencjometru |
RS | P2.1 |
R / W | Ziemia |
mi | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
ZA | Rezystor 220 Ohm |
K. | Ziemia |
Anody podświetlenia LED nie można podłączyć bezpośrednio do zasilania 5V. Powinien być podłączony do rezystancji, aby zminimalizować przepływ prądu przez moduł LCD. Swoje połączenia wykonałem za pomocą płytki perf do lutowania LCD, a następnie użyłem przewodów połączeniowych do połączenia LCD z płytą MSP430, moja konfiguracja wygląda tak poniżej, ale możesz też po prostu użyć płytki prototypowej do wykonania połączeń.
Programowanie MSP430 za pomocą Code Composer Studio for LCD Display
Pełny kod użyty w tym projekcie znajduje się na dole tej strony. Wyjaśnienie użycia kodu jest następujące. Najpierw otwórz plik nagłówkowy (hd44780.h) i umieść numer części mikrokontrolera w pierwszej części pliku.
#include „msp430g2553.h”
Najpierw należy zatrzymać licznik czasu watchdoga. Rejestry sterujące DCOCTL i BCSCTL1 służą do konfiguracji oscylatora mikrokontrolera. Poniższe linie skonfigurują MCLK na 1 MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
Piny portu 1 muszą być wymienione jako wyjście, które ma być używane dla pinów danych. Pin 0 i pin 1 również muszą być wymienione jako wyjścia w porcie 2, które będą używane dla pinów RS i R / W.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
Wbudowany zegar jest używany do okresowego wyświetlania wartości. Timer A jest wybierany z SMCLK (1MHZ) jako źródłem zegara i trybem ciągłym będącym trybem pracy.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
Przerwania dla kanałów porównawczych 1 i 2 oraz przerwanie przepełnienia zegara współdzielą ten sam wektor przerwania ( TIMER0_A1_VECTOR ) z różnymi adresami początkowymi. Kanał porównania przechwytywania 1 (CCR1) używa 2 jako adresu, który jest używany w obudowie przełącznika.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { przełącznik (TA0IV) { przypadek 2: { hd44780_timer_isr (); przerwa; } } }
Po skompilowaniu kodu możesz przesłać go na płytę MSP430, jak wyjaśniono we wstępie do samouczka MSP430. Jeśli wszystko pójdzie zgodnie z oczekiwaniami, powinieneś zobaczyć kontrast wyświetlacza LCD, jak pokazano poniżej.
Jeśli twój test jest bardzo słaby, możesz spróbować wyregulować potencjometr, aby uzyskać lepszy kontrast. Pełne działanie projektu można również znaleźć w filmie, do którego link znajduje się poniżej. Mam nadzieję, że projekt spodobał Ci się i zbudowanie własnego okazało się interesujące. Jeśli masz jakieś pytania, zostaw je w sekcji komentarzy poniżej. Możesz również napisać wszystkie pytania techniczne na forach, aby uzyskać na nie odpowiedzi lub rozpocząć dyskusję.