Você está na página 1de 18

Como funcionam os microcontroladores

Introdução
Os microcontroladores estão escondidos dentro de
inúmeros produtos atualmente. Se um forno de
microondas tem um LED ou visor LCD e teclado, ele
contém um microcontrolador. Todos os automóveis
modernos contêm ao menos um microcontrolador (e
podem ter até 6 ou 7): o motor é controlado por um
microcontrolador, bem como os freios antitravamento o
controle de velocidade de viagem e assim por diante. A
maioria dos aparelhos com controle remoto contém um
microcontrolador: TVs, VCRs e sistemas de som de
alta fidelidade entram nesta categoria. Além disso,
também têm microcontroladores: câmeras SLR e
câmeras digitais, telefones celulares, filmadoras,
impressoras a laser, telefones (as que possuem identificador de chamadas, memória para
20 números, etc.), pagers, além de refrigeradores, lava-louças, lavadoras de roupas e
secadoras (os que possuem visores e teclados). Basicamente, qualquer produto ou
dispositivo que interaja com o usuário possui um microcontrolador interno.

Neste artigo, você irá entender o que são os microcontroladores e como eles funcionam.
Também mostraremos como você pode começar a trabalhar com
microcontroladores (criaremos um relógio digital e um termômetro digital com
microcontrolador). No processo, você aprenderá muito sobre como eles são usados em
produtos comercializados.

O que é um microcontrolador?
Um microcontrolador é um computador. Todos os computadores (independentemente
de ser um computador de mesa (desktop), um grande mainframe ou um
microcontrolador) possuem várias características em comum:

• todos os computadores possuem uma CPU (unidade de processamento central)


que executa programas. Se você está sentado agora em seu computador lendo
este artigo, a CPU dessa máquina está executando um programa para
implementar o navegador Web que está exibindo a página;
• a CPU carrega o programa de algum lugar. Em um computador de mesa, o
programa de navegação é carregado a partir do disco rígido;
• o computador possui memória RAM (memória de acesso aleatório) onde ele
pode armazenar "variáveis";
• o compuatdor também tem alguns dispositivos de entrada e saída para interagir
com as pessoas. Em um computador de mesa, o teclado e mouse são dispositivos
de entrada e o monitor e impressora são dispositivos de saída. O disco rígido é
um dispositivo de E/S: ele manipula tanto a entrada como a saída.

Um computador de mesa é um computador de propósito geral que pode executar


milhares de programas diferentes. Os microcontroladores são computadores
de propósito específico. Existem outras características que definem os
microcontroladores e se um computador combinar a maioria delas, pode ser chamado de
"microcontrolador".

• Eles são "embutidos" no interior de algum outro dispositivo (geralmente um


produto comercializado) para que possam controlar as funções ou ações do
produto. Um outro nome para o microcontrolador, portanto, é controlador
embutido.
• Os microcontroladores são dedicados e executam um programa específico. O
programa é armazenado na memória ROM (memória apenas de leitura) e
geralmente não muda.
• Microcontroladores geralmente são dispositivos de baixa potência. Um
computador de mesa é quase sempre ligado na tomada e pode consumir 50 watts
de eletricidade. Um microcontrolador alimentado por bateria pode consumir 50
miliwatts.
• Um microcontrolador possui um dispositivo dedicado de entrada (mas nem
sempre) e geralmente possui um pequeno LED ou visor LCD de saída. Um
microcontrolador também obtém a entrada do dispositivo que está controlando e
o controla enviando sinais a diferentes componentes desse dispositivo.

Por exemplo, o microcontrolador de uma TV obtém a entrada a partir do


controle remoto e exibe a saída na tela da TV. O controlador controla o seletor
de canais, o sistema de alto-falantes e determinados ajustes nos componentes
eletrônicos do tubo de imagem (como saturação e brilho, por exemplo).
A unidade de controle de motor em um carro obtém a entrada a partir de
sensores como os sensores de oxigênio e detonação e controla a mistura de
combustível e temporização das velas, por exemplo. Um controlador de forno
microondas obtém a entrada a partir de um teclado, exibe a saída em um visor
LCD e controla um relé que liga e desliga o gerador de microondas.

• Um microcontrolador geralmente é pequeno e barato. Os componentes são


escolhidos para minimizar o tamanho e serem os mais econômicos possíveis.
• Um microcontrolador geralmente é feito para ser mais robusto de alguma
forma.

O microcontrolador que controla um motor de carro, por exemplo, tem que


trabalhar em temperaturas extremas que um computador normalmente não
suporta. Um microcontrolador de carro no Alaska tem que funcionar bem em
temperaturas de -34ºC, enquanto o mesmo microcontrolador no Rio de
Janeiro pode ter de operar a 42ºC. Quando se adiciona o calor que é gerado
naturalmente pelo motor, a temperatura pode atingir de 65 a 80ºC no
compartimento do motor. Por outro lado, um microcontrolador embutido dentro
de um VCR não precisa ser tão resistente assim.
O processador em si, usado para implementar um microcontrolador pode variar
amplamente. Por exemplo, o telefone celular, mostrado no artigo Dentro de um telefone
celular digital (em inglês), contém um processador Z-80 (em inglês). O Z-80 é um
microprocessador de 8 bits desenvolvido nos anos 70 e originalmente usado em alguns
computadores da época. Parece que o GPS Garmin, mostrado no artigo Como
funcionam os receptores GPS, contém uma versão de baixa potência do Intel 80386. O
80386 foi usado originalmente nos computadores de mesa.

Em muitos produtos, como os fornos microondas por exemplo, a demanda sobre a CPU
é bem baixa e o preço é um aspecto importante. Nesses casos, os fabricantes utilizam
chips de microcontrolador dedicado: chips que foram projetados originalmente para
serem CPUs econômicas, pequenas, de baixo consumo e embutidas. O Motorola 6811 e
o Intel 8051 (em inglês) são bons exemplos desses chips. Também existe uma linha de
controladores populares chamados de "microcontroladores PIC" criados por uma
empresa chamada Microchip (em inglês). Nos padrões atuais, eles são incrivelmente
minimalistas; mas extremamente econômicos quando adquiridos em grandes
quantidades e geralmente conseguem atender às necessidades de um projetista de
dispositivos com apenas um chip.

Um chip microcontrolador simples pode conter 1.000 bytes de ROM e 20 bytes de


RAM no chip, juntamente com 8 pinos de E/S (Entrada e Saída). Em grandes
quantidades, o custo desses chips pode ser ninharia (dezenas de centavos a alguns reais).
Você certamente nunca executará o Microsoft Word em tal chip: o Microsoft Word
requer talvez 30 megabytes de RAM e um processador que possa executar milhões de
instruções por segundo. Por outro lado, você também não precisa do Microsoft Word
para controlar um forno microondas. Com um microcomputador, você tem uma tarefa
específic a a ser executada e o baixo custo e o gasto de energia é o que é mais
importante.

Usando microcontroladores
Em Como funcionam as portas eletrônicas, mostram-se os dispositivos TTL série
7400, também onde comprá-los e como utilizá-los. O que se descobriu é que muitas
portas podem ser necessárias para implementar dispositivos simples. Por exemplo, no
artigo sobre relógio digital, o relógio projetado pode conter 15 ou 20 chips. Uma das
grandes vantagens de um microcontrolador é que o software (um pequeno programa que
você escreve para ser executado no controlador) pode tomar o lugar de muitas portas.
Neste artigo, portanto, nós usaremos um microcontrolador para criar um relógio digital
(será um relógio digital caro de proximadamente US$ 200). Nesse processo você irá
aprender o essencial para trabalhar com microcontroladores.

O microcontrolador que será usado é um dispositivo de propósito específico, projetado


para tornar a vida mais simples, chamado de "BASIC Stamp", criado por uma empresa
chamada Parallax (em inglês). Um BASIC Stamp é um microcontrolador
PIC personalizado para compreender a linguagem de programação BASIC. O uso da
linguagem BASIC facilita muito a criação do software para o controlador. O chip do
microcontrolador pode ser adquirido em uma pequena placa do fabricante que aceita
uma bateria de 9 volts e pode-se programá-lo conectando-o em uma das portas de
um computador desktop. É improvável que qualquer fabricante utilize um BASIC
Stamp em um dispositivo de produção real - os Stamps são caros e relativamente
vagarosos. No entanto, é bem comum usar Stamps para fazer o protótipo ou produtos de
demonstração porque eles são muito fáceis de configurar e usar.

A propósito, eles são chamados de "Stamps" (selo, em inglês) porque são do tamanho
aproximado de um selo postal.

A Parallax fabrica duas versões do Stamp BASIC: o BS-1 e o BS-2. Aqui vão algumas
diferenças entre os dois modelos:

Spec BS-1 BS-2


RAM 14 bytes 26 bytes
EEPROM 256 bytes 2 kilobytes
Extensão máxima do cerca de 75 cerca de 600
programa instruções instruções
Velocidade de execução 2 mil linhas/seg 4 mil linhas/seg
pinos E/S 8 16

O BASIC Stamp específico que será utilizado aqui é chamado de "BASIC Stamp
Revisão D" (mostrado abaixo).

O BASIC Stamp Revisão D é um BS-1 montado em uma placa com um suporte de


bateria de 9 volts, um regulador de potência, uma conexão para um cabo de
programação, pinos para as linhas de E/S e uma pequena área para prototipagem. Você
poderia comprar um chip BS-1 e conectar os outros componentes em uma placa de
montagem (breadboard). A Revisão D simplesmente facilita tudo.

Você pode observar pela tabela anterior que não é possível construir nada muito
complexo com o BASIC Stamp. O limite de 75 linhas de instruções (os 256 bytes de
EEPROM podem armazenar um programa BASIC de cerca de 75 linhas) no BS-1 é
bem restrito. No entanto, pode-se criar algo bem interessante e o fato de o Stamp ser tão
pequeno e alimentado por bateria significa que ele é bem versátil.
Como funcionam os microcontroladores
por Marshall Brain - traduzido por HowStuffWorks Brasil

Neste artigo
1.
Introdução

2.
O que é um microcontrolador?

3.
Usando microcontroladores

4.
Programando o BASIC Stamp

5.
Brincando com um BASIC Stamp

6.
Criando um relógio digital (particularmente caro)

7.
Construindo um termômetro digital

8.
Mais informações

9.
Veja todos os artigos sobre Componentes

Programando o BASIC Stamp


Você programa um BASIC Stamp usando linguagem de programação BASIC. Se
você já conhece o BASIC, verá que o seu uso no Stamp é direto, porém limitado.
Se você não conhece BASIC, mas conhece outra linguagem como C, Pascal ou Java,
então usar BASIC será fácil. Se você nunca programou antes, provavelmente vai querer
aprender programação numa máquina desktop antes. Aqui vai um rápido resumo das
instruções disponíveis num Stamp BASIC (para a documentação completa, visite
Parallax: documentação BASIC Stamp - em inglês).

Instruções BASIC padrão:

• for...next - instrução normal de looping


• gosub - ir para uma subrotina
• goto - ir para um label no programa (ex. - "rótulo:")
• if...then - decisão normal se/então
• let - atribuição (opcional)
• return - retorna de uma subrotina
• end - finaliza o programa e hiberna

Instruções relacionadas com pinos de E/S:

• button - lê um botão num pino de entrada, com "debounce" (eliminação de


oscilação do sinal) e auto-repetição
• high - configura um pino de E/S com um sinal em nível alto
• input - configura a direção de um pino de E/S para entrada
• low - configura um pino de E/S baixo
• output - configura a direção de um pino de E/S para saída
• pot - lê um potenciômetro num pino de E/S
• pulsin - lê a duração de um pulso vindo de um pino de entrada
• pulsout - envia um pulso de duração específica para um pino de saída
• pwm - executa modulação por largura de pulso em um pino de saída
• reverse - reverte a direção de um pino de E/S
• serin - lê dados seriais em um pino de entrada
• serout - grava dados seriais em um pino de saída
• sound - envia um som de uma freqüência específica para um pino de saída
• toggle - alterna o bit em um pino de saída

Instruções específicas para o BASIC Stamp:

• branch - lê uma tabela com derivações


• debug - envia um string (cadeia de carcteres) de debug para o console num
computador desktop
• eeprom - faz o download de um programa para a EEPROM
• lookdown - retorna o índice de um valor em uma lista
• lookup - consulta um array (vetor de dados) usando um índice
• nap - hiberna por curto período
• pause - atrasa pelo período especificado
• random - escolhe um número aleatório
• read - lê um valor da EEPROM
• sleep - desliga pelo período especificado
• write - escreve dados na EEPROM

Operações:

• + - adição
• - - subtração
• * - multiplicação (low-word)
• ** - multiplicação (high-word)
• / - divisão
• // - módulo
• max - retorna o máximo entre 2 valores
• min - retorna o mínimo entre 2 valores
• & - AND
• | - OR
• ^ - XOR
• &/ - NAND
• |/ - NOR
• ^/ - XNOR

Enunciado lógico If (se):

• =
• <>
• <
• <=
• >
• >=
• AND
• OR

Variáveis
Todas as variáveis no BS-1 têm nomes pré-definidos (que podem ser substituídos pelos
nomes que você desejar). Lembre-se que como há apenas 14 bytes de RAM
disponível então todas as variáveis são preciosas. Aqui estão os nomes padrão:

• w0, w1, w2...w6 - variáveis de palavras (words) de 16 bits


• b0, b1, b2...b13 - variáveis de byte, de 8 bits
• bit0, bit1, bit2...bit15 - variáveis de bit, de 1 bit

Como existem apenas 14 bytes de memória, w0 e b0/b1 estão no mesmo local na RAM
e w1 e b2/b3 também, e assim por diante. Além disso, bit0 até bit15 residem em w0 (e,
portanto, em b0/b1 também).

Pinos de E/S
Você pode ver que 14 das instruções em BS-1 têm a ver com os pinos de E/S. A razão
para tal ênfase é o fato que os pinos de E/S são a única maneira de o BASIC Stamp
conversar com o mundo. Há oito pinos em BS-1 (numerados de 0 a 7) e 16 pinos em
BS-2 (numerados de 0 a 15).

Os pinos são bidirecionais, o que significa que pode-se ler valores de entrada neles ou
enviar valores de saída para eles. A maneira mais fácil de enviar um valor a um pino é
usar as funções HIGH ou LOW. A declaração high 3 envia 1 (+5 volts) para o do pin 3.
LOW envia um 0 (Terra). O pino 3 foi escolhido arbitrariamente aqui - podem-se enviar
bits para qualquer pino de 0 a 7.
Há várias instruções interessantes de pinos de E/S. Por exemplo, POT lê a configuração
em um potenciômetro (resistor variável) se for conectado a um capacitor como a
instrução POT espera. A instrução PWM envia sinais modulados por largura do pulso.
Instruções como estas podem facilitar bastante a conexão de controles e motores ao
Stamp. Veja o documento indicado para detalhes da linguagem. Também existe o livro
Programming and Customizing the BASIC Stamp Computer de Scott Edward que pode
ser extremamente útil porque contém exemplos de projetos.

Brincando com um BASIC Stamp


Se você quiser brincar com um BASIC Stamp, é muito fácil começar: precisa de um
computador desktop e um kit inicial Basic Stamp. O kit inicial inclui o Stamp, um
cabo de programação e uma aplicação que você executa no seu computador de mesa
para fazer o download de programas BASIC no Stamp.

Você pode obter um kit inicial do fabricante, Parallax (em inglês) ou de um fornecedor
como Jameco (em inglês). Da Parallax, pode-se pedir o BASIC Stamp D Starter Kit
(peça número 27202). Da Jameco, pode-se pedir a peça de número 140089. Você
receberá o Stamp (mostrado abaixo), um cabo de programação, software e instruções. O
kit custa cerca de US$ 79 nos dois fornecedores.

Instalar o Stamp é fácil. Você o conecta na porta paralela do seu PC. Então você roda
um aplicativo DOS para editar seu programa em BASIC e faz o download dele para o
Stamp. Aqui está uma imagem de um editor comum (livro do Scott Edward):
Para executar o programa neste editor, você pressiona ALT-R. O aplicativo do editor
verifica o programa BASIC e então o envia por cabo para o EEPROM no Stamp. Então
o Stamp executa o programa. Neste caso, o programa produz uma onda quadrada no
pino de E/S 3. Se você conectar uma ponta de prova ou um LED ao pino 3 (veja o artigo
sobre portas eletrônicas para detalhes), verá o LED acender e apagar duas vezes por
segundo (ele muda de estado a cada 250 milisegundos por causa dos comandos de
pausa). Este programa rodaria por várias semanas com uma bateria de 9 volts. Pode-
se economizar energia encurtando o tempo que o LED fica aceso (talvez ele fique ligado
por 50 milisegundos e desligado por 450 milisegundos) e também usando a instrução
NAP ao invés de PAUSE.

Criando um relógio digital


(particularmente caro)
Gastar US$ 79 para fazer piscar um LED pode parecer extravagante para você. O que
você provavelmente gostaria de fazer é criar algo mais útil com o seu BASIC Stamp.
Mas gastando cerca de US$ 100 a mais você pode criar um relógio digital bem
interessante. Isso pode parecer extravagante, até que entenda que as partes são
reutilizáveis em uma variedade de outros projetos que queira criar mais tarde.

Digamos que você queira usar os pinos de E/S no BASIC Stamp para mostrar valores
numéricos. No artigo sobre relógio digital, vimos como fazer a interface para um visor
de LED de 7 segmentos usando um chip 7447. Os 7447 funcionam bem junto com o os
BASIC Stamp. Você poderia ligar quatro dos pinos de E/S direto num 7447 e
facilmente mostrar um número entre 0 e 9. Já que o Stamp BS-1 possui oito pinos de
E/S, é fácil acionar dois 7447 diretamente desta maneira.

Para um relógio, precisamos de um mínimo de quatro dígitos. Para acionar quatro 7447
com oito pinos de E/S, precisamos ser um pouco mais criativos. O diagrama a seguir
mostra um possível método:
Neste diagrama, as oito linhas de E/S do Stamp entram a partir da esquerda. Este
método usa quatro linhas que entrm em todos os quatro 7447s. Então as outras quatro
linhas do Stamp ativam os 7447 em seqüência ("E" nos chips significam "Enable", ou
Habilitação que em um 7447, isto seria uma entrada "apagado" informada no pino 5).
Para fazer este arranjo funcionar, o programa BASIC no Stamp inseriria o primeiro
dígito nas quatro linhas de dados e ativaria o primeiro 7447 mudando o pino E com a
primeira linha de controle. Então enviaria o valor para o segundo dígito e ativaria o
segundo 7447, seqüenciando assim todos os quatro 7447s repetidamente. Conectando as
coisas de forma um pouco diferente, pode-se fazer isso apenas com um 7447. Usando
um chip 74154 demultiplexador e alguns drivers, você poderia acionar até 16 dígitos
usando este método.

Isso é uma forma padrão de controlar visores de LED. Por exemplo, se você tem uma
antiga calculadora LED, ligue-a e sacuda-a enquanto olha o visor. Você verá que apenas
um dígito por vez está iluminado. O método é chamado multiplexar o visor.

Ainda que este método funcione bem para relógios e calculadoras, ele tem
dois problemas:

• os LEDs consomem muita energia


• os LEDs de 7 segmentos podem mostrar apenas valores numéricos

Um método alternativo é usar um visor ou display LCD. Atualmente, os LCDs são


amplamente disponíveis e podem ser facilmente conectados ao Stamp. Por exemplo, o
visor alfa-numérico de duas linhas por 16 caracteres mostrado abaixo está disponíveis
tanto na Jameco (peça número 150990) quanto na Parallax (peça número 27910). Aqui
um visor simples está montado na breadboard e possui uma interface simples:
Este tipo de LCD tem muitas vantagens:

• o visor pode ser acionado por um simples pin I/O. Como o visor contém lógica
que permite ao Stamp comunicar-se com ele serialmente, então apenas um pino
de E/S é necessário. Adicionalmente, o comando SEROUT no Stamp BASIC
lida com a comunicação serial facilmente, tornando essa comunicação com o
visor simples;
• o LCD pode mostrar textos alfanuméricos: letras, números e até mesmo
caracteres personalizados;
• o LCD consome bem pouca energia - apenas 3 miliamperes.

O único problema é que um destes visores custa US$ 59. Obviamente, você não
incluiria um desses na sua torradeira. Se você estivesse projetando uma torradeira, no
entanto, provavelmente faria um protótipo com um destes visores e então criaria chips e
software personalizados para acionar LCDs bem mais baratos no produto final.

Para acionar um visor destes, você simplesmente o alimenta com +5 volts e terra (o
Stamp fornece ambos a partit de uma bateria de 9 volts) e conecta um dos pinos de E/S
do Stamp à linha de entrada do visor. A forma mais fácil que encontramos para conectar
os pinos de E/S do Stamp a um dispositivo como um LCD é usar uma ferramenta wire-
wrap (Jameco peça número 34577) e um fio calibre 30 de wire wrap (Jameco peça
número 22541). Assim, não é necessário soldar e as conexões ficam compactas e
confiáveis.

O programa BASIC a seguir fará um BASIC Stamp se comportar como um relógio e


informar as horas no LCD (imaginando que o LCD esteja conectado ao pino de E/S 0
no Stamp):

pause 1000 'espera que o display LCD inicie


serout 0, n2400, (254, 1) 'limpa o display
serout 0, n2400, ("hora:") 'Escreve "hora:" no visor 'pré-ajuste
antes de carregar o programa
b0 = 0 'segundos
b1 = 27 'minutos
b2 = 6 'horas
repetir:
b0 = b0 + 1 'incrementa os segundos
if b0 < 60 then minutos
_b0 = 0 'se segundos=60
_b1 = b1 + 1 ' então incrementar os minutos
minutos:
if b1 < 60 then horas
_b1 = 0 'se minutos=60
_b2 = b2 + 1 ' então incrementa as horas
horas:
if b2 < 13 then mostra
_b2 = 1 'se horas=13 volta para 1
mostra:
serout 0, n2400, (254, 135) 'posiciona o cursor no display,
'então mostra o tempo
serout 0, n2400, (#b2, ":", #b1, ":", #b0, " ")
pause 950 'pausa 950 milisegundos
goto repetir 'repete

Neste programa, os comandos SEROUT enviam dados ao LCD. A seqüência (254, 1)


limpa o LCD (254 é o caracter "escape" e 1 é o comando para limpar o visor) A
seqüência (254, 135) posiciona o cursor. Os outros dois comandos SEROUT
simplesmente enviam strings de texto para o visor. Este método criará um relógio
razoavelmente preciso. Ajustando a instrução PAUSE você pode usar a precisão dentro
da faixa de alguns segundos por dia. Obviamente, em um relógio real conectaria um
botão de pressão ou dois para facilitar as configurações - neste programa, você pré-
ajusta o horário antes de fazer o download do programa para o Stamp.

Embora este método seja simples e funcione, não é muito preciso. Se você quiser maior
precisão, um bom método seria conectar um chip de relógio tempo real ao seu Stamp.
Assim, a cada segundo aproximadamente, você pode ler as horas do chip e exibi-las.
Um chip de relógio de tempo real usa um cristal de quartzo para obter uma excelente
precisão. Chips de relógio geralmente contêm também informações de datas e suportam
correções de ano bissexto automaticamente.

Uma maneira fácil de fazer a interface do chip de tempo real a um Stamp é usar um
componente chamado Pocket Watch B.

Módulo Pocket Watch B

O Pocket Watch B está disponível tanto pela Jameco (peça número 145630) quanto pela
Parallax (peça número 27962). Esta peça é do tamanho de uma moeda de 1 real e
contém o chip de relógio, cristal e uma interface serial; assim, apenas um pino de E/S é
necessário para se comunicar com ele. Este componente custa aproximadamente US$
30.

Construindo um termômetro digital


Agora que você entende um pouco mais sobre seu Stamp e o LCD, podemos adicionar
outro componente e criar um termômetro digital. Para criar um termômetro, usaremos
um chip chamado DS1620. Este chip contém:

• um dispositivo sensor de temperatura


• um conversor analógico-digital (A/D) para o dispositivo sensor de temperatura
• um registro de deslocamento para ler os dados do conversor A/D
• uma pequena EEPROM (memória apenas de leitura programável e apagável
eletricamente) para armazenar as configurações

O DS1620 possui dois modos: em um modo, ele age como um chip de termostato
próprio, e em outro modo você o acopla a um computador e o usa como um
termômetro. A EEPROM armazena lembra do modo atual bem como das temperaturas
ajustadas para o termostato.

Conectar o DS1620 ao Stamp é muito fácil. O DS1620 vem como um chip de 8


pinos. Alimente o pino 8 do DS1620 com +5 volts do Stamp. Aterre o pino 4 do
DS1620. Então você usa três pinos de E/S do Stamp para acionar três pinos no DS1620:

• o pino 1 no DS1620 é o pino de dados. Você lê e grava bits de dados neste pino;
• o pino 2 no DS1620 é o pino do relógio. Você temporiza o deslocamento de
dados como entrada e saída do registrador de deslocamento com este pino;
• o pino 3 no DS1620 é o pino de reset/seleção. Você configura o pino 3 alto para
selecionar o chip e comunicar-se com ele.

Para este código do exemplo, é assumido que:

• o pino de dados vai para o pino 2 de E/S do Stamp


• o pino do relógio vai para o pino 1 de E/S do Stamp
• o pino de reset/seleção vai para o pino 0 I/O do Stamp

As fiações completas tê m esta aparência:


Você pode obter um DS1620 da Jameco (peça número 146456) ou da Parallax (peça
número 27917) num "kit de aplicação" que inclui o chip, o capacitor, boa documentação
e códigos de exemplo. Ou você pode comprar somete o chip da Jameco (peça número
114382). Eu sugiro comprar um kit de aplicação na primeira vez que você usar o DS
1620 porque a documentação é muito útil.

Você pode montar o DS1620 na área de prototipagem da placa portadora do Stamp ou


numa placa de montagem separada. Uma vez que você o tenha montado, conecte seu
visor LCD no pino 3 de E/S do Stamp, e então carregue e execute o seguinte programa:

symbol RST = 0
' linha seleciona/reseta em 1620
symbol CLK = 1
' linha de clock para registradores de deslocamento no 1620
symbol DQ = 2
' linha de dados no 1620
symbol DQ_PIN = pin2
' representação do pino para DQ
symbol LCD = 3
' liha de dados para o LCD
inicio:
low RST
' deseleciona o 1620 a menos que esteja conversando com ele
high CLK
' pino de clock do 1620 por "default" em nível alto
pause 1000
' esperar a inicialização do termômetro e do LCD
setup:
high RST
' seleciona o 1620
b0 = $0C
' $0c é o byte de comando do 1620
' dizendo "Write Config"
gosub shift_out
' envia-o ao 1620
b0 = %10
' %10 é o byte de comando do 1620
' para configurar o modo do termômetro
gosub shift_out
' envia-o ao 1620
low RST
' deseleciona o 1620
pause 50
' atraso de 50ms para a EEPROM
start_convert:
b0 = $EE
' $EE é o byte de comando do 1620
' para iniciar conversões
high RST
' selecionar o 1620

gosub shift_out
' envia-o ao 1620
low RST
' desseleciona o 1620
' Este é o loop principal
' - lê e mostra a temperatura a cada segundo
loop_principal:
high RST
' selecionar o 1620
b0 = $AA
' $AA é o byte de comando do1620
' para ler a temperatura
gosub shift_out
' enviá-lo ao 1620
gosub shift_in
' lê a temperatura
' a pertir do 1620
low RST
' deselecionar o DS1620.
gosub display
' mostra a temperatura em graus C
pause 1000
' aguarda um segundo
goto loop_principal
' A subrotina shift_out envia o que estiver no
' byte b0 para o 1620
shift_out:
output DQ
' configura o pino DQ para
' modo de saída
for b2 = 1 to 8
low CLK
' preparar para carregar o bit
' no 1620
DQ_PIN = bit0
' envia o bit de dados
high CLK
' carrega o bit de dados no 1620
b0 = b0/2
' desloca todos os bits para a direita
' na direção ao bit 0
next
return
' A subrotina shift_in obtêm a
' temperatura em 9 bits do 1620
shift_in:
input DQ
' configura o pino DQ para
' modo de entrada
w0 = 0
' limpa w0
for b5 = 1 to 9
w0 = w0/2
' desloca a entrada para a direita.
low CLK
' pede ao 1620 o próximo bit
bit8 = DQ_PIN
' lê o bit
high CLK
' alterna o pino do clock
next
return
' Mostra a temperatura em graus C
mostra:
if bit8 = 0 then pos
' if bit8=1
' então a temperatura é negativa
b0 = b0 and/ b0
' inverter b0 com o uso de NAND
' a operação NAND com ele mesmo
b0 = b0 + 1
pos:
serout LCD, n2400, (254, 1)
' limpar o LCD
serout LCD, n2400, ("Temp = ")
' mostrar "Temp="
' no visor
bit9 = bit0
' gravar o meio grau
b0 = b0 / 2
' converter para graus
if bit8 = 1 then neg
' ver se a temperatura é negativa
serout LCD, n2400, (#b0)
' mostra temperatura positiva
goto meio
neg:
serout LCD, n2400, ("-", #b0)
' mostra temperatura negativa
meio:
if bit9 = 0 then zero
serout LCD, n2400, (".5 C")
' mostra o meio grau
goto pronto
zero:
serout LCD, n2400, (".0 C")
' mostra o meio grau
Pronto:
return
Se você executar este programa, você verá que ele mostra a temperatura em
graus Celsius com uma precisão de meio grau.

O DS1620 mede a temperatura em metades de graus Celsius. Ele retorna a temperatura


em num número de 9 bits em complemento de 2s numa faixa de -55 a 125ºC. Se você
dividir o número que receber por dois obtém a temperatura real. Números binários em
complemento de 2s são uma maneira conveniente de representar valores negativos. A
lista a seguir mostra os valores para um número de 4 bits em complemento de 2s:
0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 : -1
1110 : -2
1101 : -3
1100 : -4
1011 : -5
1010 : -6
1001 : -7
1000 : -8
Você pode ver que ao invés de 4 bits representando valores de 0 a 15, em num numero
de 4 bits em complemento de 2s, ele representa os valores -8 a 7. Você pode olhar para
o bit mais à esquerda para determinar se o número é negativo ou positivo. Se o número
for negativo, você inverte os bits e adiciona 1 para ter a representação positiva do
número.

Aqui está o que acontece com o programa do termômetro digital mostrado:

1. ele usa a palavra-chave symbol para configurar várias constantes que tornam o
programa um pouco mais fácil de ler (e também facilitam mover o chip para
diferentes pinos de E/S no Stamp):
2. ele configura os pinos CLK e RST no DS1620 para seus valores esperados;
3. ele escreve um byte de comando na EEPROM do DS1620 para mandar o chip
operar em "modo termômetro". Como o modo está armazenado na EEPROM,
você só precisa fazer isso uma vez, então poderia tecnicamente retirar esta seção
do código do programa após executar o programa uma vez (para poupar espaço
de programa);
4. o programa envia o comando $EE ("$" significa "número hexadecimal" - $EE é
238 em decimal) para dizer ao termômetro para iniciar seu processo de
conversão.

O programa então entra em um loop. A cada segundo, ele envia um comando ao


DS1620 dizendo ao DS1620 para retornar a temperatura atual e então lê o valor de 9
bits que o DS1620 retorna à variável w0. O Stamp envia e recebe dados de 1 bit por vez
alternando a linha CLK no DS1620. Lembre-se que a variável w0 (16-bit) sobrepõe as
variáveis b0/b1 (8 bits), que sobrepõe as variáveis bit0/bit1/.../bit15 (1 bit). Então
quando você insere um bit do DS1620 num bit 8 e divide w0 por 2, o que você está
fazendo é transferindo cada bit para o local correto da temperatura de 9 bits do DS1620
no w0. Uma vez que a temperatura tenha sido salva em w0, a subrotina mostrada
determina se o número é positivo ou negativo e o mostra adequadamente no LCD como
temperatura em graus Celsius. A conversão de graus C em F é:

dF = dC * 9/5 + 32

Neste ponto, tivemos sucesso em criar um termômetro extremamente caro. O que você
pode fazer com isso? Aqui vai uma idéia. Digamos que você trabalhe em uma indústria
farmacêutica e está transportando medicamentos pelo país e que devem permanecer
numa certa temperatura todo o caminho ou os medicamentos se deteriorarão. O que
você pode fazer com o Stamp é criar um termômetro de registro de dados. Tanto a
Jameco (peça número 143811) quanto a Parallax (part number 27960) vendem um
equipamento chamado "módulo RAM Pack". Ele contém um chip RAM de 8 kilobytes
(ou 32 kilobytes opcionalmente) de baixa potência com uma interface serial. Você pode
adicionar este componente (ou algo similar) ao seu Stamp e escrever códigos que
gravam leituras de temperatura na RAM a cada minuto. Você pode então colocar seu
Stamp no transporte de medicamentos e ao final da viagem recuperar o Stamp. O
módulo RAM conteria o histórico de temperatura de toda a viagem e você saberia se os
medicamentos foram danificados.

Há muitos tipos de equipamentos interessantes e úteis que você pode construir com seu
Stamp agora que você sabe como funcionam os microcontroladores.

Para mais informações sobre microcontroladores ou tópicos relacionados, visite os links


da próxima página.

http://www.scribd.com/document_downloads/direct/37525401?
extension=pdf&ft=1305442000&lt=1305445610&uahk=6oPYmLmAk2PO0rx7SBfUF
ugyQNo

Você também pode gostar