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.
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.
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.
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
###
#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 ) = '