Usando Display Gráfico com C18 e C30 Elaborado por: Revisado por: Tiago Coelho Magalhães Marcelo M. M. do Couto José Domingos Adriano Todos os documentos aqui referidos neste material encontram-se na pasta destinada à aplicação do LCD Gráfico. 1. Introdução O presente documento é um descritivo técnico do firmware denominado LCDGRAFICO desenvolvido pela equipe de engenharia da Exsto Tecnologia. O LCDGRAFICO é uma aplicação do Lcd Gráfico para os compiladores C18 e C30. Estes firmwares de exemplo foram desenvolvidos focados nos KIT NEO 201 e Sigma128 para os microcontroladores 18F452 e dspic33f128 da Microchip respectivamente. Foi usado como plataforma de programação o MPLAB 7.43, também da Microchip. Foi escolhida como linguagem de programação a C. 2. Hardware O hardware necessário para a aplicação do C18 é o da figura seguinte, composto pelo GLCD e por um microcontrolador PIC18F452. O oscilador do circuito é de 12MHz. O portal D do microcontrolador tem acesso aos bits de dados do GLCD. Além dele, o portal E e A têm acesso ao bits de controle. Para ajuste do contraste do LCD é necessário um potenciômetro de 10K no pino Vl do Display. O canal 0 do conversor AD lê o potenciômetro de 10K. O hardware do código do C30 foi baseado no Sigma128, que é baseado no dspic33f128 e sua aplicação é feita para mostrar algumas figuras geométricas, um logo da exsto e uma string com o site da empresa. www.exsto.com.br 1
3. Firmware O firmware tem como objetivo principal apresentar uma aplicação do kit NEO201 e do Sigma128 utilizando o LCD Gráfico. Para o NEO 210 é apresentada a leitura do potenciômetro R26 com a escala de resistência mostrada em barras no LCD. Além disso, é desenhado o logo da empresa Exsto Tecnologia. No Sigma128 somente o logo é visualizado. A parte onde se aplica o código do usuário está contida no arquivo main.c. Além dele, existem três outros arquivos. Dois contêm as definições de hardware chamado definitions.h e o outro contém as definições para a biblioteca do GLCD chamado GLCD.h. O outro contém as rotinas gráficas e específicas para o LCD e se chama GLCD.c. Os arquivos com extensão.h são chamados de arquivos cabeçalhos, sendo que não possui nenhuma lógica implementada. Os arquivos com extensão.c são os que executam alguma lógica. Como citado anteriormente, o firmware é dividido em várias partes, em vários arquivos e em várias sub-rotinas, procura-se nos itens posteriores descrever todas esses citados. Como a biblioteca é padrão para todos os dois compiladores, é necessário, no inicio do programa, especificar o compilador. Usa-se: #define _C30_ para os códigos do Sigma128 e #define _C18_ para o NEO por exemplo. 2.1 Programa principal O programa principal se divide em: 1. Configuração dos Portais 2. Inicialização dos Portais 3. Código do usuário 2.1.1 Configuração dos Portais Nesta etapa o firmware configura os portais do microcontrolador como entrada e saída e seus estados iniciais. Esta configuração é feita no próprio main. Mas há também as definições de pinagem para o hardware, onde estão descritos os pinos do microcontrolador e seus respectivos nomes, por exemplo, o pino A2 é o CS1 do LCD, portanto usa-se a diretiva: #define CS1 PORTAbits.RA2 para definir o nome do pino. Utiliza para isso o arquivo de cabeçalho definitions.h. 2.1.3 Código do usuário É o espaço destinado ao usuário para colocar seu código. 2.2 Sub-Rotinas Essas sub-rotinas são utilizadas pelo programa para fazer determinadas funções, como apagar o display, desenhar retângulos e círculos, etc. Elas estão incluídas no arquivo GLCD.c. 2.2.1 void delay10us (void) Esta função gera um atraso de 10us. Esta www.exsto.com.br 2
2.2.2 void delay100us (void) Esta função gera um atraso de 100us. Esta 2.2.3 void delay5ms (void) Esta função gera um atraso de 5ms. Esta 2.2.4 void glcddat (unsigned char DAT) Esta função envia um dado ao Display Gráfico. 2.2.5 void glcdinst (unsigned char INST) Esta função envia uma instrução ao Display Gráfico. 2.2.6 void glcdwaitbusy (void) Esta função espera até que o Display Gráfico esteja pronto para receber mais instruções ou dados. 2.2.7 void glcdinit (void) Esta função inicia o LCD Gráfico. Os comandos são: * 0xC0 -> Especifica a linha da RAM que deve ser mostrada no topo da tela. Esta é a linha 0. * 0x40 -> Este é o endereço de coluna. Ele especifica uma das 64 colunas possíveis. Esta é a coluna 0. * 0xB8 -> Este é o endereço de páginas. Ele especifica uma das 8 páginas possíveis. Esta é a página 0. * 0x3F -> Display On/Off. 0x3F liga dislay e 0x3E o desliga. 2.2.8 void glcdclear (void) Esta função limpa a tela do LCD Gráfico. 2.2.9 void glcdprintimage (rom unsigned char *Msg) Esta função desenha uma imagem na tela do LCD Gráfico a partir da posição inicial da tela. 2.2.10 void glcdread (VOID) Esta função lê um dado na posição especificada do LCD Gráfico. Exemplo de código: glcdinst (64); //Posiciona em X glcdinst (0xB8); //Posiciona em Y readdat = glcdread ( ); //Recebe os dados em readdat 2.2.11 void glcdpixel (unsigned char X, unsigned char Y, unsigned char COLOR) Esta função acende ou apaga um Pixel em qualquer posição do LCD Gráfico. Os parâmetros de entrada contêm a posição de coluna (X) e de linha (Y), e se o pixel é aceso (COLOR= 1 ) ou apagado (COLOR= 0 ). Exemplo de código: glcdpixel (64, 34, 1); //Pixel aceso na coordenada (64, 34). glcdpixel (74, 24, 0); //Pixel apagado na coordenada (74, 24). 2.2.12 void glcdwritemsg (unsigned char *MSG, unsigned char X, unsigned char Y, unsigned char COLOR) Esta função escreve uma mensagem no LCD posição de coluna (X) e de linha (Y), onde a frase começará; os dados da mensagem a serem enviados ao display (*MSG); e se a frase terá o fundo apagado (COLOR= 0 ) ou fundo aceso (COLOR= 1 ). Exemplo de código: rom const char Msg1 [ ] = Hello world again ; //Declaração da mensagem glcdprintimage (Msg1); 2.2.13 void rectangle (unsigned char LENGTH, unsigned char WIDTH, unsigned char ORIGENX, unsigned char ORIGENY, unsigned char FILL) Esta função desenha um retângulo no LCD posição de coluna (ORIGENX) e de linha (ORIGENY), correspondente à coordenada central do retângulo; LARGURA (WIDTH) e COMPRIMENTO (LENGTH) informam as dimensões do retângulo; e se o retângulo terá o fundo apagado (FILL= 0 ) ou fundo aceso (FILL= 1 ). Exemplo de código: www.exsto.com.br 3
rectangle (10, 10, 50, 30, 0); //Faz um quadrado com centro em (50, 30) e laterais de raio igual a 10 unidades de comprimento. Ele terá seu fundo apagado, ou seja, somente as bordas aparecerão. 2.2.14 void circle (char RAY, charx, char Y) Esta função desenha um círculo no LCD posição de coluna (X) e de linha (Y), correspondente à coordenada central do círculo; RAY informa o raio do círculo. Exemplo de código: circle (10, 50, 30); //Faz um círculo com centro em (50, 30) e raio igual a 10 unidades de comprimento. 2.2.15 void line (char X1, char Y1, char X2, char Y2) Esta função desenha uma reta no LCD Gráfico. Os parâmetros de entrada contêm a posição de coluna (X1) e de linha (Y1), correspondente à coordenada inicial da reta e a posição de coluna (X2) e de linha (Y2), correspondente à coordenada final da reta. Exemplo de código: 2.2.16 Delay (int tempo) É uma rotina de atraso em milisegundos, determinado pelo valor tempo. Esta rotina é exclusiva para o C30. 2.2.17 Delay_Us (int tempo) É uma rotina de atraso em microsegundos, determinado pelo valor tempo. Esta rotina é exclusiva para o C30. 4. Software Para a geração do código.hex da imagem a ser desenhada no display, utiliza-se o software conversor BmptoAsm. Para converter a imagem, é necessário primeiramente editá-la para um formato de 128x64 pixels, que corresponde ao tamanho do GLCD. Depois, basta carregar a imagem no software e fazer a conversão. O código gerado é dado na própria janela do software. 5. Anexos Junto a este arquivo se encontram o manual do Display Gráfico e um material que auxilia o entendimento quanto ao funcionamento do display. line (10, 10, 50, 30); //Faz uma reta com origem em (10, 10) e fim em (50, 30).. 6. Organização dos Arquivos 6.1 Arquivos main.c: Este arquivo contém a iniciação do microcontrolador e aplicação do usuário. GLCD.c: contém as funções do display gráfico. definitions.h: contém as definições de hardware, variáveis globais, protótipos e inclusões de bibliotecas de funções. GLCD.h: contém as definições para a biblioteca do GLCD. www.exsto.com.br 4
7. Sobre os autores Marcelo M. M. do Couto, graduado no Inatel, é engenheiro de desenvolvimento atuante nas áreas de software e hardware utilizando sistemas microcontrolados. Atualmente cursando mestrado em redes de telecomunicações Tiago Coelho é Técnico em Eletrônica pela ETE Francisco Moreira da Costa e cursa Engenharia de Telecomunicações no INATEL. Atualmente encontra-se nos EUA participando de um programa de intercâmbio. www.exsto.com.br 5