CONECTANDO UM MICROCONTROLADOR A UM PC
Comunicação serial RS-232 com microcontrolador PIC



Sempre que há a necessidade de interação de um operador com um circuito microcontrolado, a mesma geralmente é feita através de um teclado ou conjunto de teclas. Porém existe uma maneira de interação que pode aumentar os recursos do próprio circuito. Estou falando da comunicação entre um microcontrolador e um PC. Neste artigo veremos como isso é possível.



MICROCONTROLADOR + PC

Você deve estar se perguntando: “Se um microcontrolador pode conter um programa para controlar um determinado processo, porque eu precisaria de um PC?”. A resposta para essa pergunta é bem simples: todo microcontrolador pode conter um programa, e este realmente pode controlar todo o processo, porém existem casos onde existe a necessidade de uma interação maior com um usuário, ou mesmo com o contexto geral (automação) onde o processo está envolvido. Porém você poderia ainda afirmar: “Mas eu posso fazer essa interação através de um teclado e um display (LCD)”. Sim, pode! Porém lembre-se que estamos falando da inclusão do processo no contexto geral.

Mas o que significa isso, inclusão do processo no contexto geral?!?” Antes de prosseguirmos vou tentar explicar o que é processo e o que é contexto. Chamarei de processo um controle específico, seja no chão de fabrica, em residências ou prédios. O contexto é um conjunto de processos ligados em uma automação maior. Por exemplo, digamos que um técnico ou engenheiro vá realizar a automação de uma casa. Estão envolvidos nesta automação os seguintes processos:

- Irrigação automática do jardim;
- Controle da temperatura ambiente da casa;
- Controle do aquecimento da água da casa e piscina;
- Segurança com alarmes, cerca eletrificada, circuito fechado de TV e porteiro eletrônico;
- Telefones;
- e outros.

Podemos dizer então que o contexto principal é a “Automação da Residência” e os processos envolvidos foram os citados. Você poderia também separar ainda mais os contextos em:

- Contexto de segurança, com os controle integrado do alarme, cerca eletrificada, circuito fechado de TV e porteiro eletrônico;
- Contexto de comodidades, com os controles da temperatura ambiente da casa, do aquecimento da água, telefones e porteiro eletrônico (este último pode ser envolvido dentro de vários conceitos).

Podemos ver então que o contexto geral integra vários processos da automação. Agora pense se cada processo necessitasse de atualizações constantes como:

- horários de rega;
- horário para ligar/desligar alarmes;
- horário para ligar/desligar o aquecimento e/ou o controle de temperatura;
- etc.

Todos estes equipamentos possuem muitas variáveis e de acordo com cada cliente e situação específica, podem mudar. Um exemplo são os horários para ligar e desligar o aquecimento da água (caixas e outras). No verão o tempo necessário para aquecer a água é diferente do que no verão. Um outro exemplo está na rega do jardim que também muda de acordo com as estações do ano.

Assim, o técnico deveria estar presente para alterar todas as variáveis, e de forma manual. Utilizando os recursos de programação oferecidos por cada equipamento. Agora imagine se estes equipamentos pudessem ser conectados a um PC e através de um programa de gerência central cada "contexto" pudesse ser reprogramado facilmente. E melhor ainda se este PC pudesse ter tabelas com todas as variações e mudanças previstas para um ano!!! Um belíssimo trabalho diria seu cliente, extremamente satisfeito. E como sabemos que a “satisfação” de nossos clientes é a “base” de qualquer negócio pode-se ver quão importante é aprender como realizar este tipo de “interligação”.



COMUNICAÇÃO RS-232

O padrão RS-232 é uma dos mais difundidos no mundo da automação e controle. Hoje em dia muitos equipamentos fazem uso do mesmo. O tipo de transmissão é serial, ou seja, transmitimos os bytes através de uma única via bit a bit e não byte a byte como em uma porta paralela, por exemplo.

Este método permite que seja utilizado um único fio para a transmissão/recepão ou dois fios, uma para transmissão e outro para recepção, dependendo do caso. E devido aos níveis de tensão estabelecidos na norma a distância de transmissão (tamanho do cabo) pode chegar a 45 metros. Existem notícias de técnicos que conseguiram comunicação com cabos com 80 metros de comprimento, porém cada caso é um caso e não posso afirmar que isso poderia funcionar em qualquer situação e ambiente, sem um estudo prévio. Aconselho sempre usar a distância segura de no máqimo 25 metros.

Para trabalhar com a comunicação RS-232, é preciso conhecer um pouco sobre o que a norma determina com relação as características “mecânicas” (formato dos conectores e distribuição dos pinos), “elétricas” (níveis de tensão presentes) e lógicas (como os dados são transmitidos e recebidos) da mesma.


Características mecânicas

Na figura abaixo você pode ver como são os conectores para a RS-232 na maioria dos PC’s e na tabela a seguir a distribuição dos pinos e suas funções.

                            Tabela – Distribuição dos pinos nos conectores

Nome do pino

Conector DB25

Conector DB09

Abreviação

Descrição

Transmit Data

2

3

TxD

Transmissão de dados. Por este pino a seqüência de bits é enviada

Receive Data

3

2

RxD

Recepção de dados. Por este pino a seqüência de bits é recebida

Request to Send

4

7

RTS

Requisição de envio. Por esta linha o agente transmissor informa que está pronto para enviar. Ativo em “1” antes de cada transmissão.

Clear to Send

5

8

CTS

Limpa para enviar. Por esta linha o modem informa que está pronto para receber dados.

Data Set Ready

6

6

DSR

Sinaliza que o modem ou periférico está pronto

Signal Ground

7

5

SG

Terra comum do sinal. Referência para níveis de tensão RS-232

Carrier Detect

8

1

CD

Detecção de transporte

Data Terminal Ready

20

4

DTR

Indica que o terminal DTR está pronto para iniciar troca de informações

Ring Indicator

22

9

RI

Indica “toque de chamada”


É muito importante também dizer que a norma separa equipamentos transmissores dos receptores (ou periféricos). Os transmissores geralmente são chamados de “Equipamentos de Dados” (DTE) e os periféricos de “Equipamentos de comunicação de dados” (DCE). Para os DTE temos os conectores no formato “macho” e para os equipamentos DCE os mesmo terão formato “fêmea”. Um PC pode ser considerado DTE e um modem externo, por exemplo, DCE.

Obs.: Existem muitas formas de conexão entre equipamentos DTE e DCE, e a norma EIA RS-232C determina como as mesmas devem ser feitas. Não abordarei este tema neste artigo, restringindo-me a comunicação RS-232 entre um PC (DTE) e um microcontrolador (DCE) sem qualquer controle de fluxo (hardware ou software).


Características elétricas

Os sinais elétricos na porta serial (RS-232) possuem níveis de tensão entre +15VDC e -15VDC.  Na figura abaixo, temos a representação de um sinal RS-232 na transmissão de um byte. Na RS-232 o “1” lógico tem nível de tensão entre -15VDC à -3VDC e o “0” lógico tem nível entre +3VDC à +15VDC. 



Características lógicas - Velocidade, número de bits, paridade, start e stop bits

Toda comunicação assíncrona depende de alguns fatores, tais como: velocidade, número de bits, paridade e stop bits.

A velocidade de comunicação é medida em bps (bits por segundo). Ela também é fundamental para o sucesso na comunicação entre equipamentos. Ambos os equipamentos (transmissor e receptor) devem ser configurados para operar na mesma velocidade, sempre. Esta velocidade pode ser configurada de 300 bps a 115000 bps nos dias atuais, dependendo exclusivamente do equipamento.

O número de bits define quantos bits compõe o byte a ser enviado. Nos dias de hoje, para a maioria dos equipamentos ele tem oito bits. Porém é possível a comunicação de 5 à 8 bits.

A paridade é o modo mais antigo e simples de se verificar um erro durante a transmissão. Ela considera o número de bits em estado lógico igual a “1”. Assim a unidade transmissora “conta” o número de bits do byte transmitido em estado lógico “1” e envia um bit informando isso. Se o número de bits for par, o bit de paridade assume o estado lógico “1”. Se ele for impar seu estado lógico será “0”.

Existem três formas de controle de paridade: par, impar e nenhuma. A diferença está em indicar se o número de bits no estado lógico “1” é sempre par, impar ou nenhum. Nesse caso o bit de paridade assume estado lógico “1” de acordo com a opção selecionada. Se a escolha for nenhum, o bit de paridade é ignorado pelo equipamento receptor.

Obs.: Apesar do bit de paridade poder informar um erro, não existe fator de correção. Neste caso seria necessário via software verificar a paridade e se detectado um erro, promover um novo envio do byte danificado.

O Stop bit é uma forma de informar o agente receptor sobre o final do byte. Ele pode assumir “1” ou “2” bits de parada.

O Start bit serve para informar sobre o inicio de uma transmissão.

Sendo assim a configuração de uma porta RS-232 exige as seguintes informações:

- velocidade;
- número de bits;
- paridade;
- número de stop bits.

A configuração para velocidade de comunicação, número de bits, paridade e número de stop bits deve ser a mesma nos equipamentos transmissor e receptor, caso contrário a comunicação não será estabelecida corretamente.



A COMUNICAÇÃO SERIAL RS-232 NOS MICROCONTROLADORES PIC

A maioria dos microcontroladores disponíveis no mercado possui uma USART (UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER). Um exemplo é o microcontrolador PIC16F628A. Sua USART possui capacidade de comunicação RS-232 no modo assíncrono com velocidade de até 115000 bps (bits por segundo), dependendo exclusivamente do cristal utilizado no clock de operação do microcontrolador.

Externamente esta USART se comunica com o mundo exterior através de dois pinos, o TX (RB2) e RX (RB1). Como você pode ver não existem outros pinos RS-232 (CTS, RTS, CD, etc) e caso exista a necessidade de seu uso, os mesmos poderão ser implementados com os outros pinos de I/O, presente no microcontrolador. Um outro ponto importante sobre os pinos do PIC é que quando utilizamos a USART interna, os pinos RB1 e RB2 não podem mais ser utilizados como pinos de I/O comuns (digitais).

Na figura abaixo mostro um esquema elétrico interessante para os testes com a comunicação serial RS-232 entre o microcontrolador PIC16F628A e um PC. No circuito é possível notar a presença de um segundo circuito integrado, o MAX232. Este componente permite adaptar os níveis de tensão da norma RS-232 para o padrão TTL, compatível com o microcontrolador PIC16F628A, e vice-versa. Devido à simplicidade do circuito sugiro o uso de uma matriz de contatos para os testes, pois como dito o circuito é apenas para testes e estudos.



O programa “PIC_RS232_F628.ASM” pode ser obtido mais abaixo na seção downloads. Ele permite controlar a comunicação serial entre o microcontrolador e um PC. Para testar este programa será necessário o uso de um programa “terminal” qualquer no PC como o Hiper Teminal do Windows, presente no menu Acessórios, ou ainda um outro qualquer como o GTKTerm presente em algumas distribuições Linux. O setup de comunicação destes programas deve ser exatamente o mesmo estabelecido no programa do microcontrolador. Utilize a porta COM que estiver livre em seu PC (não serve a porta utilizada pelo MOUSE, isso se ele for do tipo serial!).

O led D1 pisca a cada 1 segundo apenas para indicar a operação do circuito. A recepção é feita através de uma interrupção, assim o programa não precisa varrer constantemente a porta para receber um byte.

O circuito requer alimentação igual a 5VDC. Após ligar o circuito e estando este conectado corretamente ao PC com o programa terminal aberto e corretamente configurado, o programa do microcontrolador enviará a mensagem de saudação "TESTE COM. RS232 TECLE ALGO". Quando algo for digitado, o programa responderá com a mensagem "você teclou->'caracter teclado'". Parece bem simples, mas com este pequeno programa exemplo você aprenderá como configurar a USART do microcontrolador, além de como proceder para receber e transmitir um byte. Recomendo o estudo deste programa para uma melhor compreensão do funcionamento do circuito. Todo o programa foi comentado para facilitar sua compreensão.



SUGESTÕES / ALTERAÇÕES

No inicio deste artigo falei sobre o controle de um PC sobre um microcontrolador através da comunicação RS-232, visando inserir (automatizar) o processo de acordo com o contexto (interligando processos). Porém meu pequeno protótipo apenas transmite um caracter de “eco” do que foi recebido.

Neste site você poderá encontrar o projeto “Irrigador de Jardim Microcontrolado”. A idéia básica é o controle de três válvulas para irrigação de um jardim. Estas válvulas são abertas e fechadas através do controle de relés. Um quarto relé foi previsto no projeto para controle de uma sirene de aviso durante a rega (assim ninguém se molhará durante a rega). Este circuito, além de permitir a configuração dos horários através de teclas, também permite que toda a configuração seja feita através da porta serial de um PC. Veja que isso pode ser feito através de um simples programa terminal ou mesmo através de um programa especificamente desenvolvido para tal. 

Todo o circuito foi baseado no PIC16F870 e apesar deste ter um número maior de I/O’s e outros recursos diferentes do PIC16F628A, o uso de sua USART é exatamente o mesmo. Aliás, dentro da linha 16F da Microchip, o uso da USART é sempre o mesmo. Portanto, se você entendeu como dominar a USART do “pequeno” 16F628A, poderá fazê-lo também com o “grande” 16F877. Deve-se apenas tomar certos cuidados com a posição dos registradores nos bancos de memória e outros detalhes. Para isso é altamente recomendável a leitura dos datasheets de ambos os microcontroladores.

Obs.: Existem, conforme descrito, diferenças entre os diversos PIC’s da linha 16F e sendo assim, não estou afirmando que um programa desenvolvido para um determinado tipo poderá funcionar em outro. Esou apenas afirmando que a forma de configuração e utilização das USART’s nos vários tipos da linha é sempre a mesma.

Assim, o programa desenvolvido para o Irrigador de Jardim, com PIC16F870, não rodará em um PIC16F628A e o programa desenvolvido para o PIC16F628 utilizado neste artigo, também não rodará no PIC16F870. Porém se você observar as funções de transmissão e recepção, assim como o setup feito para ambas as USART’s, verá muita semelhança no uso dos registradores responsáveis pela configuração e uso da USART de cada microcontrolador.

O estudo do programa desenvolvido para o Irrigador, também poderá ajudar muito na compreensão de como utilizar um microcontrolador aliado a um PC para automatizar um determinado processo, incluindo este num “contexto” maior.


Os códigos fontes citados neste artigo, para os microcontroladores PIC16F870 (projeto irrigador de jardim) e PIC16F628A (teste da USART) estão disponíveis gratuitamente neste site, sempre na seção Download’s dos referidos artigos.



CONCLUSÃO

Se você leu atentamente o artigo, com certeza aprendeu conceitos importantes sobre a comunicação serial RS-232 e sua real eficácia em qualquer tipo de automação tanto industrial, residencial ou predial. Espero ter contribuído ainda mais para a formação da “biblioteca” de todos aqueles interessados no uso de microcontroladores. Até a próxima!



DOWNLOADS:

- Circuito utilizado para teste
- Código fonte para uso com o circuito


Este artigo foi publicado, com minha autorização, na revista Eletrônica Total nr 102 de Setembro/Outubro de 2004.







Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.