Você está na página 1de 26

Circuitos de Interface para Microcontroladores

Adaptao livre de parte do documento AXE001_pic_electronics.pdf da Revolution Education Ltd.

ndice

1. O que um Microcontrolador PIC ? ____________________________________ 1 2. Interfaceamento do Microcontrolador ___________________________________ 1


2.1. Circuitos de interface standard ___________________________________________ 1
2.1.1. Circuito de interface com transstor _____________________________________________ 1 2.1.2. Circuito de interface com transstor Darlington ____________________________________ 2 2.1.3. Circuito de interface com rels ________________________________________________ 3 2.1.4. Circuito de interface com transistor FET _________________________________________ 3

2.2. Interface com Dispositivos de sada________________________________________ 4


2.2.1. LED _____________________________________________________________________ 4 2.2.2. Lmpada de sinalizao ______________________________________________________ 5 2.2.3. Bezouro ou Buzzer __________________________________________________________ 5 2.2.4. Altifalantes piezo-elctricos ___________________________________________________ 6 2.2.5. Micromotores ______________________________________________________________ 6 2.2.6. Motor passo-a-passo unipolar _________________________________________________ 8 2.2.7. Motor passo-a-passo bipolar _________________________________________________ 10 2.2.8. Servo radio-controlado______________________________________________________ 12 2.2.9. Solenides e vlvulas solenides ______________________________________________ 13

2.3. Interface com Dispositivos de Entrada ____________________________________ 14


2.3.1. Interruptores ______________________________________________________________ 14 Interruptores e ressaltos (debouncer) _____________________________________________ 15 2.3.2. Potencimetro ____________________________________________________________ 15 2.3.3. LDR (Light Dependent Resistor) ______________________________________________ 16 2.3.4. Termistor ________________________________________________________________ 18

2.4. Interface com Componentes Avanados ___________________________________ 18


2.4.1. Display LCD (Liquid Crystal Display) _________________________________________ 18 2.4.1.1. Caracteres LCD _______________________________________________________ 19 2.4.1.2. Interface de LCD a microcontoladores______________________________________ 19 Ligando o LCD usando O FRM010 (Serial LCD Firmware Chip) ____________________ 20 Ligando o LCD usando o AXE033 (Serial LCD Module) __________________________ 20 Ligando o LCD directamente ________________________________________________ 21 Um Programa Simples para escrever no LCD __________________________________ 21 Um Programa mais Avanado ______________________________________________ 22 Subrotinas Standard para ligar o LCD directamente. ____________________________ 22 Usando o conjunto de instrues (comandos) do LCD. ___________________________ 23 Cdigos das instrues (comandos) para o LCD. _______________________________ 23 Exemplos: _____________________________________________________________ 24

1. O que um Microcontrolador PIC ?


Os equipamentos controlados por microprocessadores so normalmente constitudos por vrios circuitos integrados ou chips, cada um com a sua funo, a saber: o microprocessador (CPU), uma memria EPROM com o programa, uma memria RAM para armazenamento de dados e interfaces de entrada/sada (I/O input/output) para ligao ao exterior. Pelo contrrio, os sistemas baseados em microcontroladores possuem um nico chip o microcontrolador. Um microcontrolador PIC um circuito integrado de pequenas dimenses e que contm num nico chip, a CPU, RAM, ROM e circuitos de interface. A grande variedade destes componentes possibilita que o mesmo fabricante oferea modelos com mais ou menos RAM, com outros dispositivos como portos de comunicao, conversores analgico/digitais, etc. Os microcontroladores PIC podem ser utilizados como crebro para controlar uma enorme variedade de equipamentos, desde mquinas de lavar a telemveis ou automveis, etc. Existem portanto aos milhes por todo o lado, sendo o seu custo muito reduzido. So, por isso, excelentes companheiros para a tarefa a que nos propomos: conceber um rob mvel autnomo, dotado de vrios sensores. Para isso as informaes provenientes desses sensores, de toque, de deteco de obstculos, de distncia, etc, devem ser adaptadas de forma a serem interpretadas pelo nosso PIC. Por outro lado, o controlo de dispositivos como motores ou rels tambm exige adaptao de sinal. desse assunto que iremos tratar nos prximos captulos.

2. Interfaceamento do Microcontrolador
Neste captulo iremos explicar como realizar as interfaces para que diferentes dispositivos de entrada e de sada possam ser ligados ao microcontrolador. Iremos tratar dos seguintes dispositivos:

2.1. Circuitos de interface standard


2.1.1. Circuito de interface com transstor
Muitos dos dispositivos de sada iro necessitar de um circuito de comutao por transstor. Para a maioria dos casos um par Darlington formado por dois transstores ideal. Contudo, este circuito necessita de dois transstores separados. possvel adquirir um dispositivo contendo os dois transstores num nico encapsulamento. Estes transstores designam-se Darlington e possuem elevado ganho. Um transstor como o BCX38B pode accionar correntes at 800 mA. Este ser o transstor utilizado em todos os exemplos deste manual.

Note que comum colocar um dodo invertido em paralelo com o dispositivo controlado (dodo de roda-livre). Isto essencial para cargas indutivas, como so os casos de motores e rels. Sempre que se desliga um destes dispositivos cria-se uma corrente inversa que iria destruir o transstor. Poder ser usado um vulgar dodo 1N4001.

2.1.2. Circuito de interface com transstor Darlington


Se for necessrio controlar mais do que um dispositivo, poder ser aconselhvel utilizar um integrado especfico, o ULN2003 Darlington driver IC, que contm 7 transstores Darlington e ainda os dodos de roda-livre num nico invlucro.

A verso ULN2803 contm 8 transstores. Se for necessrio controlar correntes mais elevadas podero ser ligadas duas sadas como na figura.

2.1.3. Circuito de interface com rels


Os rels podem ser utilizados para accionar dispositivos de maior potncia como motores e solenides. Nesse caso, o rel pode ser alimentado por uma fonte de alimentao separada, por exemplo 12 V. Note o uso do dodo de roda-livre em paralelo com a bobina do rel.

2.1.4. Circuito de interface com transistor FET


Os transstores de Potncia MOSFET podem ser utilizados em vez dos pares Darlington para accionamento de dispositivos de mdia potncia. O circuito a utilizar o da figura. Repare-se no uso do dodo de roda-livre. Os MOSFETs apresentam uma resistncia interna muito baixa (dcimas de ohm), pelo que a queda de tenso no transstor muito reduzida.

2.2. Interface com Dispositivos de sada


2.2.1. LED

Os pinos do microcontrolador PIC podem deixar passar (sink) ou fornecer (source) correntes de 20 mA, o que significa que possvel ligar directamente um LED a um pino de sada. Lembre-se de que os pinos de um microcontrolador como o PICAXE vm j configurados, uns como sadas e outros como entradas. Alguns so reprogramveis. Para limitar a corrente utiliza-se em srie uma resistncia de 330 ohms.

LED ligado massa. Para ligar o LED (ON) - high 1 Para desligar o LED (OFF) - low 1

LED ligado alimentao. Para ligar o LED (ON) - low 1 Para desligar o LED (OFF) - high 1

2.2.2. Lmpada de sinalizao


Para interfacear uma lmpada de sinalizao necessrio o circuito com transstor atrs referido. Isso resulta nomeadamente da elevada corrente utilizada pela lmpada mas tambm pode ser frequente esta necessitar de uma alimentao diferente da do microcontrolador. Nesse caso necessrio garantir que a massa (0V, GND) comum s duas alimentaes. Importa referir que como o nosso circuito vai ser alimentado por baterias ou pilhas a melhor soluo usar um LED, pois consome menos corrente. Para ligar a lmpada Para desligar a lmpada - high 1 - low 1

2.2.3. Bezouro ou Buzzer


Para interfacear um bezouro (buzzer) necessrio utilizar o circuito a transstor standard. No caso de se utilizar uma alimentao separada necessrio garantir que a massa (0V, GND) comum s duas alimentaes. No caso de se utilizarem baterias ou pilhas como fonte de alimentao, de lembrar que os altifalantes piezo-elctricos consomem menos corrente. Alm disso os bezouros apenas produzem uma frequncia, ao contrrio dos altifalantes piezo-elctricos que permitem reproduzir diferentes frequncias. Para ligar o buzzer Para desligar o buzzer -high 1 -low 1

2.2.4. Altifalantes piezo-elctricos


Pode usar-se um altifalante piezo-elctrico para produzir dieferentes sons. Os bezouros produzem som (rudo) quando so alimentados, enquanto que os altifalantes exigem um sinal pulsado (onda quadrada) para gerar o som. Felizmente isso fcil de produzir no PICAXE, pois existe uma instruo sound.

Para produzir uma nota de tom 100, durao 50 no pino 1 sound 1, (100,50) Para produzir um som variado usando a varivel b1 for b1 = 1 to 100 sound 1, (b1,25) next b1 ; a instruo sound repetida tomando os valores de tom ; de 1 a 100

2.2.5. Micromotores
Muitos projectos requerem a utilizao de motores de corrente contnua (CC) baratos para criar movimento circular. Existem vrias possibilidades de interfacear motores ao microcontrolador. O circuito da figura utiliza transistores Darlington para accionar o motor. Este circuito funciona bem com motores CC de brinquedos baratos. No entanto importa acautelar o facto de que os motores produzem muito rudo elctrico nas linhas de alimentao do microcontrolador, podendo lev-lo a deixar de funcionar.

Uma soluo para o rudo elctrico consiste em colocar entre os terminais do motor um condensador de polister (no polarizado) de 220nF.

Para accionar motores de maior potncia, pode usar-se o circuito a MOSFET anteriormente descrito.

Em vrias circunstncias ir ser necessrio accionar mais do que um motor, como o caso dos robs mveis. A soluo mais simples e barata consiste em utilizar um integrado motor driver como o L293D. Este integrado possibilita o controlo de dois motores CC, utilizando quatro pinos de sada do microcontrolador. Naturalmente se tivermos um s motor bastam dois pinos. Esta soluo ir ser utilizada nos nossos robs pois alm de permitir o accionamento nos dois sentidos dos dois motores, permite ainda o controlo de velocidade por PWM, como se ver mais frente.

Ambas as entradas baixas - o motor pra Primeira entrada alta, segunda entrada baixa - motor para frente Primeira entrada baixa, segunda entrada alta - motor para trs Ambas as entradas altas - motor pra A mudana dos sinais nos pinos de entrada tem o efeito de produzir a alterao do sentido da corrente no enrolamento do motor, logo do seu sentido de rotao.

Note que o L293D aquecer com uso intenso. O uso de um dissipador colocado no topo do integrado pode ajudar ao arrefecimento. No caso de montagens em placas prperfuradas (stripboard) a soldadura s pistas dos quatro terminais de massa centrais pode ajudar a dissipar. Uma maneira de reduzir os efeitos do rudo elctrico sobre o microcontrolador, consiste em usar fontes de alimentao separadas para a parte de controlo (microcontrolador) e para os motores. No caso dos robs que iremos construir, pode usar-se uma vulgar pilha de 9V com regulador de tenso para 5V para a electrnica e um pack de baterias de modelismo (NiCad ou NiMH de 9,6V) para os motores. Naturalmente continua a ser necessrio manter um terminal de massa comum s duas alimentaes. A separao total de circuitos pode ser realizada usando circuitos optoelectrnicos mas apenas se justifica, face sua complexidade, no caso de rudo elctrico excessivo, resultante de comutao de rels ou motores.

2.2.6. Motor passo-a-passo unipolar


Os motores passo-a-passo so motores muito precisos com aplicao corrente em leitores de discos de computadores, impressoras e relgios. Ao contrrio dos motores CC, que rodam livremente quando a alimentao aplicada, os motores passo-a-passo requerem que a alimentao seja aplica segundo um determinado padro. Para cada impulso, o motor passo-a-passo roda um passo (step), normalmente 7.5 graus (o que d 48 passos para uma rotao completa). Existem dois tipos principais de motores passo-a-passo - Unipolares e Bipolares. Os motores unipolares possuem normalmente quatro enrolamentos que so ligados (on) e desligados (off) numa sequncia determinada. Os motores bipolares possuem dois enrolamentos nos quais a corrente invertida numa sequncia idntica. O uso de motores bipolares tratado no captulo seguinte. Cada um dos quatro enrolamentos de um motor unipolar tem que ser comutado on e off numa certa ordem para que o motor rode. Muitos sistemas controlados por

microprocessador utilizam quatro pinos de sada para controlar cada um dos quatro enrolamentos.

Como o motor passo-a-passo alimentado a 12V, necessrio um circuito a transstor para cada enrolamento. Como os enrolamentos so indutivos, necessrio proteger cada transstor com um dodo de roda-livre. O uso do integrado ULN2003 (ou 2803) neste caso de particular relevncia, simplificando o nmero de componentes e as ligaes. A tabela abaixo apresenta os quatro passos necessrios para que o motor rode.

Analisando com cuidado a tabela, reparamos que existe um padro. O enrolamento 2 sempre o oposto (operao lgica NOT) do enrolamento 1. O mesmo se aplica aos enrolamentos 3 e 4. assim possvel reduzir a metade o nmero de pinos do microcontrolador necessrios para controlar o motor, desde que se acrescentem duas portas lgicas NOT. Na figura seguinte, este sistema implementado usando os transstores livres como inversores (portas NOT).

Nota: existem vrias normas quanto s cores dos condutores do motor.

Antes de comear a programar, existe um outro padro a verificar na sequncia de passos.

Analise a tabela, que mostra os enrolamentos 1 e 3.

Repare que na passagem do passo 1 para o passo 2, apenas muda o enrolamento 3. Repare agora no passo seguinte s o enrolamento 1 muda. De facto os dois enrolamentos mudam vez de alto para baixo sucessivamente. Esta passagem altobaixo-alto pode ser descrita como um estado de toggling. Isso torna a programao ainda mais simples basta usar a instruo toggle. steps: toggle 1 pause 200 toggle 2 pause 200 goto steps

; Toggle pino 1 ; Espera 200 ms ; Toggle pino 2 ; Espera 200ms ; Ciclo

Nota: Se o motor trepidar, verifique a ordem de ligaes dos condutores (cores).

2.2.7. Motor passo-a-passo bipolar


Os motores bipolares possuem dois enrolamentos que tm que ser accionados de modo a que a corrente circule nos enrolamentos pela sequncia adequada. A mudana de campo magntico que esses enrolamentos produzem faz com que o motor (rotor) rode por passos. O circuito normalmente utilizado para cada enrolamento o apresentado na figura seguinte. Repare que existem quatro transstores de controlo, que so activados aos pares. Assim, para dois enrolamentos existem quatro pares de transstores de controlo (Q1-Q4) que tm que ser activados on e off numa determinada sequncia.

10

Note que como os enrolamentos so indutivos, para proteger os transstores da extracorrente de rotura, so necessrios dodos de roda-livre em paralelo com cada um deles. A tabela abaixo mostra os quatro passos necessrios para fazer rodar o motor.

Afortunadamente, o motor driver L293D foi desenhado especificamente para esta funo de comutao. Cada L293D possui 8 transstores e os respectivos dodos num encapsulamento de 16 pinos. Quatro pinos do microcontrolador so ligados aos quatro pares de transstores (pinos 2, 7, 10 e 15).

11

O programa junto faz o motor rodar 100 passos para a esquerda e a seguir 100 passos para a direita, utilizando duas subrotinas. A subrotina lstep faz o motor rodar um passo para a esquerda, a subrotina rstep faz o motor rodar um passo para a direita. A varivel b1 utilizada para guardar a posio do passo e dever ser utilizada em qualquer outra parte do programa.
main: for b3 = 0 to 99 gosub lstep next b3 for b3 = 0 to 99 gosub rstep next b3 lstep: let b1 = b1 + 1 goto step rstep: let b1 = b1 - 1 step: let b1 = b1 & 2 lookup b1,(%1010,%1001,%0101,%0110),b2 let pins = b2 return ; inicia um ciclo for...next ; chama subrotina left step ; ciclo seguinte ; inicia um ciclo for...next ; chama subrotina right step ; ciclo seguinte ; soma 1 varivel b1 ; salta para tabela lookup ; subtrai 1 da varivel b1 ; mascara os dois bits menos pesados de b1 ; guarda o cdigo lookup em b2 ; faz sair o valor de b2 para os pinos de controlo

2.2.8. Servo radio-controlado

Os servos so vulgarmente utilizados nos carros e avies radiocontrolados para controlar mecanismos de direco. Trata-se de dispositivos muito precisos que rodam sempre o mesmo ngulo para um dado sinal, pelo que so ideais para utilizao em automatismos. Um servo tpico possui trs condutores de ligao, normalmente preto, encarnado e branco (ou amarelo). O condutor preto a referncia de massa da alimentao (0 volts), o condutor encarnado a alimentao de 5V (de 4,8V a 6V) e o condutor branco (ou amarelo) o sinal de posicionamento. Este sinal de posio um impulso de 0,75 a 2,25 milisegundos (ms), repetido cada 18 ms aproximadamente (portanto, temos 50 impulsos por segundo). Com o impulso de 0,75 ms o servo move-se (roda) para uma das extremidades e com o impulso de 2,25 ms para a extremidade oposta. Desse modo, com um impulso de 1,5 ms, o servo roda para a posio central. Se os impulsos terminarem o servo move-se ao acaso. Lamentavelmente, os servos consomem correntes elevadas (de 200 mA a 1 A) e introduzem rudo elctrico nos condutores de alimentao. Devero, portanto, ser alimentados por fonte de alimentao

12

separada, como se mostra na figura abaixo. Lembre-se que o condutor de massa (referncia) deve ser comum s duas alimentaes.
loop: servo 4,75 pause 2000 servo 4,150 pause 2000 servo 4,225 pause 2000 goto loop ; move servo para um dos lados ; espera 2 segundos ; move servo para posio central ; espera 2 segundos ; move servo para o outro lado ; espera 2 segundos ; volta para o incio

2.2.9. Solenides e vlvulas solenides

Um solenide consiste num mbolo de ferro colocado no interior de uma bobina (indutncia) elctrica, enrolada em torno de um tubo. Quando se alimenta electricamente a bobina, cria-se um campo magntico que atrai o mbolo para dentro do tubo. Quando se retira a alimentao, uma mola empurra o mbolo para fora do tubo. O controlo de um solenide pode ser efectuado com o circuito a MOSFET atrs descrito.

13

2.3. Interface com Dispositivos de Entrada

2.3.1. Interruptores

Existe disponvel uma enorme variedade de interruptores, mas a maior parte possui dois contactos, que ou esto abertos (off) ou fechados (on). Os dois circuitos apresentados abaixo podem ser usados com a maioria dos interruptores. Com este primeiro circuito o pino de entrada (Pin 0) fica baixo (0) quando o interruptor est aberto e alto (1), quando o interruptor fechado. Um programa possvel Vai para salta quando o interruptor est aberto: if pin0 = 0 then salta Vai para salta quando o interruptor fechado: if pin0 = 1 then salta

Com o circuito seguinte o pino de entrada (Pin 0) fica alto (1) quando o interruptor est aberto e baixo (0), quando o interruptor fechado.

Um programa possvel Vai para salta quando o interruptor est aberto:


if pin 0 = 1 then salta

Vai para salta quando o interruptor fechado:


if pin 0 = 0 then salta

14

Interruptores e ressaltos (debouncer)


Todos os interruptores mecnicos ressaltam quando o interruptor abre ou fecha. Isso significa que os contactos mecnicos ressaltam um sobre o outro antes de estabilizarem. Como o microcontrolador muito rpido, pode acontecer em certos programas que registe dois ou trs contactos em vez de registar apenas um. O processo mais simples de ultrapassar este problema simplesmente acrescentando um tempo de espera (pause 100) depois de cada instruo if. Se a seco de cdigo a seguir presso do boto for longa, este atraso ocorre naturalmente, j que cada instruo leva certo tempo a ser executada. No entanto, se o cdigo no for longo, deve incluir-se um atraso. Outra soluo consiste em utilizar a instruo button. Os dois programas seguintes mostram o efeito dos ressaltos. O programa deveria acender o LED no pino 1 quando o interruptor ligado ao pino 0 fosse pressionado mais do que cinco vezes. Contudo o primeiro programa no funciona correctamente, pois o microcontrolador ir contar ressaltos e no os impulsos reais, pelo que o LED acender prematuramente.
init: let b0 = 0 main: if pin 0 = 1 then add goto main add: let b0 = b0 + 1 if b0 < 5 then main high 1 goto main init: let b0 = 0 main: if pin 0 = 1 then add goto main add: pause 100 let b0 = b0 + 1 if b0 < 5 then main high 1 goto main

; pequeno atraso aqui

2.3.2. Potencimetro

Um potencimetro (ou resistncia varivel) possui um eixo que pode ser rodado para variar o valor da resistncia do potencimetro. Podemos usar potencimetros para medir movimentos circulares ou ngulos. Para serem utilizados com o microcontrolador, os potencimetros so colocados como divisores de tenso e o microcontrolador l efectivamente a tenso que converte para um valor numrico (digital). Para isso usa-se a

15

instruo readADC que activa o Conversor Analgico-Digital. O valor da resistncia vem assim transformado num valor entre 0 e 255, que guardado numa varivel. A instruo ifpoder agora ser utilizada para definir as aces a desenvolver consoante o valor lido.

O programa abaixo acende trs LEDs diferentes (ligados aos pinos 1,2 e 3), dependendo da leitura do sensor analgico (potencimetro)
main: readadc 0,b1 if b1<75 then light1 if b1<175 then light2 goto light3 high 1 low 2 low 3 goto main low 1 high 2 low 3 goto main low 1 low 2 high 3 goto main ; l o valor no pin0 para a varivel b1 ; se b1 menor do que 75 ento salta para light 1 ; se b1 menor do que 175 ento salta para light 2 ; se b1 maior do que 175 ento salta para light 3 ; LED 1 on ; LED 2 off ; LED 3 off ; loop ; LED 1 off ; LED 2 on ; LED 3 off ; loop ; LED 1 off ; LED 2 off ; LED 3 on ; loop

light1:

light2:

light3:

2.3.3. LDR (Light Dependent Resistor)


Uma Light Dependent Resistor (LDR) uma resistncia cujo valor depende da luz recebida. Um dispositivo muito frequente, o ORP-12, possui uma resistncia muito elevada no escuro, e uma resistncia baixa luz. A ligao de uma LDR ao microcontrolador muito fcil, exigindo no entanto calibrao.

16

Convm lembrar que a resposta de uma LDR no linear, pelo que as leituras no variam como num potencimetro. Em geral, existe uma grande variao de resistncia para nveis de iluminao elevados. Isso pode ser compensado por software, utilizando gamas de variao menores para os nveis escuros. Experimente at encontrar os ajustes adequados ao circuito e s condies de iluminao.
main: readadc 0,b1 if b1<50 then light1 if b1<100 then light2 if b1<145 then light3 if b1<175 then light4 goto main ; leitura do valor ; gama 0-50 = 50 ; gama 50-100 = 50 ; gama 100-145 = 45 ; gama 145-175 = 30

NOTA: A PICAXE dispe de uma placa (Analogue Calibration Board BAS810) que permite ver nos displays de 7 segmentos o valor exacto, entre 0 e 255, quando um sensor est l ligado. Permite tirar leituras nas mais diversas condies de teste de modo a obtermos a melhor gama de valores para um programa. Se quiser consultar mais informaes: www.techsupplies.co.uk/cgibin/techsupplies.storefront/43afe871050f0ef a2740c2c98abb0710/Product/View/BAS810

Exemplo de ligao:

17

2.3.4. Termistor
Um termistor uma resistncia varivel com a temperatura. Na realidade todas as resistncias variam com a temperatura, s que os termistores so feitos para terem uma grande variao com a temperatura. A ligao do termistor ao microcontolador muito simples, mas convm tambm calibr-lo (com o BAS810, por exemplo).

Convm lembrar que a resposta de um termistor no linear, pelo que as leituras no variam como num potencimetro. Em geral, existe uma grande variao de resistncia para temperaturas baixas. Isso pode ser compensado por software, utilizando gamas de variao menores para os nveis de temperatura mais altos. Experimente at encontrar os ajustes adequados ao circuito e s condies de temperatura.
main: readadc 0,b1 if b1<50 then light1 if b1<100 then light2 if b1<145 then light3 if b1<175 then light4 goto main ; leitura do valor ; gama 0-50 = 50 ; gama 50-100 = 50 ; gama 100-145 = 45 ; gama 145-175 = 30

2.4. Interface com Componentes Avanados


2.4.1. Display LCD (Liquid Crystal Display)
Um Display de Cristal Liquido um dispositivo electrnico que permite mostrar caracteres como numeros, texto e quaisquer outros, incluindo pontuao. Existem dois tipos principais de displays LCD, os displays numericos (tipo dos usados nos relgios e calculadoras) e os displays alfanumricos (como os usados nos telemveis). Nos displays numricos o conjunto de cristais est distribudo em segmentos, enquanto que nos alfanunricos esto sob a forma de pontos.Cada crystal tem uma ligao elctrica individual por forma a ser controlado independentemente. Quando o cristal est off (i.e. quando no h tenso aplicada ao cristal) o cristal no se v porque reflecte a mesma quantidade de luz que o material do fundo onde est. Contudo, quando o cristal tem uma tenso aplicada, fica polarizado, absorvendo luz e portanto aparecendo um segmento, ou ponto, mais escuro que pode ser visualizado contra o material do fundo. importante perceber a diferena entre os displays LCD e LED. Os LED fornecem luz (podendo ser vistos na escurido) enquanto o LCD apenas reflecte a luz que recebe. Em

18

contrapartida h consumo de energia nos LED enquanto que nos LCD praticamente no h consumos.

2.4.1.1. Caracteres LCD


A tabela seguinte mostra os caracteres disponveis num display LCD tpico. O cdigo do character obtido adicionando o numero da coluna ao nmero da linha. Os caracteres, do 32 ao 127 so sempre iguais independentemente do LCD, enquanto os characters do 16 ao 31 e do 128 ao 255 diferem conforme o fabricante do LCD. Claro que, sendo assim, alguns LCD podero mostrar caracteres diferentes dos da tabela ao lado. Do caracter 0 ao 15 so normalmente designados como caracteres user-defined e assim, devem ser definidos antecipadamente, de acordo com os manuais de cada fabricante, para evitar que, para esses cdigos, apaream caracteres aleatrios. O funcionamento de um display LCD relativamente complexo dado que cada display pode mesmo armazenar mais caracteres do que aqueles que ele tem capacidade de mostrar na sua janela. E, na sua janela, de uma maneira geral, o display s consegue mostrar 16 caracteres de cada vez. S que na maioria dos displays LCD h uma memria que permite armazenar 40 caracteres por cada linha que o display tenha. Cada espao na memria RAM uma caixa para um character e tem um endereo que o descreve. A primeira linha tem os endereos 128 a 191. A segunda linha, os endereos de 192 a 255. Os displays de 16x2 tm uma janela com duas linhas. Quer dizer, podemos ver 16 caracteres em cada uma das duas linhas. O caracter que para aparecer na segunda linha, obriga-nos a mover o cursor para o incio dessa linha. Para mover o cursor, para para qualquer posio do display, basta enviar o endereo da RAM como instruo. Isto quer dizer que para enviar para a primeira posio da primeira linha (endereo 128), enviar este endereo como instruo. Ora, para mover o cursor para o incio da linha 2 basta enviar o endereo (192) da RAM como instruo para o mdulo LCD. Para mover o cursor para a quinta posio da segunda linha tem que se enviar a instruo 197 (=192+5).

2.4.1.2. Interface de LCD a microcontoladores


H trs formas principais de fazer o interface de LCD a microcontroladores. 1) Com um integrado com firmware Srie para LCD 2) Com um mdulo Srie LCD (tem uma PCI j com o integrado com firmware) 3) Ligando Directamente 19

Ligando o LCD usando O FRM010 (Serial LCD Firmware Chip)


O FRM010 usado para permitir o controlo srie de um LCD alfanumerico. Assim permite aos micocontroladores (e sistemas baseados em microcontroladorescomo os PICAXE e Basic Stamp) utilizar um ecr onde seja visualizado o texto que o utilizador queira e de uma forma relativamente simples. Pois, todos os comandos do LCD so transmitidos a partir do microcontrolador atravs de uma nica linha srie, como se pode ver pela figura ao lado e usando a instruo serout. Por exemplo, para que aparea escrito o texto Hello a instruo simplesmente:
serout 7,T2400,(Hello)

O preo a pagar que se tm que fazer as ligaes de acordo com os dois esquemas abaixo: A) LIGAES DO FIRMWARE B) LIGAES DO MDULO LCD

Ligando o LCD usando o AXE033 (Serial LCD Module)


O AXE033 um mdulo srie em PCI ( vendido em kit) j com todas as ligaes feitas do LCD para o integrado do firmware. Portanto, o mdulo vem-nos ajudar a resolver as ligaes necessrias na opo anterior, alm de que este mdulo permite o uso do protocolo de comunicao i2c.

20

Ligando o LCD directamente


O LCD tem 6 linhas que podem ser ligadas directamente aos pinos do microcontrolador. Contudo uma boa prtica de projecto ligar resistncias de 330R s linhas para proteger de descargas estticas. O potencimetro de 10k ligado ao pino 3 tem como misso ajustar o contraste do display. Todas os pinos do LCD no usados, como se v na figura, devem ficar ligados massa.

Um Programa Simples para escrever no LCD

O Programa que se segue escreve a frase Hello there! em duas linhas do display LCD. Temos que usar trs subrotinas standard chamadas init, wrins e wrchr. Elas resolvem todos os nossos problemas no s de inicializao como de envio para o LCD tanto das instrues como das mensagens. Essas rotinas standard fazem exactament o seguinte: init Faz a inicializao do LCD, deixando-o pronto a aceitar as instrues wrins envia as instrues armazenadas na varivel b1 para o mdulo LCD wrchr envia um caracter armazenado na varivel b1 para ser mostrado no ecr LCD

J frente sero explicadas mais detalhadamente estas trs subrotinas.


EEPROM 0,(Hello there!) armazena o texto na memria EEPROM initializa o LCD b1=1 => instruo clear display envia instruo para o LCD ciclo for...next (Hello 4 caracteres) b1=EEPROM[b3] envia character para LCD continua b1=192 => instruo start of second line position envia instruo para o LCD ciclo for...next (there!-posies 5 a 11)

gosub init

main:

let b1 = 1 gosub wrins

for b3 = 0 to 4 read b3, b1 gosub wrchr next b3

let b1 = 192 gosub wrins

for b3 = 5 to 11

21

read b3, b1 gosub wrchr next b3

b1=EEPROM[b3] envia character para LCD continua

Um Programa mais Avanado

O programa seguinte faz rodar na janela do LCD a mensagem Hello there everybody!. Isto porque o texto tem mais do que as 16 letras que um ecr suporta. A mensagem primeiro armazenada na memria do LCD, indo depois rodando na janela do display repetidamente para que seja mostrada toda a mensagem.
EEPROM 0,(Hello there everybody!) armazena o texto na memria EEPROM

gosub init

initializa o LCD b1=1 => instruo clear display envia instruo para o LCD ciclo for...next (Hello there everybody! 22 caracteres) b1=EEPROM[b3] envia character para LCD continua b1=12 => instruo hide cursor envia instruo para o LCD b1=24 => instruo scroll display left envia instruo para o LCD pausa 0.25s roda a mensagem (Hello there everybody!)

start:

let b1 = 1 gosub wrins

for b3 = 0 to 22 read b3, b1 gosub wrchr next b3

let b1 = 12 gosub wrins main: let b1 = 24 gosub wrins pause 250 goto main

Subrotinas Standard para ligar o LCD directamente.

Nos programas que vimos fazendo, vemos que o LCD tanto tem que receber instrues como caracteres. o pino 4 (RS) do LCD controlado pela sada 2 do microcontrolador que define se instruo ou caracter o que est entrada. Pondo o pin 2 baixo o LCD est em modo de instruo enquanto que quando o pin 2 est alto fica em modo de caracter. Cada instruo ou caracter enviada como um nmero binrio de 4 bits para as linhas de dados (pinos 7-4). Depois o LCD, quando recebe um impulso de ENABLE, no seu pino 6 - SE (e que enviado pela sada 3 do microcontrolador) l os dados e imprime o caracter (ou cumpre a instruo) correspondente ao nmero nas linhas de dados.

22

Todos os cdigos de caracteres e instrues (comandos) tm 8 bit. Como s h 4 linhas de dados, os 8 bit so mandados em duas metades, uma a seguir outra. Cada um dos quatro bit recebe o nome de nibble (nibble alto e nibble baixo). Portanto, por cada caracter (ou comando) so transmitidos 2 nibbles. 1011 0101 = 10110101 nibble alto + nibble baixo = byte A funo das trs subrotinas standard (init, wrins e wrchr) levar a cabo toda esta tarefa complicada quando trabalhamos com displays LCD.
init: let pins = 0 let b4 = 0 let dirs = 252 pause 200 let pins = 48 pulsout 3,1 pause 10 pulsout 3,1 pulsout 3,1 let pins = 32 pulsout 3,1 pulsout 3,1 let pins = 128 pulsout 3,1 let b1 = 14 gosub wrins return wrchr: let pins = b1 & 240 high 2 pulsout 3,1 let b2 = b1 * 16 let pins = b2 & 240 high 2 pulsout 3,1 Return wrins: let pins = b1 & 240 pulsout 3,1 Let b2 = b1 * 16 let pins = b2 & 240 pulsout 3,1 high 2 return Todas sadas=0 Reset variavel Pins 2-7 como sada (%11111100). 200 ms para reset ao LCD. Funcionamento LCD a 8-bit. Envia comando (enable) Espera 10 ms Envia comando outra vez(enable) Envia comando outra vez(enable) Funcionamento LCD a 4-bit. Envia comando(enable) Envia comando outra vez(enable) Funcionar em duas linhas Envia comando (enable). LCD ON e com cursor. Ecrever instruco no LCD nibble alto de b1=>fora(ateno RS=0). Enviar Caracter=> RS alto Pulsa enable (envia nibble alto). nibble baixo de b1=>b2. nibble baixo de b1=>fora(ateno RS=0). Caracter=> RS alto Pulsa enable pin (envia nibble baixo). nibble alto de b1=>fora(RS=0->instru). Pulsa enable (envia nibble alto). b2=b1 rodado 4x p/ esquerda. nibble baixo de b1=>fora(+RS=0-instru). Pulsa enable pin (envia nibble baixo). Modo character

Nota: na subrotina init, o comando let dirs =252(%11111100) vai afectar os 8 pinos e no apenas os 6 usados pelo LCD. Como se pode ver, nem wrins nem wrchr necessitam dos pinos 0 e 1. Se o nosso programa usar estas rotinas deve ter em conta que, quando retorna da chamada, o valor de b2 vem alterado (assim como w0).

Usando o conjunto de instrues (comandos) do LCD.

Os cdigos das instrues de comando para o LCD, como vimos, devem ir na varivel b1 quando se chama a subrotina wrins, que se encarrega de modificar o estado do LCD.
Cdigos das instrues (comandos) para o LCD.

23

1 Limpa o display e move para a primeira linha 2 Move o cursor e a janela de display para o incio da primeira linha 4 Modo escrever da direita para a esquerda 5 Modo scroll para a esquerda 6 Modo escrever da esquerda para a direita 7 Modo scroll para a direita 10 Visualizao do LCD off 12 Sem cursor 13 Cursor a piscar 14 Visualizao do LCD (e cursor) on 16 Move cursor para a esquerda uma posio 20 Move cursor para a direita uma posio 24 Faz o scroll da janela uma posio para a esquerda 28 Faz o scroll da janela uma posio para a direita 128 Move o cursor para o incio da primeira linha 192 Move o cursor para o incio da segunda linha

Exemplos
Limpar o display clear: let b1 = 1 b1=instruo clear call wrins Envia para o LCD Mover o cursor para a segunda linha clear: let b1 = 192 b1=incio da segunda linha call wrins Envia para o LCD Piscar uma menssagem 10 vezes flash:for b3 = 1 to 10 let b1 = 10 gosub wrins pause 200 let b1 = 14 gosub wrins pause 200 next b3 for...next usando variable b3(nunca b1!!) b1= Visualizao do LCD off Envia para o LCD Pausa de 0.2 segundos b1= Visualizao do LCD on Envia para o LCD Pausa de 0.2 segundos Fim do loop for...next for...next usando variable b3(nunca b1!!) b1= Scroll da janela uma posio p/ direita Envia para o LCD Pausa de 0.2 segundos Fim do loop for...next b1=instruo clear Envia para o LCD Pausa de 0.2 segundos Loop

Fazer scroll a uma mensagem longa (30 caracteres) scroll: for b3 = 1 to 30 let b1 = 28 gosub wrins pause 200 next b3 let b1 = 1 gosub wrins pause 200 goto scroll

24

Você também pode gostar