Página Anterior

Índice Geral

Índice do Capítulo

Próxima Página

 

CAPÍTULO 1

Introdução aos Microcontroladores

Introdução
História
Microcontroladores versus microprocessadores

1.1 Unidade de Memória
1.2 Unidade Central de Processamento
1.3 Barramentos
1.4 Unidade de Entrada e Saídas (I/O)
1.5 Comunicação Serial
1.6 Temporizadores
1.7 Watchdog Timer
1.8 Conversor Analógico Digital
1.9 Programa

Introdução

O grande avanço e o potencial que encontramos hoje no área dos microcontroladores teve seu início com o desenvolvimento da tecnologia dos circuitos integrados. Esse desenvolvimento tornou possível a integração de centenas de milhares de transistores em uma única pastilha semicondutora - chip. Esse poder de integração foi um pré-requisito para a produção dos processadores e possibilitou o surgimento dos primeiros computadores mediante adição de alguns periféricos, tais como: memória, linhas de entrada-saída, timers e outros. Posteriormente, com o avanço cada vez mais da microeletrônica, foi possível colocar no mesmo circuito integrado, o processador e os periféricos. Surgiram então os microcontroladores.

História

Em 1969 uma equipe de engenheiros japoneses da empresa BUSICOM chegou aos Estados Unidos com a proposta de poder utilizar uns poucos circuitos integrados em seus projetos de calculadoras eletrônicas. O desafio foi aceito pela INTEL e Marcian Hoff foi o responsável pelo projeto. Marcian era o único com experiência com computadores (PC) e lhe ocorreu sugerir aos projetistas uma alteração fundamental na concepção do projeto original dos construtores japoneses. A solução proposta por Marcian presumia que as funções do circuito integrado seria determinado por um programa armazenado em sua memória. Isso significava que esta configuração seria mais simples, mas que iria requerer um pouco mais de memória em relação ao projeto original proposto pelos engenheiros japoneses. Após um tempo, os engenheiros japoneses aprovaram a idéia de Marcian por ser uma solução mais fácil. Frederico Faggin foi uns dos maiores mentores da INTEL. Ele se transferiu para a INTEL e em apenas 9 meses transformou a idéia em um produto de sucesso em sua primeira concepção. O projeto de Marcian foi então transformado em um produto pronto fazendo surgir o primeiro microprocessador. Em 1971 a INTEL obteve os direitos de comercialização do chip após comprar a licença da BUSICOM. Nesse mesmo ano a INTEL lançou no mercado o microprocessador chamado 4004. Ele foi o primeiro microprocessador de 4-bits com a velocidade de 6.000 operações por segundo. Não muito tempo depois a empresa americana CTC solicitou da INTEL e da Texas Instruments o projeto de um microprocessador de 8-bits para uso em terminais. Com base na aplicação da CTC a INTEL e a Texas Instruments começaram a trabalhar na fabricação do novo microprocessador que culminou com o lançamento em abril de 1972 do primeiro microprocessador de 8-bits chamado 8008. O microprocessador era capaz de endereçar 16Kb de memória, possuia 45 instruções, e velocidade de 300.000 operações por segundo. Esse microprocessador foi o precursor de todos os microprocessadores de hoje. A INTEL continuou seus desenvolvimentos e em abril de 1974 lançou no mercado o processador de 8-bits chamado 8080 capaz de endereçar 64Kb de memória com 75 instruções e preço inicial de $360.

A MOTOROLA, uma outra empresa americana, acompanhando os acontecimentos e as tendências tecnologicas do momento colocou no mercado o microprocessador de 8-bits 6800. O engenheiro chefe foi Chuk Peddle e a MOTOROLA foi a primeira empresa a fabricar, em conjunto com o processador, alguns periféricos tais como: 6820 e 6850. Ao mesmo tempo muitas empresas reconheceram a importância dos microprocessadores e começaram seus próprios desenvolvimentos. Chuck Peddle deixou a MOTOROLA para se unir a empresa MOS Technology e continuou trabalhando intensamente no desenvolvimento de microprocessadores.

Em 1975 a empresa MOS Technology apresentou e anunciou na WESCON nos Estados Unidos a colocação no mercado dos microprocessadores 6501 e 6502, a um custo de $25 cada, em que o comprador poderia adquirir imediadamente. Esse acontecimento tomou lugar na história dos microprocessadores. Isso foi tão espetacular na época que muitos pensaram ser algum tipo de golpe de mercado, considerando que competidores vendiam os microprocessadores 8080 e 6800 por $179 cada. Como resposta, os competidores INTEL e MOTOROLA baixaram seu preços no primeiro dia de exposição para $69.95 por microprocessador. A MOTOROLA rapidamente abriu um processo judicial contra a MOS Technology e Chuck Peddle por copiar o 6800. A MOS Technology parou de fazer o 6501, mas continuo fabricando o 6502. O microprocessador 6502 era um processador de 8-bits com 56 instruções e capacidade de endereçar 64Kb diretamente. Devido ao seu baixo custo ele tornou-se muito popular e fez partes de vários computadores tais como: KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra, e muitos outros. Logo apareceram vários mercados para o 6502 (Rockwell, Sznertek, GTE, NCR, Ricoh, e a Comodore que adquiriu a MOS Technology que durante o período de prosperidade vendia uma média de 15 milhões de processadores por ano!)

Entretanto, outras empresas tomaram rumo diferente. Frederico Faggin deixou a Intel e fundou sua propria empresa; a Zilog. Em 1976 a Zilog anunciou o Z80. Durante o projeto desse processador Faggin tomou uma decisão fundamental. Sabendo que uma grande quantidade de programas tinham sido desenvolvidos para o 8080, Faggin idealizou seu processador compatível com o 8080. Assim, todos os programas já desenvolvidos no mundo para o 8080 poderiam funcionar com o processador Zilog sem a necessidade de custos adicionais referente a desenvolvimento de novos programas. Além dessa característica, o processador Z80 possuia muitas outras que fizeram dele um poderoso processador para sua época. Ele tinha capacidade de endereçar até 64Kb de memória, tinha 176 instruções, um grande número de registros, opções de uso como memórias do tipo dinâmicas e estáticas, fonte de alimentação simples, alta velocidade de processamento, etc. O Z80 foi um grande sucesso e muitos migraram do 8080 para o Z80. Podemos dizer, sem sombra de dúvida, que o Z80 foi o microprocessador de 8-bits de maior sucesso comercial de sua época. Além da Zilog surgiram novos fabricantes tais como:
Mostek, NEC, SHARP, e SGS. O Z80 foi o coração de muitos computadores como: Spectrum, Partner, TRS703, Z-3, e outros.

Em 1976, a Intel desenvolveu uma versão melhorada do seu microprocessador de 8-bits e o chamou de 8085. Entretanto, o Z80 era muito melhor e ganhou a batalha com o processador da Intel. Além desse, apareceram no mercado outros processadores (6809, 2650, SC/MP etc.). Entretanto, nenhum deles trazia uma grande melhoria que justificasse uma mudança no rumo do mercado para algo novo. Assim, o 6502 e o Z80 junto com o 6800 permaneceram como os principais representantes da família de processadores de 8-bits da época.

Microcontroladores versus Microprocessadores

Os microcontroladores diferem dos microprocessadores em muitos aspectos. O Primeiro e o mais importante é sua funcionalidade. Em um sistema com microprocessador outros dispositivos tais como: memória ou componentes para comunicação serial ou paralela, devem ser adicionados ao sistema. Em outras palavras, o microprocessador é o coração do sistema e possui uma capacidade de processamento maior, visto que, as tarefas atribuídas aos periféricos são realizadas por outros dispositivos. Por outro lado os microcontroladores são projetados para realizarem todos as funções em um único chip. Nenhum componente externo é necessário para sua aplicação porque todos os periféricos estão dentro do microcontrolador. Assim, uma vantagem obvia dos microcontroladores é o ganho de espaço físico no projeto de hardware.

1.1 Unidade de memória

A memória é a parte do microcontrolador que possui a função de armazenar os dados.
A maneira mais fácil de entender como ela funciona é imaginar a memória como um armário com várias gavetas contendo alguns objetos. Se marcamos cada gaveta de maneira que elas não possam ser confundidas, então, cada uma pode ser facilmente acessível. Isso é o suficiente para sabermos o destino de cada objeto e o conteúdo de cada gaveta.

A Memória funciona exatamente dessa maneira. Para uma determinada entrada ou endereço (gaveta) nós podemos saber o conteúdo ou dado correspondente (objetos). Partindo desse princípio podemos tirar dois conceitos: memória e endereçamento. A memória é a soma de todas as posição individuais e endereçamento é a seleção de uma posição de memória em particular. Isso significa que para sabermos o conteúdo de uma posição de memória em particular precisamos selecionar a localização de memória desejada e esperar o retorno do conteúdo daquela posição. Esse é o processo de leitura em uma posição de memória e para que ele possa ser realizado é necessário um sinal de controle que informe a memória tratar-se de uma operação de leitura. Esse sinal ou linha de controle normalmente é chamado de R/W (read/write - leitura/escrita). Se R/W=1, uma operação de leitura será processada, se R/W=0, a operação será de escrita na posição de memória selecionada.

1.2 Unidade Central de Processamento

Vamos adicionar mais 3 posições de memória a um bloco específico dentro do microcontrolador. Chamamos cada posição dessa pequena porção de memória de registrador. Esse bloco possui a capacidade de multiplicar, dividir, somar, e subtrair o conteúdo desses registradores, bem como mover o conteúdo desses registradores para outras posições de memória. Esse bloco é chamado de CPU "Central Processing Unit" ou UCP "Unidade Central de Processamento".

Registradores são portanto posições de memória cuja função é auxiliar a CPU na realização de várias operações matemáticas ou qualquer outra operação que envolva transferência de dados. Vamos ver então a situação em que nos encontramos. Temos dois blocos independentes (memória e CPU) os quais estão interligados e qualquer transfereência de dados de um bloco para outro deverá ser realizada sob o comando da CPU. Se, por exemplo, quisermos somar o conteúdo de duas posições de memória e retornar o resultado para uma outra posição de memória, nós precisamos de uma conexão entre a memória e a CPU. É necessário então um caminho físico para que os dados possam fluir da CPU para memória e vice-versa.

1.3 Barramento

Este caminho é chamado de barramento. Fisicamente, ele representa um grupo de 8, 16, ou mais linhas. Existem dois tipos de barramento: barramento de dados e barramento de endereços. O barramento de endereço consiste de uma quantidade de linhas correspondente ao tamanho da memória que queremos endereçar. Esse barramento é utilizado para informar a memória qual a posição de memória será acessado em um ciclo de leitura ou escrita. O barramento de dados consiste de uma quantidade de linhas correspondente ao tamanho ou magnitude do dado a ser manipulado pela CPU. Em nosso estudo estaremos trabalhando com microcontroladores de 8-bits, portanto, teremos um barramento de dados de 8-bits ou 8 linhas de conexão para dados. Esse barramento conecta todos os blocos dentro do microcontrolador.

A concepção de barramento interno trouxe uma enorme funcionalidade ao microcontrolador e aos processadores de uma maneira geral. Entretanto, até então, nosso microcontrolador não tem qualquer contato com mundo externo. Assim, para remover essa deficiência, vamos adicionar um outro bloco que leverá os barramentos de dados e endereços para o ambiente externo ao chip. Esses barramentos podem ser acessível externamente através dos pinos do Circuito Integrado - CI.

1.4 Unidade de Entrada e Saída I/O

Chamamos esse bloco de portas. Existem vários tipos de portas: entrada, saída ou portas bidirecional. Quando trabalhamos com as portas, primeiro precisamos configurar o tipo de porta que queremos trabalhar. Depois escrevemos ou lemos os dados dependendo do tipo de porta selecionado.

As operações com as portas funcionam como simples operação de leitura ou escrita em uma posição de memória específica. Uma simples operação de escrita na porta leverá o dado correspondente para os pinos externos do C.I.

1.5 Comunicação Serial

Em adição ao blocos que já colocamos nos itens anteriores, vamos colocar um outro bloco com a capacidade de se comunicar com o mundo exterior. Entretanto, essa maneira de comunicação tem suas vantagens em relação ao visto anteriormente: comunicação paralela via barramento de dados. Uma grande vantagens desse tipo de comunicação é o pequeno número de linhas necessárias para transferência dos dados. Se nosso sistema microcontrolado precisa se comunicar a longa distâncias com um outro sistema, o número de vias versus distância não inviabilizará economicamente o projeto. Com comunicação serial podemos reduzir o número de ligações entre os sub-sistemas sem perda de funcionalidade. Supomos que estaremos trabalhando somente com três linhas de comunicação, e que usaremos uma das linhas para recepção de dados - RX, outra para envio de dados - TX, e a terceira como referência para as outras duas - GND. Para que um sistema possa entender o outro é necessário estabelecer determinadas regras de comunicação que chamamos de protocolo de comunicação serial. Esses protocolos possibilitam os sistemas conversarem utilizando a mesma linguagem. Por exemplo, vamos supor que nós temos o seguinte protocolo: O nível lógico "1" é colocado na linha de transmissão - TX até o início de uma transmissão de dados. Após o início da comunicação colocamos nível lógico "0" nesta linha por um período de tempo que chamaremos de T. Assim, o receptor saberá que ele deverá receber dados e ativará seu mecanismo de recepção. O transmissor então começará a enviar zeros e uns (transmissão bit a bit) iniciando com o bit de ordem mais baixa (bit menos significativo) e terminando com o bit de ordem mais alta (bit mais significativo). Cada bit permanece na linha por um período de tempo de igual a T e após a transmissão do oitavo bit a linha TX é colocada em nível lógico "1" para sinalizar ao receptor o fim da transmissão de um dado. O protocolo descrito é conhecido na literatura técnica como NRZ (Non-Return to Zero).

Como temos linhas independentes para recepção e transmissão de dados é possível enviar e receber dados ao mesmo tempo. Essa característica de comunicação serial é chamada full-duplex e o bloco responsável por esse tipo de comunicação é denominado de interface de comunicação serial.

Diferentemente da comunicação paralela, a transmissão é feita bit a bit ou bits em série, daí o termo comunicação serial. O dado recebido pelo bloco de recepção fica armazenado em uma posição de memória que chamamos de buffer. Uma vez no buffer o dado pode ser lido pela CPU via barramento de dados interno.

1.6 Temporizadores

Até então, nós podemos receber, enviar, e processar dados.

Entretanto, para aplicações industriais nós precisamos adicionar mais alguns blocos. Um deles é o Temporizador ou Timer. Esse bloco é importante pois eles nos dá informações sobre tempo, duração, protocolos, etc. A unidade básica do temporizador é um contador livre, ou seja, um registro que tem seu valor incrementado por um em intervalo de tempo definido. Assim, se pegamos valores do contador durante intervalos de tempo discretos T1 e T2, podemos, por meio de sua diferença, determinar o período de tempo transcorrido. Isso é uma característica muito importante do microcontrolador e para completo entendimento é necessário um pouco de nosso tempo.

1.7 Watchdog Timer

Um outro aspecto que merece nossa atenção é a condição de perfeito funcionamento do microcontrolador durante seu tempo de execução. Suponha que, como resultado de uma interferência (o que freqüetemente ocorre na indústria), nosso microcontrolador pára a execução do programa, ou pior, começa a trabalhar errôneamente.

Certamente, quando isso ocorre com um computador, nós simplemente resetamos a máquina e ele recomeça o trabalho. Entretanto, na maioria das aplicações é impraticável o uso de um botão de reset no microcontrolador para resolver o problema.

Para solucionar o problema, nós precisamos inserir um novo bloco chamado watchdog. Este bloco é na verdade um contador livre que precisa ser zerado ou resetado períodicamente pelo programa aplicativo que está rodando no microcontrolador. Caso o programa páre ou seje executado de maneira errônea, o contador deixara de ser zerado e sua contagem irá estourar gerando assim um reset automático no microcontrolador. O watchdog timer confere ao sistema um grau maior de confiabilidade sem a necessidade de supervisão humana.

1.8 Conversor Analógico Digital

Como os sinais de muitos dispositivos ou periféricos são diferentes dos sinais entendidos pelo microcontrolador (zeros e uns), eles precisam ser convertidos para o padrão digital aceito pelo microcontrolador. Essa tarefa é realizada pelo bloco de conversão analógico-digital ou simplesmente ADC. Esse bloco tem a função de converter o valor analógico de uma informação para um valor digital ou binário aceitável pela CPU.

Finalmente, o microcontrolador está completo e precisamos agora montá-lo em um componente eletrônico - CI, onde poderemos acessar seus blocos internos através de seus pinos externos. A figura abaixo mostra como seria nosso microcontrolador internamente.

Aspecto físico do interior de um microcontrolador

Na parte central do chip está localizado o substrato semicondutor e integrado nesse substrato estão todos os blocos descritos anteriormente. Os fios que saem da parte central para o pinos ligam os blocos ao mundo externo. O diagrama de blocos a seguir representa a parte central do chip.

Diagrama de blocos do microcontrolador com seus elementos básicos e conexões internas.

Para uma aplicação real, um microcontrolador sozinho não é o bastante. Além do microcontrolador - CI, nós precisamos de um programa que dirá ao microcontrolador quais tarefas ele irá exeutar (aplicação). Além disso, outros poucos elementos ainda são necessários para fazer a interface lógica com alguns elementos de controle (os quais serão discutidos mais tarde).

1.9 Programa

O desenvolvimento de programas é um campo especial na área de microcontroladores e é chamado de programação. Veja o pequeno programa a seguir escrito em uma pseudo-linguagem e tente escrever um pequeno programa também.

INICIO
REGISTRO1=POSIÇÃO DE MEMÓRIA_A
REGISTRO2=POSIÇÃO DE MEMÓRIA_B
PORTA=REGISTRO1 + REGISTRO2

FIM


O programa adiciona o conteúdo de duas posições de memória e mostra o resultado na porta A. A primeira linha do programa move o conteúdo da posição de memória "A" para dentro de um registro da Unidade Central de Processamento - CPU. Como precisamos de um outro dado para efetuar a soma, um outro valor é colocado em um outro registro da CPU. A próxima instrução ordena à CPU a somar o conteúdo dos dois registradores e enviar o resultado pela porta A. Dessa forma, o resultado da soma poderá ser visto externamente. Programação pode ser feita em várias linguagens, tais como: Assembler, C e Basic as quais são as mais comumente usadas. A linguagem Assembler é a linguagem de mais baixo nível e devido a isso possue um tempo de desenvolvimento maior. Em contrapartida, os programas desenvolvidos na linguagem Assembler são relativamente menores, assim, ocupam menos espaço de memória e possuem tempo de execução mais rápido. Como essa linguagem é muito utilizada na programação de microcontroladores ela será discutida nos próximos capítulos. Programas em linguagem C são mais fácil de serem escritos e entendidos, mas são mais lentos e ocupam mais memória em relação aos programas desenvolvidos em Assembler. A linguagem Basic é a de mais fácil entendimento, pois, suas instruções são mais parecidas com a maneira das pessoas racionarem. Entretanto, assim como a linguagem C, possue tempo de execução mais lento e ocupa mais memória. Em todo caso, antes de escolhermos uma linguagem especifica devemos considerar cuidadosamente a demanda por velocidade de execução, e o tamanho da memória disponível para o seu código assembler.

Uma vez escrito o programa, nós deveremos carregá-lo dentro do microcontrolador e executá-lo. Para que o microcontrolador trabalhe é necessário adicionar alguns componentes externos. Primeiro nós devemos alimentar (energizar) o microcontrolador com uma fonte de tensão externa e adicionar um elemento oscilador (clock) que terá função semelhante ao papel realizado pelo coração no corpo humano. Baseado nesse clock o microcontrolador executa as instruções do programa. Ao ser alimentado o microncontrolador automaticamente vai para o início do programa e procurará a primeira instrução a ser executada. Como a maneira com que o dispositiva irá trabalhar depende de vários parâmetros e essencialmente do programa, o mais importante para o projeto final de um sistema microcontrolado é a habilidade do projetista de hardware e a experiência do programador para se obter a máxima performance do dispositivo com seu software.

 
 

Previous page

Table of contents

Chapter overview

Next page

© Copyright 2002. i-magazine e mikroElektronika. All Rights Reserved. Para qualquer comentário contate webmaster.