Módulo de exibição de rolagem LCD – (Parte 30/46)

Módulo de exibição de rolagem LCD – (Parte 30/46)

Um microcontrolador é um dispositivo que possui um processador embutido cercado por alguns módulos de hardware dedicados. Assim que o microcontrolador os inicializa, eles começam a operar por conta própria. No caso de um ADC ele fará a amostragem e a conversão digital para analógico sozinho e manterá os dados convertidos em seu buffer para que o microcontrolador possa lê-los posteriormente. A vantagem deste tipo de implementação é que o microcontrolador fica livre para realizar outras tarefas durante esse período e, portanto, aumentar a eficiência geral. Foi o caso dos módulos de hardware ou periféricos dentro de um microcontrolador que aumentam a eficiência de processamento do processador embutido. A eficiência pode aumentar ainda mais se o hardware externo conectado ao microcontrolador também puder realizar muito mais tarefas por conta própria, sem depender do microcontrolador. O hardware pode ou não conter outro processador para que possa executar determinada tarefa predeterminada após inicializado pelo microcontrolador.
Um exemplo de tal dispositivo é o display de rolagem LCD serial. Assim que os dados a serem exibidos em rolagem forem recebidos do microcontrolador, ele iniciará a operação por conta própria e realizará o processo de rolagem. Este projeto explica interface do MÓDULO LCD com qualquer tipo de controlador usando um único pino de recepção serial. Neste modo apenas um pino é usado para enviar dados. Este modo de exibição de rolagem tem vantagem sobre o modo de 8 bits, pois usa apenas um único pino. Os pinos restantes do controlador estão disponíveis para uso normal e o valioso poder de processamento necessário para rolar os dados pode ser usado para qualquer outra finalidade.

O projeto é discutido em duas partes.

Parte 1: Para criar um módulo LCD

Na parte um módulo LCD é criado usando o controlador AVR e o display LCD alfanumérico 16×2. O controlador ATMEGA16 controla o LCD. O código programado despejado permanentemente neste atmega16 está controlando o módulo LCD. Um único pino receptor (RXD -14) do ATMEGA16 é a única entrada deste módulo LCD. Os dados recebidos pela comunicação serial são exibidos no módulo LCD em forma de rolagem.
  Configuração do circuito do módulo LCD construído usando controlador AVR e display LCD alfanumérico 16x2
Fig. 2: Configuração do circuito do módulo LCD construído usando controlador AVR e display LCD alfanumérico 16×2
Parte 2: Interface do módulo LCD usando qualquer outro microcontrolador.
Na parte dois o controlador utilizado em nosso projeto é outro chip AVR. Os dados são enviados para o módulo LCD via pino de transmissão serial (TXD-15). Uma chave demonstrada em nosso projeto fornece a entrada para o controlador.
Interface do módulo LCD com o segundo microcontrolador AVR para
Fig. 3: Interface do módulo LCD com o segundo microcontrolador AVR para
Um texto predefinido é transmitido ao módulo LCD sempre que o botão é pressionado. Qualquer que seja o texto enviado, os dados serão rolados no módulo LCD.
Comunicação de dados entre o Módulo LCD e o AVR através da configuração do circuito de transmissão serial na placa de ensaio
Fig. 4: Comunicação de dados entre o Módulo LCD e o AVR através da configuração do circuito de transmissão serial na placa de ensaio
A partir desta demonstração pode-se notar que 8 pinos de dados e 3 pinos de controle do microcontrolador podem ser salvos. Esses pinos salvos podem ser usados ​​para qualquer outra finalidade.
Descrição do circuito:
As conexões do LCD com ATmega16 são mostradas no diagrama de circuito. No modo 4 bits, as linhas de dados devem ser conectadas aos pinos D4, D5, D6 e D7 do módulo LCD.

Código-fonte do projeto

###


#define F_CPU 8000000
#include #include #include #include #include "usart.h" void switch_init(void); int principal (void) { usart_init ; switch_init ; enquanto (1) { PORTD &= 0x7F; _atraso_ms (2000); PORTD = 0x80; enquanto ( 0x0F == ( PINC & 0x0F ) ); //espera até que qualquer tecla seja pressionada _atraso_ms(50); usart_send_string ( "Esta é uma demonstração da interface do módulo de exibição de rolagem LCD de linha única pela Garagem dos Engenheiros !!!n" ); _atraso_ms(500); } } vazio switch_init ( vazio ) { cli ; DDRC &= 0xE0; PORTC = 0xFF; DDRD = 0x80; PORTD = 0x80; }

#define _USART_H #ifndef F_CPU #define F_CPU 8000000 #endif #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #include #include #include void usart_init ; void usart_putch(envio de caractere não assinado); unsigned int usart_getch ; void usart_send_string(const char* dados); int uart_print(char c, ARQUIVO *fluxo); ARQUIVO uart_out = FDEV_SETUP_STREAM(uart_print, NULL, _FDEV_SETUP_WRITE); int uart_print(char c, FILE *stream) { if (c == 'n') uart_print('r', stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; retornar 0; } void usart_init { UCSRB = (1<> 8); // Carrega os 8 bits superiores do valor da taxa de transmissão.. // no byte alto do registro UBRR stdout = &uart_out; } void usart_putch(envio de caractere não assinado) { while ((UCSRA & (1 << UDRE)) == 0); // Não faça nada até que o UDR esteja pronto. // para que mais dados sejam gravados nele UDR = send; // Envia o byte } unsigned int usart_getch { while ((UCSRA & (1 << RXC)) == 0); // Não faça nada até que os dados tenham sido recebidos e estejam prontos para serem lidos no UDR return(UDR); // retorna o byte } void usart_send_string(const char* data) { for(; *data; data ++) usart_putch(*data); } #fim se

###

Código-fonte do projeto

###

#ifndef _LCD_H #define _LCD_H  #ifndef F_CPU #define F_CPU 8000000 #endif  #include<avr/io.h> #include<util/delay.h> #include<inttypes.h> #include <stdio.h> #include <string.h>  #define rs PA0 #define rw PA1 #define en PA2   void lcd_init ; void dis_cmd(char); void dis_data(char); void lcdcmd(char); void lcddata(char); void lcd_clear(void); void lcd_2nd_line(void); void lcd_1st_line(void); void lcd_string(const char *data); int lcd_print(char c, FILE *stream); int lcd_scroll(const char *data);  FILE lcd_out = FDEV_SETUP_STREAM(lcd_print, NULL,                                          _FDEV_SETUP_WRITE);  char disp_beg   = "                ";  int lcd_print(char c, FILE *stream) {   if('n' == c)   	lcd_2nd_line ;   else     dis_data(c);    return 0; } #define F_CPU 8000000  #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/interrupt.h> #include "lcd.h" #include "usart.h"  char A ( 150 ); char B ( 150 );  int main ( void ) { 	int i;  	usart_init  ;  	cli ;  	lcd_init  ;  	printf ( "    ENGINEERS   "); 	printf ( "n     GARAGE     ");  	for ( i = 0; 'n' != ( A ( i ) = usart_getch   ); i ++ ); 	A ( i ) = '
Vissza a bloghoz

Hozzászólás írása

A hozzászólásokat közzététel előtt jóvá kell hagyni.