- Display LCD alfanumérico 16x2
- Biblioteca 16x2 LCD CCS para MSP430
- Funções de LCD para display LCD 16x2 em MSP430
- Diagrama de circuito para interface de LCD com MSP430
- Programando MSP430 usando Code Composer Studio para display LCD
Este artigo é a continuação de nossa série de tutoriais sobre a programação do MSP430 usando o Code Composer Studio. O último tutorial foi baseado em interrupções externas no MSP430 usando pinos GPIO. Este tutorial é sobre a interface de um display com o MSP430, quando se trata de exibir o display LCD 16 * 2, é a primeira escolha para qualquer amador eletrônico. Anteriormente, também fizemos a interface do LCD com MSP430 usando Arduino IDE, neste tutorial, usaremos a plataforma de estúdio Code Composer nativa ao invés de usar o Arduino IDE, desta forma, como designer, temos mais flexibilidade.
Para saber mais sobre o display LCD 16x2 e como usá-lo com outros microcontroladores, consulte os tutoriais abaixo.
- Interface LCD com ATmega16
- Interface de LCD com Raspberry Pi
- Interface de LCD com microcontrolador PIC
- Interface de LCD com ARM7-LPC2148
- Interface de LCD com NodeMCU
- Interface LCD com STM32
- Interface de LCD com MSP430G2
- Interface de LCD com STM8
Ele tem um IC hd44780 embutido que pode armazenar o comando e os dados passados a ele. O Módulo LCD tem cerca de 16 pinos. 8 dos quais são pinos de dados, 4 deles são pinos de alimentação para backlight LED e todo o módulo LCD, 3 para controle de operação e 1 pino para ajuste de contraste. O tutorial é baseado na biblioteca criada por Dennis Eichmann. É muito fácil usar uma biblioteca com funções separadas para imprimir diferentes tipos de dados. Ele também tem disposições para exibir os dados em diferentes formas com zeros à esquerda, em branco e excluídos. É uma biblioteca bastante ampla e abrangente e pode ser configurada para as diferentes conexões. Aqui, o arquivo de cabeçalho é modificado para acomodar uma configuração paralela de 8 pinos para comunicação de dados.
Display LCD alfanumérico 16x2
Um display 16x2 genérico tem um HD44780 IC embutido (circulado em vermelho abaixo), que pode armazenar o comando e os dados passados a ele. O Módulo LCD tem cerca de 16 pinos. 8 dos quais são pinos de dados, 4 deles são pinos de alimentação para backlight LED e todo o módulo LCD, 3 para controle de operação e 1 pino para ajuste de contraste.
Este módulo LCD é mostrado acima versátil e usa pinos mínimos em comparação com outros LCDs segmentados. Se você está curioso para saber exatamente como tudo isso funciona, você deve verificar o funcionamento do display LCD 16x2 onde já discutimos em detalhes como o LCD funciona.
Pino RS: RS = 1 habilitará o registro de dados no LCD, que é usado para gravar os valores no registro de dados no LCD. RS = 0 habilitará o registro de instruções do LCD.
Pino de habilitação: acionado por borda negativa; quando o pino é alterado do estado HIGH para o estado LOW, o LCD é solicitado a gravar nos pinos de dados. Ativado por borda positiva; quando o pino é alterado do estado LOW para o estado HIGH, o LCD é solicitado a ler os pinos de dados.
Pino R / W: R / W = 0 gravará no registrador de instrução ou registrador de dados de acordo com a seleção do pino RS. R / W = 1 lerá do IR ou DR de acordo com a seleção do pino RS.
Operação RS R / W
0 0 gravação de IV como uma operação interna (exibição clara, etc.)
0 1 Sinalizador de leitura de ocupado (DB7) e contador de endereço (DB0 a DB6)
1 0 gravação DR como uma operação interna (DR para DDRAM ou CGRAM)
1 1 DR lido como uma operação interna (DDRAM ou CGRAM para DR)
Pinos D0-D7: Os dados são transferidos de e para o comando e os registros de dados por meio desses pinos.
Pinos de alimentação: os pinos V ss, V dd são usados para alimentar o Módulo LCD. Os pinos A, K irão alimentar a luz de fundo LED. Pinos V 0 são usados para controlar o contraste.
Biblioteca 16x2 LCD CCS para MSP430
O tutorial é baseado na biblioteca criada por Dennis Eichmann. É muito fácil usar uma biblioteca com funções separadas para imprimir diferentes tipos de dados. Ele também tem disposições para exibir os dados em diferentes formas com zeros à esquerda, em branco e excluídos. É uma biblioteca bastante ampla e abrangente e pode ser configurada para as diferentes conexões. Aqui, o arquivo de cabeçalho é modificado para acomodar uma configuração paralela de 8 pinos para comunicação de dados. A biblioteca pode ser baixada no link abaixo, após baixar você siga os passos abaixo para adicionar a biblioteca ao CCS.
Baixe a biblioteca 16x2 para MSP430 - Code Composer Studio
Etapa 1: Criação de arquivos e projetos
Um projeto CCS padrão é criado usando o menu de arquivo. Na caixa de diálogo Criar projeto, selecione o dispositivo e dê hd44780 como o nome do projeto. Em Tipo de projeto e conjunto de ferramentas, selecione o tipo de saída como uma biblioteca estática e crie o projeto.
Na pista Explorador de Projetos (lado esquerdo), crie um arquivo de cabeçalho dentro da pasta de inclusão e nomeie-o como hd44780.h . Em seguida, copie o conteúdo do arquivo hd44780.h baixado para este arquivo recém-criado.
Agora crie o projeto principal alterando o tipo de saída para um executável e crie um projeto denominado CCS_LCD .
Etapa 2: Incluir os Caminhos de Pesquisa para o Projeto Principal
Na caixa de diálogo de propriedades do projeto hd44780 e dentro das opções de inclusão do compilador MSP430, adicione a pasta de inclusão no arquivo o caminho de pesquisa.
Em seguida, construa este projeto para criar os arquivos de vinculação necessários, como arquivos.lib . Construir isso criará o arquivo hd44780.lib dentro da pasta de depuração.
Etapa 3: inclua os caminhos de pesquisa para o linker
Na caixa de diálogo de propriedades para o projeto CCS_LCD e no caminho de pesquisa de arquivo da guia MSP430 Linker, inclua o hd44780.lib localizado dentro da pasta de depuração do projeto hd44780. A pasta de depuração também está incluída no caminho de pesquisa de arquivos.
A pasta de inclusão é novamente adicionada às opções de inclusão do compilador MSP430 do projeto CCS_LCD .
A biblioteca é compilada com êxito e adicionada ao vinculador do projeto principal.
Funções de LCD para display LCD 16x2 em MSP430
void hd44780_timer_isr (void): É chamado periodicamente no ISR do Timer A. O Timer A é usado para fazer periodicamente as funções do LCD, como limpar a tela, definir o cursor e exibir os dados. A função deve ser usada no ISR. Não retorna nada.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Ele escreverá a string especificada no primeiro argumento.
char * ch__string: a string a ser gravada no buffer de dados (dentro da função hd44780_timer_isr ). Os dados serão copiados para o registrador de dados e para o registrador de instruções do IC LCD quando o hd44780_timer_isr for chamado periodicamente.
uint8_t u8__row: Define a linha na qual a string será escrita.
uint8_t u8__column: Define a coluna na qual a string será escrita.
uint8_t u8__cr_lf: Se for definido como 1, a linha será carregada para a próxima. Se for 0, a impressão pára na mesma linha.
void hd44780_clear_screen (void): Esta função irá limpar a tela inteira. Não retorna nada.
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): A função exibirá o valor não assinado de 16 bits no LCD.
uint16_t u16__value: O inteiro a ser exibido é fornecido no primeiro argumento.
uint8_t u8__leading_zero_handling: Se 0 for passado, zeros à esquerda serão mostrados e o valor inteiro será mostrado. Se 1 for passado, os zeros serão apagados. Se 2 for passado como parâmetro, apenas os dígitos significativos serão mostrados.
uint8_t u8__row: A linha na qual o inteiro é exibido é selecionada.
uint8_t u8__column: A coluna a ser impressa é selecionada usando o argumento.
uint8_t u8__cr_lf: Se for definido como 1, a linha será carregada para a próxima. Se for 0, a impressão pára na mesma linha.
Diagrama de circuito para interface de LCD com MSP430
O diagrama completo do circuito é ilustrado na imagem abaixo. Como você pode ver, as conexões de hardware são muito simples e alimentamos a placa completa usando um adaptador de 5V.
As conexões são feitas conforme o esboço acima. Consulte a tabela abaixo para obter as conexões detalhadas.
Vss | Terra da fonte de alimentação 5V |
Vdd | 5V |
V0 | Saída do potenciômetro |
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 |
UMA | Resistor 220 Ohm |
K | Terra |
O ânodo da luz de fundo LED não pode ser conectado diretamente a uma fonte de 5V. Deve ser conectado a uma resistência para minimizar o fluxo de corrente através do Módulo LCD. Fiz minhas conexões usando uma placa perf para soldar o LCD e, em seguida, usei fios de jumper para conectar o LCD à placa MSP430, minha configuração é a seguinte, mas você também pode simplesmente usar uma placa de ensaio para fazer as conexões.
Programando MSP430 usando Code Composer Studio para display LCD
O código completo usado neste projeto é fornecido no final desta página. A explicação de como usar o código é a seguinte. Primeiro, abra o arquivo de cabeçalho (hd44780.h) e inclua o número de peça do microcontrolador na primeira parte do arquivo.
#include "msp430g2553.h"
O cronômetro de watchdog deve ser interrompido primeiro. Os registros de controle DCOCTL e BCSCTL1 são usados para configurar o oscilador do microcontrolador. As linhas abaixo irão configurar o MCLK para 1MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
Os pinos da porta 1 devem ser mencionados como saída, que deve ser usada para os pinos de dados. O pino 0 e o pino 1 também devem ser mencionados como saída na porta 2, que será usada para os pinos RS e R / W.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
O cronômetro embutido está sendo usado para exibir valores periodicamente. O temporizador A é selecionado com SMCLK (1MHZ) como a fonte do relógio e o modo contínuo sendo o modo de operação.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
As interrupções para os canais de comparação 1 e 2 e a interrupção de overflow do temporizador compartilham o mesmo vetor de interrupção ( TIMER0_A1_VECTOR ) com endereços iniciais diferentes. O canal 1 de comparação de captura (CCR1) usa 2 como o endereço, que está sendo usado no caso do switch.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { case 2: { hd44780_timer_isr (); pausa; } } }
Depois de ter seu código compilado, você pode carregá-lo na placa MSP430, conforme explicado no tutorial de introdução ao MSP430. Se tudo correr conforme o esperado, você deverá ver algum contraste no visor LCD, conforme mostrado abaixo.
Se o seu teste estiver muito escuro, você pode tentar ajustar o potenciômetro para obter melhor contraste. O funcionamento completo do projeto também pode ser encontrado no vídeo no link abaixo. Espero que você tenha gostado do projeto e achado interessante construir o seu próprio. Se você tiver alguma dúvida, deixe-as na seção de comentários abaixo. Você também pode escrever todas as suas perguntas técnicas em fóruns para obter respostas ou para iniciar uma discussão.