Arne Basic 2k - Experiência 5 - Comunicação RS-232 (trocando dados com um PC)


A proposta

Nesta quinta experiência demonstrarei como  conectar o Arne Basic 2k a porta RS-232 de um PC, para enviar e receber mensagens usando o padrão RS-232. Primeiro acho interessante mostrar um pouco da teoria, para em seguida apresentar a parte prática.


Comunicação RS-232 com Arne Basic 2k

A comunicação RS-232 é uma das mais difundidas no mundo da automação e controle. Hoje em dia muitos equipamentos ainda 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 da porta RS-232

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 da porta RS-232

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 da porta RS-232 (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 experiência

Na figura abaixo você tem o esquema elétrico proposto para esta experiência. Como você mesmo pode ver, trata-se também de um circuito extremamente simples. Eu recomendo a montagem do mesmo em uma matriz de contatos, afinal você está apenas "testando" um circuito.


Para conectar o circuito a um PC você vai precisar de um cabo conforme indica a figura abaixo. Caso você tenha um cabo RS-232 pronto, certifique-se apenas que não se trata de um cabo do tipo "NULL MODEM" ok. Estes cabos não servem para esta experiência! Seu cabo deve ter as ligações conforme as mostradas abaixo (alguns possuem mais, ligando todos os pinos entre si - com a mesma numeração).

Um outro detalhe importantíssimo é que os jumpers RX e TX presentes no módulo Arne Basic 2k precisam estar fechados ok! Não se esqueça deste detalhe, caso contrário a coisa não vai funcionar! Fechando este jumper você estará conectando PD0 e PD1 ao drive RS-232 existente no módulo, conectado aos pinos RX e TX.

Para realizar esta experiência você vai precisar de um PC rodando um programa terminal tipo o HyperTerminal do Windows ou ainda o GTKTerm no Linux (comum em distribuíções baseadas no Debian). Para usar o HyperTerminal (acredito ser essa a opção da grande maioria que realizará esta experiência) você precisa configurá-lo conforme a figura abaixo:


Você pode ver o código fonte logo abaixo. Este programa é mais um excelente exemplo da estrutura da Linguagem de programação BASIC utilizada pelo compilador BASCOM-AVR. Se você já fez experiências com outros microcontroladores embedded existentes, vai perceber algo bastante interessante. No programa, o fato de termos um comando para ler a porta serial não trava o microcontrolador!!! Isso é importante, pois em alguns casos precisamos controlar outros dispositivos e o processamento não fica travado!!! Eu sei que este ainda não é um exemplo "complexo", mas o programa mostra um verdadeiro "pulo do gato" e acho que a partir disso você poderá ir bem mais além com a comunicação RS-232 do Arne Basic 2k. Como diria o sr. Miagui - "Daniel San!!! Já pintou cerca lado de dentro e lado de fora, também lixou assoalho... hum... bom... agora lavar carro Miagui... amanhã aprender karatê!!!" ehehehehe

Código fonte:
'*******************************************************************************
'* Programa RS232_TESTE.BAS
'* Desenvolvido por Márcio José Soares
'* para teste de comunicação serial com PC
'*
'* Obs.: Este programa funciona com o Arne Basic 2k
'*
'* Neste exemplo você vai perceber que o microcontrolador não fica travado
'* aguardando um caracter qualquer chegar. Se não há caracter a ser recebido
'* pela usart o microcontrolador fica livre para fazer outras coisas (processamentos)
'*******************************************************************************
 
'*******************************************************************************
'Configs necessários ao microcontrolador
$crystal = 10000000
$regfile = "attiny2313.dat"
$baud = 19200
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Portb = &B11111111
Config Portd = &B11111110
 
Led Alias Portb.0
 
'*******************************************************************************
'Variáveis globais
Dim A As Byte
 
'*******************************************************************************
'Início do programa
Waitms 500                                        'espera para iniciar
 
Print Chr(12)                                     'reinicia a tela do Hyperterminal
Waitms 100                                        'espera apagar
 
Print "Teste da USART do Arne Basic 2k"           'Envia msgs
Print "Tecle algo..."                             '
Print " "                                         'apenas um espaço
 
'*******************************************************************************
'Laço principal
Do
   A = Ischarwaiting()                            'verifica se tem algum caracter na Usart para receber
   If A = 1 Then                                  'se 1, tem um caracter
      A = Waitkey()                               'recebe caracter
      Print "Voce teclou -> " ; Chr(a)            'eco do caracter
   End If
 
   Set Led                                        'pisca LED... processamento Liberado!!!
   Waitms 200                                     'o piscar do led mostra que processamento
   Reset Led                                      'não travou no comando de recepção da Usart!!!!
   Waitms 200
 
Loop
 
 
End                                               'final do programa


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.