CHATPIC: troca de mensagens entre microcontroladores
Autor: Ivair Teixeira Professora Orientadora: Dra. Magda Patrícia Caldeira Arantes* Faculdades de Valinhos Resumo
Introdução
Este trabalho explora o uso de microcontroladores para desenvolvimento de atividades práticas em assuntos relacionados ao hardware ou à interface hardware-software das matérias estudadas no curso de Ciência de Computação. Para isso é desenvolvido um projeto piloto denominado CHATPIC, que se trata de software e hardware necessário para troca de mensagens entre dois microcontroladores. Cada microcontrolador recebe caracteres de um teclado padrão IBM PC, exibe o texto em um display de Cristal líquido (LCD) e envia estes caracteres a outro
módulo idêntico utilizando fibra ótica ou luz como meio de transmissão. Os dois módulos estarão separados por alguns metros de distância e poderão iniciar a conversação, apresentando no
display os caracteres enviados e recebidos. Os
detalhes da comunicação entre os dispositivos utilizados: teclado-microcontrolador, diplay e microcontrolador-microcontrolador também serão discutidos.
Palavras-chaves: PIC, 16F628,
microcontroladores, microchip, MPLab, assembly, programação.
* Bolsista FUNADESP
Vivemos atualmente a “ERA DO CONHECIMENTO” em que o maior patrimônio é o capital intelectual. A eletrônica evoluiu rapidamente em muitas áreas e a eletrônica digital tornou-se acessível à maioria das pessoas. O ritmo dessa evolução aumentou com o desenvolvimento dos microcontroladores, o que também possibilitou o desenvolvimento de novos produtos, assim, a cada dia mais pessoas precisam atualizar-se e aprender outras formas de projetar novos e modernos sistemas. O microcontrolador é ideal para unir a eletrônica e a linguagem de programação, ambas, matérias do curso de Ciências da Computação.
Este trabalho apresenta o microcontrolador, detalha os itens da sua estrutura tais como registradores, memórias, portas de I/O, ULA (Unidade Lógica Aritmética), timers e controladores de interrupções, ilustra o uso desse dispositivo e apresenta um projeto piloto que foi desenvolvido para explorar a utilização do microcontrolador denominado PIC nas atividades práticas do laboratório de hardware.
Objetivos
O objetivo deste trabalho é explorar a utilização de microcontroladores da série PIC (Peripheral Interface Controller) como auxilio ao aprendizado de Arquitetura de Computadores, Sistemas Digitais e Sistemas Operacionais. Tanto o dispositivo PIC como os equipamentos necessários para utilizá-lo são de baixo custo, o que torna esse dispositivo uma opção muito interessante para auxílio didático nas disciplinas do curso de Ciência da Computação. O PIC pode ser programado para demonstrar operações com bits ou bytes, como por exemplo: operações lógicas AND, OR, XOR, NOT; operações aritméticas de soma, subtração, multiplicação, divisão e rotação de bits. Alguns detalhes da Organização e Arquitetura de Computadores e detalhes da implementação dos Sistemas Operacionais podem ser melhores compreendidos se comparados com algumas práticas de programação desenvolvidas em assembly para o PIC demonstrando o controle de interrupções,
o envolvimento dos registradores e da ULA (Unidade Lógica Aritmética) durante a execução de um programa, além de tornar mais claro, conceitos como código de máquina, mnemônicos (opcodes), a necessidade de controle das operações no barramento, diagramas de tempo,
pipeling, etc.
Metodologias
Inicialmente, foi feita uma pesquisa acerca dos componentes microcontroladores fornecidos por diversos fabricantes. Esses dispositivos foram comparados considerando a atualidade da tecnologia, ascendência no mercado, facilidade de aquisição de componente, material didático disponível, custo de hardware e de software para gravação. Foi então escolhido o componente PIC16F628 do fabricante Microchip cujas características se mostraram as mais adequadas a essa proposta.
Definiu-se então uma lista de experimentos com potencial de utilização no laboratório de hardware relacionando-os com os conteúdos apresentados nas matérias estudas no curso. O experimento denominado CHATPIC foi escolhido como projeto piloto. Passou-se então ao desenvolvimento e teste desse piloto.
Microprocessadores
As primeiras máquinas programáveis foram os teares, seguidas pelas máquinas mecânicas de calcular e posteriormente as eletromecânicas, todas grandes e extremamente limitadas, porém, essas máquinas constituíram um degrau importante ao desenvolvimento dos computadores eletrônicos.
O primeiro computador eletrônico foi o ENIAC (Electronic Numerical Integrator And
Computer) da universidade da Pensilvânia que
contava com 18.000 válvulas e pesava cerca de 30 toneladas. Esse computador foi seguido pelo EDVAC (Electronic Discrete Variable
Computer), pelo IAS do Instituto de Estudos
Avançados de Princeton, pelos UNIVAC I e II, e pelo Mark I, o qual a IBM ajudou a construir. A IBM também lançou a série 700/7000 em
1953 e se estabeleceu como o maior fabricante de computadores do mercado. Finalmente, por volta de 1964, essa empresa deu início à série 360: a primeira família planejada de computadores que influenciou toda a indústria desses equipamentos [STALINGS, 2002].
Com o tempo, as válvulas foram substituídas pelos transistores, depois pelos circuitos integrados e, atualmente, a tecnologia ULSI (Ultra Large Scale Integration) possibilita a integração de mais de 100 milhões de dispositivos como resistores e transistores em um único chip.
Em 1971 a Intel lançou o i4040 de quatro bits, o primeiro microprocessador digital que com sua evolução permitiu o surgimento dos microcomputadores de tamanho reduzido, baixo consumo e custo mínimo.
Teve início então uma grande revolução na área da microeletrônica, pois, com a evolução do microprocessador i4004 surgiram outras famílias de MPUs (Micro Processor Unit) de maiores velocidades e capacidade produzidos por diversos fabricantes como Zilog, Motorola, Mostek (Apple II) entre outros, e entre eles estava o Intel 8080A - o primeiro microprocessador a implementar um barramento de 16 bits, 64K de memória, clock de 3Mhz e 78 instruções [SOUZA, 2003] [PEREIRA, 2003]. Do 8080A derivaram-se os primeiros MCUs (Micro Controler Unit) que são os atuais microcontroladores. Hoje, o mercado disponibiliza uma grande variedade de tipos desses dispositivos como, por exemplo, os MCS-51, ST, COP, AVR, PIC.
Microcontroladores
Um microcontrolador pode ser definido como um componente dotado de “inteligência” programável. Ou seja, esse componente possui uma memória interna que possibilita a gravação de uma seqüência determinada de comandos ou instruções estruturadas na forma de programa, que serão executadas seqüencialmente ou respondendo a eventos internos ou externos.
Estes comandos ou instruções são capazes de “compreender” o controle de
periféricos, como por exemplo, sinais analógicos ou digitais provenientes de botões, chaves, sensores (pressão, temperatura, etc) e podem provocar a geração de sinais de saída para acionamento de contatores, relês, motores de passo, LCD (Display de Cristal Líquido), dentre outros.
Atualmente, estamos cercados por diversos equipamentos que utilizam microcontroladores, tais como, fornos microondas, videocassetes, controle remoto, alarmes automotivos, televisores, refrigeradores, brinquedos e diversos outros. A tendência é que este número aumente cada vez mais, pois as aplicações para os microcontroladores crescem a cada dia, assim como a necessidade da miniaturização e diminuição de custos.
Microcontrolador versus Microprocessador
O microcontrolador é similar ao microprocessador, mas possui menor capacidade de processamento, pois sua ULA (Unidade Lógica Aritmética) é muito mais simples e limitada, porém, para ser usado o microprocessador necessita de componentes e periféricos externos, como os componentes para armazenamento de dados e variáveis, armazenamento de programas (memória RAM), circuitos geradores de clock, periféricos para entrada e saída de dados (I/O), ao passo que o
microcontrolador “embute” em uma única pastilha de silício todos os componentes e periféricos necessários a sua utilização: um microcontrolador inclui em um único chip Memória RAM, memória Flash regravável para armazenamento do programa, memória eeprom, geradores de clock, comunicação serial, controles PWM, portas de I/O, conversores analógico digital, entre outros.
Arquitetura Von-Neumann e Havard
Grande parte dos microcontroladores apresenta uma arquitetura conhecida como arquitetura de Von-Neumann, em que apenas um barramento interno normalmente de 8 bits é usado para instruções e dados e, tanto o programa como dados são armazenados na memória principal [SILVA, 2003].
Outros MCUs apresentam uma arquitetura conhecida como Havard, que utiliza dois barramentos internos: um de dados e outro de instruções e memórias independentes para programa e dados. Este tipo de arquitetura permite o paralelismo na execução das instruções, pois enquanto uma instrução é executada, outra pode ser buscada na memória. Esta característica é conhecida como pipeline e torna o processamento mais rápido. Na Figura 1 é feita à representação do barramento dessas duas arquiteturas.
O PIC utiliza a arquitetura havard com um barramento de dados de 8 bits e um conjunto de instruções que pode ser de 12, 14 ou 16 bits dependendo do modelo e da quantidade de instruções disponíveis, o OPCODE da instrução
já inclui o dado e o local onde vai operar (quando necessário) assim apenas uma posição da memória é utilizada, economizando muita memória.
(Reduced Instruction Set Computer) que significa Computador com Conjunto Reduzido de Instruções. Os microcontroladores RISC possuem em torno de 35 instruções apenas, número muito menor que os componentes convencionais que utilização a tecnologia CISC (Complete Instruction Set Computer) e chegam a possuir mais de 100 instruções. [SILVA, 2003]
Gravação
Para a implementação do código de um programa no PIC, um editor conhecido como MPLab pode ser usado. O MPLab é um ambiente integrado que possibilita a programação, simulação e compilação de programas, é fornecido pelo fabricante do PIC e possibilita a utilização de Assembly apropriado para esses microcontroladores. Também podem ser utilizados softwares de outros fabricantes, incluindo opções de programação de linguagens de alto nível como C, Basic, Pascal, JAL, etc. Depois de desenvolvido o programa, um hardware gravador deve ser utilizado. Pode-se utilizar um equipamento original, fornecido pelo fabricante do PIC ou diversos outros disponíveis no mercado. Para efetuar a gravação, esse equipamento deve ser conectado a um PC pela porta paralela, Serial ou USB.
Após a implementação, compilação e simulação o programa é gravado na memória, interna ao chip, em código de máquina e o componente pode ser montado no local que irá operar.
O PIC16F628
O microcontrolador utilizado para desenvolver experimentos para explorar sua aplicação no laboratório de hardware de um curso de Ciência da Computação pertence à família conhecida popularmente como PIC (Peripheral Interface Controller) fabricado pela empresa Microchip [SILVA, 2003]. O modelo PIC16F628 foi o componente escolhido por ser de fácil aquisição no mercado local, boa capacidade, ampla literatura, fácil programação e custo reduzido, características que o tornam
uma ótima opção para iniciantes. Ainda, devido à compatibilidade característica desta família, os exemplos utilizados poderão ser facilmente migrados para outros modelos, com pouquíssimas alterações no código. Na Figura 2 é apresentado o esquema de pinos do microcontrolador PIC16F62X. [Datasheet 16F628, 16F84].
Extrutura interna do PIC
O PIC inclui vários componentes internos que possibilitam sua aplicação sem a necessidade de periféricos. O diagrama da Figura 3 ilustra os componentes internos do PIC. Neste diagrama, a principal característica da arquitetura Havard pode ser observada, que é um barramento de 14 bits para a memória de programa e um barramento de 8 bits para a memória de dados. O PIC16F628 possui três tipos de memória, sendo elas: uma memória de programa constituída por 2048 x 14 bits de memória não volátil do tipo flash e que permite ao menos mil ciclos de apagamento e gravação; uma memória RAM, volátil, constituída de 224 x 8 bits que armazena tanto as variáveis de uso geral criadas pelo programador, como registradores especiais utilizados pelo sistema para execução do programa e operações com da ULA e uma memória EEPROM com 128 x 8 bits, não volátil, para o armazenamento de dados que serão necessários na próxima vez que o PIC for energizado.
O PIC16F628 possui três temporizadores (timers) internos configuráveis sendo o Timer1 um contador de 16 bits e divisores de freqüência (prescaler) até f/128, o que permite aumentar a capacidade destes contadores, o circuito gerador de clock interno de 4 Mhz e 37 Khz ou externo com cristais de até 40Mhz. Operando em 4Mhz
o PIC é capaz de executar um milhão de instruções por segundo.
O dispositivo possui também: comparadores analógicos com tensão de referência programável internamente para aplicações analógicas como, por exemplo, voltímetros e amperímetros; um canal de saída PWM para controle de dispositivos como lâmpadas, motores e resistências; 15 pinos de I/ O, totalmente configuráveis como entrada ou saída, com capacidade de corrente de até 25 mA por pino; e comunicação serial síncrona e assíncrona já implementada, com opções de velocidade que variam entre 0,6 e 500 Kbps.
Este modelo conta ainda com dez possíveis fontes de interrupção de hardware, totalmente configuráveis, que permitem o desvio da atual linha de programa em execução para um endereço específico da memória. O programador deverá elaborar um código para identificação da fonte da interrupção, tratamento desta interrupção e retorno à seqüência normal do programa. São exemplos de fontes de interrupção: um pulso positivo ou negativo em um determinado terminal do microcontrolador,
estouro dos contadores (timers), caractere recebido ou transmitido no módulo de comunicação serial.
Exemplo de aplicação do PIC: Máquina controlada por microcontrolador
Uma das principais aplicações dos microcontroladores é na automação de processos industriais. Na Figura 4 está ilustrado a utilização do PIC para controlar a movimentação de uma esteira.
Um microcontrolador, dois sensores, cabos para interconexão, um programa, além da esteira e do objeto sobre a esteira são necessários para controlar o sentido da rotação da esteira. Controlado pelo programa, a esteira gira para direita ou para esquerda. Quando o objeto é posicionado sob o sensor, o ponteiro do programa desvia para a rotina que inverte o sentido de rotação da esteira. Assim o programa continua sua execução enquanto estiver sendo alimentado.
O PIC como apoio ao aprendizado
Assuntos da matéria Arquitetura e Organização de Computadores podem ser praticados utilizando a programação do PIC em
assembly. A possibilidade de manipulação de
conceitos teóricos em aplicações práticas além de melhor fixar esses conceitos aumenta o interesse do aluno pelas aulas: o aluno passa a vislumbrar a possibilidade de construir aplicações práticas utilizando microcontroladores e por extensão microprocessadores.
A programação do PIC em assembly também pode ser usada para praticar assuntos da matéria Sistemas Operacionais, como por exemplo, a operação salvar e restaurar o “contexto”. Em um dispositivo PIC, sempre que ocorre uma interrupção de hardware, a execução do programa é desviada para um endereço especifico da memória para tratamento da interrupção por uma rotina escrita pelo programador. No início desta rotina, os valores que estiverem armazenados no registrador temporário “W” e no registrador “STATUS” devem ser salvos, pois esses registradores armazenam informações muito utilizadas pelo
sistema e com certeza serão modificadas na rotina de tratamento da interrupção, porém os valores armazenados antes da interrupção deverão ser restaurados após o tratamento da interrupção. O PIC, portanto, pode ser utilizado para que alguns módulos, ou um núcleo básico de um sistema operacional sejam construídos tornando esse assunto claro, objetivo e menos árido.
O PIC possui instruções próprias para as operações lógicas AND, OR, XOR, NO que podem ser utilizadas para demonstrá-las. Programas para implementação de soma, subtração, multiplicação e divisão binária utilizando apenas as operações lógicas podem ser implementados para práticas da disciplina Sistemas digitais.
Por fim, a própria arquitetura Havard do PIC poderá ser utilizada para aprendizado e comparação na disciplina de Arquiteturas de Computadores.
Projeto prático
Com a finalidade de explorar as potencialidades do PIC no laboratório de
hardware foi desenvolvido um projeto piloto. Este projeto consiste em um microcontrolador programado para interconectar um display de cristal líquido e um teclado padrão IBM PC a outro módulo idêntico, utilizando fibra ótica ou luz, permitindo uma comunicação simultânea em tempo real.
Na Figura 5 mostra um dos módulos montados em uma placa de circuito impresso, sem o teclado e sem a conexão de fibra ótica/ Laser.
Na Figura 6 está ilustrado de forma esquemática o funcionamento do CHATPIC utilizando a comunicação via laser.
O programa para essa aplicação foi desenvolvido em linguagem assembly utilizando o editor MPLAB. Este programa implementa algoritmos para leitura do teclado, apresentação dos caracteres digitados no display do módulo local e comunicação serial com o módulo remoto. O layout dos módulos do CHATPIC foram desenvolvidos e implementados. Também foi construído um gravador para PIC. Este gravador foi usado para gravar o programa desenvolvido em cada microprocessador.
Para a realização do projeto foram utilizados três diferentes tipos de comunicação, a primeira é a comunicação serial síncrona, a qual é responsável pela transferência de um caractere qualquer digitado em um teclado IBM-PC para o microcontrolador, nesta forma de comunicação o barramento é composto por duas linhas, uma para realizar o sincronismo entre os
dispositivos, e outra para o tráfego da informação, ou seja, para transferir o caractere associado à tecla pressionada. Essa comunicação está ilustrada na Figura 7.
O protocolo de comunicação do teclado é composto por um conjunto de onze bits, os quais são transmitidos quando uma tecla é pressionada e, repetida quando esta tecla é liberada. As teclas são dispostas em uma matriz formando linhas e colunas, estas são ligadas ao circuito integrado que controla o teclado. Esse controlador é responsável pela identificação da tecla pressionada e pela geração da seqüência de onze bits correspondente a esta tecla.
Se nenhuma tecla é pressionada as linhas de sincronismo (Clock) e dados (Data) permanecem em nível 1, ou seja, com tensão positiva. Ao ser pressionada uma tecla qualquer, o controlador de teclado muda o nível da linha de sincronismo para 0, ou seja, tensão negativa e simultaneamente muda a linha de dados também para nível 0. O nível 0 na linha de sincronismo é detectado pelo PIC e dispara o código para “capturar”, ou ler o nível de tensão presente na linha de dado. Se esta linha estiver com nível positivo de tensão, na primeira posição de uma variável será armazenado o número 1 e se estiver com nível negativo será armazenado a valor 0. Após esse procedimento a linha de sincronismo volta ao nível de tensão positiva. Assim, na transmissão dos demais bits, esse processo se repete, sempre colocando o bit a ser transmitido na linha de dados sincronizado com a mudança para nível 0 da linha de sincronismo e incrementando a posição a ser armazenada na variável.
Dos onze bits transmitidos, o primeiro é denominado Start-Bit e é seguido por uma seqüência de 8 bits que podem representar qualquer caractere, um bit de paridade que é um código de verificação de erros e finalmente pelo Stop-Bit sinalizando o fim da transmissão de um caractere.
Uma outra forma de comunicação implementada é a comunicação paralela síncrona que é realizada entre o Microcontrolador e o Display de Cristal Líquido (LCD) para a apresentação dos caracteres recebidos ou digitados no teclado. Essa comunicação está ilustrada na Figura 8.
Um LCD possui 14 pinos, que são utilizados para: alimentação positiva (5 volts), terra ou negativo (0 volt), controle de brilho, configuração para leitura ou escrita no display, configuração se o dado é um caractere ou uma instrução, habilitação de 8 pinos para o barramento de dados, sendo possível também o funcionamento do barramento com 4 pinos.
A implementação escolhida foi o modo de barramento com 4 vias, assim, como cada caractere é composto de 8 bits são necessárias dois ciclos para a transferência total, cada um enviando metade da palavra que constitui um caractere.
A seqüência utilizada para a transferência completa de um caractere consiste em: carregar os 4 bits menos significativos no barramento, configurar o display para caractere ou dado, configurar o display para escrita, gerar um pulso no pino de habilitação, configurar o display para leitura. Quando o armazenamento dos dados presentes no barramento estiver completo, o display retorna ao PIC que a operação de leitura do barramento foi terminada e que está pronto para receber novamente. A seguir, os 4 bits mais significativos são carregados no barramento e é gerado um novo pulso de habilitação, completando assim a transferência completa do caractere.
Por fim, o último modo de comunicação é a comunicação Serial Assíncrona, ilustrada na Figura 9. Essa é a comunicação realizada entre os dois módulos, utilizando como meio guiado a modulação do feixe de luz produzida pelo “laser pointer”. Esta implementação é bem parecida com a comunicação serial síncrona, porém neste
modo, não existe a linha de sincronismo entre os módulos, existe somente a linha de dados e, para realizar a sincronização dos bits, cada módulo possui um relógio interno com tempos iguais que dependem da velocidade de transmissão desejada, neste caso 9600 bps (bits por segundo).
O protocolo utilizado é conhecido por RS232 e a sua implementação, de forma simplificada, consiste em cada módulo possuir um pino específico para transmissão e outro para recepção, sendo o pino de transmissão (TX) de um módulo conectado ao pino de recepção (RX) do outro módulo.
Cada módulo mantém o pino de transmissão sempre em nível 1. Quando um caractere for ser transmitido, o módulo dispara um relógio interno com um tempo predefinido e o pino de transmissão é colocado em nível 0. Esse bit zero inicial é conhecido como
Start-Bit. Este nível 0 é detectado pelo outro módulo
que também dispara seu relógio interno com um tempo igual ao módulo transmissor. Ao final do tempo do relógio do módulo transmissor o primeiro bit é colocado no pino de transmissão e no módulo receptor também ocorre o final do tempo no seu relógio e este Bit é lido, ou “capturado”, e armazenado em uma variável. Assim ocorre sucessivamente a transmissão dos 8 bits que compõem um caractere, a transmissão do bit de paridade e do Stop-Bit sinalizando o fim da transmissão do caractere.
Conclusão
O projeto piloto foi completamente implementado e testado e mostrou que vários conceitos tratados nas matérias do Curso de Ciência da Computação podem ser melhores compreendidos através de experimentos práticos utilizando o PIC, que é um componente de baixo custo e fácil acesso. Os equipamentos e dispositivos necessários a essa aplicação, como o gravador, componentes, software e literatura recomendada já foram incorporados ao laboratório de hardware e estão disponíveis aos professores possibilitando um rápido desenvolvimento de pequenos projetos didáticos para apoio as disciplinas citadas.
Um grande número de alunos já demonstra interesse e curiosidade em relação aos microcontroladores PIC, propondo sugestões de projetos e até mesmo competições utilizando a tecnologia, materiais e ferramentas agora disponíveis, ficando o laboratório de hardware como centro de desenvolvimento.
O trabalho terá continuidade pelos técnicos do laboratório, pelos professores e por outros alunos em novos projetos relacionados ao tema no Programa de Iniciação Científica.
Referências Bibliográficas
[STALINGS, 2002] Arquitetura de Computadores. William Stallings. São Paulo: Prentice Hall, 2002. [PEREIRA, 2003] Microcontroladores PIC técnicas avançadas. Fábio Pereira. São Paulo: Érica, 2003. [SOUZA, 2003] Desbravando o PIC - David José de Souza - Érica - 2003.
[SILVA, 2003] Microcontroladores PIC - Vidal Pereira da Silva.