- Display LCD alfanumerico 16x2
- Libreria CCS LCD 16x2 per MSP430
- Funzioni LCD per display LCD 16x2 su MSP430
- Schema del circuito per interfacciare l'LCD con MSP430
- Programmazione di MSP430 utilizzando Code Composer Studio per display LCD
Questo articolo è la continuazione della nostra serie di tutorial sulla programmazione di MSP430 utilizzando Code Composer Studio. L'ultimo tutorial era basato su interrupt esterni su MSP430 utilizzando pin GPIO. Questo tutorial riguarda l' interfacciamento di un display con MSP430, quando si tratta di visualizzare il display LCD 16 * 2, è la prima scelta per qualsiasi hobbista elettronico. In precedenza abbiamo anche interfacciato LCD con MSP430 utilizzando l'IDE di Arduino, in questo tutorial useremo la piattaforma di studio Code Composer nativa invece di utilizzare l'IDE di Arduino, in questo modo come designer, otteniamo maggiore flessibilità.
Per saperne di più sul display LCD 16x2 e utilizzarlo con altri microcontrollori, vedere i tutorial di seguito.
- Interfacciamento LCD con ATmega16
- Interfacciamento LCD con Raspberry Pi
- Interfacciamento LCD con microcontrollore PIC
- Interfacciamento LCD con ARM7-LPC2148
- Interfacciamento LCD con NodeMCU
- Interfacciamento LCD con STM32
- Interfacciamento LCD con MSP430G2
- Interfacciamento LCD con STM8
Ha un IC integrato hd44780 che può memorizzare il comando ei dati ad esso passati. Il modulo LCD ha circa 16 pin. 8 dei quali sono pin dati, 4 sono pin di alimentazione per LED di retroilluminazione e l'intero modulo LCD, 3 per il controllo del funzionamento e 1 pin per la regolazione del contrasto. Il tutorial si basa sulla libreria creata da Dennis Eichmann. È molto facile usare una libreria con funzioni separate per stampare diversi tipi di dati. Ha anche disposizioni per visualizzare i dati in diverse forme con zeri iniziali, vuoti e cancellati. È una libreria piuttosto ampia e completa ed è configurabile per le diverse connessioni. Qui, il file di intestazione viene modificato per accogliere una configurazione parallela a 8 pin per la comunicazione dei dati.
Display LCD alfanumerico 16x2
Un display 16x2 generico ha un IC hd44780 integrato (cerchiato in rosso sotto), che può memorizzare il comando ei dati passati ad esso. Il modulo LCD ha circa 16 pin. 8 dei quali sono pin dati, 4 sono pin di alimentazione per LED di retroilluminazione e l'intero modulo LCD, 3 per il controllo del funzionamento e 1 pin per la regolazione del contrasto.
Questo modulo LCD è mostrato sopra versatile e utilizza pin minimi rispetto ad altri LCD segmentati. Se sei curioso di sapere come funziona esattamente tutto questo, dovresti dare un'occhiata al funzionamento del display LCD 16x2 dove abbiamo già discusso in dettaglio come funziona il display LCD.
Pin RS: RS = 1 abiliterà il registro dati nell'LCD, che viene utilizzato per scrivere i valori nel registro dati nell'LCD. RS = 0 abiliterà il registro delle istruzioni del display LCD.
Abilita pin: trigger sul fronte negativo; quando il pin viene modificato dallo stato HIGH allo stato LOW, viene richiesto al display LCD di scrivere sui pin dei dati. Attivazione del fronte positivo; quando il pin viene modificato dallo stato BASSO allo stato ALTO, viene richiesto al display LCD di leggere dai pin dati.
Pin R / W: R / W = 0 scriverà nel registro delle istruzioni o nel registro dei dati secondo la selezione del pin RS. R / W = 1 leggerà da IR o DR secondo la selezione del pin RS.
Operazione RS R / W
0 0 Scrittura IR come operazione interna (cancellazione del display, ecc.)
0 1 Lettura flag di occupato (DB7) e contatore indirizzi (da DB0 a DB6)
1 0 Scrittura DR come operazione interna (da DR a DDRAM o CGRAM)
1 1 DR letto come operazione interna (da DDRAM o CGRAM a DR)
Pin D0-D7: i dati vengono trasferiti da e verso il comando e i registri dati tramite questi pin.
Pin di alimentazione: i pin V ss, V dd vengono utilizzati per alimentare il modulo LCD. I pin A, K alimenteranno la retroilluminazione a LED. I pin V 0 vengono utilizzati per controllare il contrasto.
Libreria CCS LCD 16x2 per MSP430
Il tutorial si basa sulla libreria creata da Dennis Eichmann. È molto facile usare una libreria con funzioni separate per stampare diversi tipi di dati. Ha anche disposizioni per visualizzare i dati in diverse forme con zeri iniziali, vuoti e cancellati. È una libreria piuttosto ampia e completa ed è configurabile per le diverse connessioni. Qui, il file di intestazione viene modificato per accogliere una configurazione parallela a 8 pin per la comunicazione dei dati. La libreria può essere scaricata dal collegamento sottostante, dopo il download seguire i passaggi seguenti per aggiungere la libreria a CCS.
Scarica la libreria 16x2 per MSP430 - Code Composer Studio
Passaggio 1: creazione di file e progetti
Un progetto CCS predefinito viene creato utilizzando il menu file. Nella finestra di dialogo Crea progetto, seleziona il dispositivo e dai hd44780 come nome del progetto. In Tipo di progetto e toolchain, seleziona il tipo di output come libreria statica e crea il progetto.
Nella corsia Project Explorer (lato sinistro), crea un file di intestazione all'interno della cartella di inclusione e chiamalo hd44780.h . Quindi copia il contenuto del file hd44780.h scaricato in quello appena creato.
Ora crea il progetto principale cambiando il tipo di output in un eseguibile e crea un progetto chiamato CCS_LCD .
Passaggio 2: includere i percorsi di ricerca nel progetto principale
Nella finestra di dialogo delle proprietà del progetto hd44780 e all'interno delle opzioni di inclusione per il compilatore MSP430, aggiungi la cartella di inclusione nel file del percorso di ricerca.
Quindi creare questo progetto per creare i file di linker necessari come i file.lib . La compilazione di questo creerà il file hd44780.lib all'interno della cartella di debug.
Passaggio 3: includere i percorsi di ricerca per Linker
Nella finestra di dialogo delle proprietà del progetto CCS_LCD e nel percorso di ricerca dei file della scheda MSP430 Linker, includere il file hd44780.lib che si trova nella cartella di debug del progetto hd44780. La cartella di debug è inclusa anche nel percorso di ricerca dei file.
La cartella include viene nuovamente aggiunta alle opzioni include del compilatore MSP430 del progetto CCS_LCD .
La libreria è stata compilata con successo e aggiunta al linker del progetto principale.
Funzioni LCD per display LCD 16x2 su MSP430
void hd44780_timer_isr (void): viene chiamato periodicamente nell'ISR del timer A. Il timer A viene utilizzato per eseguire periodicamente le funzioni dell'LCD come cancellare lo schermo, impostare il cursore e visualizzare i dati. La funzione deve essere utilizzata nell'ISR. Non restituisce nulla.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Scriverà la stringa specificata nel primo argomento.
char * ch__string: la stringa da scrivere nel buffer dati (all'interno della funzione hd44780_timer_isr ). I dati verranno copiati nel registro dei dati e nel registro delle istruzioni dell'LC LCD quando viene periodicamente chiamato hd44780_timer_isr .
uint8_t u8__row: definisce la riga in cui verrà scritta la stringa.
uint8_t u8__column: definisce la colonna in cui verrà scritta la stringa.
uint8_t u8__cr_lf: Se è impostato a 1, la riga verrà portata a quella successiva. Se è 0, la stampa si interrompe sulla stessa riga.
void hd44780_clear_screen (void): questa funzione cancellerà l'intero schermo. Non restituisce nulla.
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): la funzione visualizzerà il valore a 16 bit non firmato dell'LCD.
uint16_t u16__value: il numero intero da visualizzare è dato nel primo argomento.
uint8_t u8__leading_zero_handling: Se viene passato 0, verranno mostrati gli zeri iniziali fino al valore intero. Se viene passato 1, gli zeri verranno cancellati. Se 2 viene passato come parametro, verranno mostrate solo le cifre significative.
uint8_t u8__row: la riga in cui è visualizzato il numero intero è selezionata.
uint8_t u8__column: la colonna da stampare viene selezionata utilizzando l'argomento.
uint8_t u8__cr_lf: Se è impostato a 1, la riga verrà portata a quella successiva. Se è 0, la stampa si interrompe sulla stessa riga.
Schema del circuito per interfacciare l'LCD con MSP430
Lo schema elettrico completo è illustrato nell'immagine sottostante. Come puoi vedere, i collegamenti hardware sono molto semplici e abbiamo alimentato la scheda completa utilizzando un adattatore 5V.
I collegamenti sono realizzati come da disegno sopra. Si prega di guardare nella tabella sottostante per i collegamenti dettagliati.
Vss | Massa dell'alimentatore 5V |
Vdd | 5V |
V0 | Uscita potenziometro |
RS | P2.1 |
R / W | Terra |
E | 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 |
UN | Resistore da 220 Ohm |
K | Terra |
L'anodo della retroilluminazione a LED non può essere collegato direttamente a un'alimentazione a 5V. Deve essere collegato a una resistenza per ridurre al minimo il flusso di corrente attraverso il modulo LCD. Ho effettuato i miei collegamenti utilizzando una scheda perf per saldare l'LCD e quindi ho usato i cavi dei ponticelli per collegare l'LCD con la scheda MSP430, la mia configurazione è simile a questa qui sotto ma puoi anche usare semplicemente una breadboard per effettuare i tuoi collegamenti.
Programmazione di MSP430 utilizzando Code Composer Studio per display LCD
Il codice completo utilizzato in questo progetto è fornito in fondo a questa pagina. La spiegazione dell'utilizzo del codice è la seguente. Innanzitutto, apri il file di intestazione (hd44780.h) e includi il numero di parte del microcontrollore nella prima parte del file.
#include "msp430g2553.h"
Il timer watchdog deve essere prima arrestato. I registri di controllo DCOCTL e BCSCTL1 vengono utilizzati per configurare l'oscillatore del microcontrollore. Le righe seguenti configureranno MCLK per essere 1 MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
I pin della porta 1 devono essere menzionati come output, che deve essere utilizzato per i pin dati. Anche il pin 0 e il pin 1 devono essere menzionati come output nella porta 2, che verrà utilizzata per i pin RS e R / W.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
Il timer integrato viene utilizzato per visualizzare periodicamente i valori. Il timer A è selezionato con SMCLK (1MHZ) come sorgente di clock e la modalità continua è la modalità di funzionamento.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
Gli interrupt per i canali di confronto 1 e 2 e l'interrupt di overflow del timer condividono lo stesso vettore di interrupt ( TIMER0_A1_VECTOR ) con indirizzi iniziali diversi. Capture compare il canale 1 (CCR1) utilizza 2 come indirizzo, che viene utilizzato nel caso dello switch.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { case 2: { hd44780_timer_isr (); rompere; } } }
Dopo aver compilato il codice, è possibile caricarlo sulla scheda MSP430, come spiegato nella guida introduttiva al tutorial MSP430. Se tutto va come previsto, dovresti vedere il tuo display LCD un po 'di contrasto come mostrato di seguito.
Se il tuo test è molto debole, puoi provare a regolare il potenziometro per ottenere un contrasto migliore. Il funzionamento completo del progetto si trova anche nel video linkato di seguito. Spero che il progetto ti sia piaciuto e che sia stato interessante crearne uno tuo. Se hai domande, lasciale nella sezione commenti qui sotto. Puoi anche scrivere tutte le tue domande tecniche sui forum per ottenere una risposta o per avviare una discussione.