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.
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.
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
É 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).
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.
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. |