2 de nov de 2011

Comunicação Serial RS-232


Olá galera, hoje apresento a vocês uma ferramenta essencial para o desenvolvimento de sistemas eletrônicos, principalmente embarcados, que é a comunicação serial RS-232.

Muitas vezes nos deparamos com a necessidade de trocar informações entre um PC e a placa micro controlada e uma maneira simples de se conseguir isto é por meio do uso da porta serial.

A maioria das mensagens digitais são mais longas que alguns poucos bits, portando se faz necessário o uso de alguma técnica para transmitir esta informação. Na comunicação paralela, como o próprio nome diz, transmite-se todos os bits ao mesmo tempo, porém, para isto é utilizado um pino de hardware para cada bit a ser transmitido, isto nos traz velocidade, mas demanda muito hardware. Já na comunicação serial a mensagem é quebrada em partes menores e transmitida sequencialmente, onde cada bit representa uma parte da mensagem. Os bits individuais são então rearranjados no destino para compor a mensagem original.

Exemplo de frame serial (1 Byte)




Taxa de Transferência (Baud Rate)


A taxa de transferência refere-se à velocidade com que os dados são enviados por meio de um canal e é medida em transições elétricas por segundo. Para que o equipamento transmissor consiga transmitir corretamente e o receptor possa entender esta informação recebida, ambos têm de estar em sincronismo, ou seja, ajustados para o mesmo Baud Rate.
Na comunicação serial temos alguns valores comumente usados, sendo eles 300, 1200, 2400, 4800, 9600, 19200 e 56000bps, onde um valor de 9600 corresponde a uma transferência de 9600 dados por segundo, quanto maior for a velocidade, maior deverá ser a estabilidade do oscilador local para garantir a correta comunicação.


Níveis Lógicos


A porta serial utiliza valores de tensões específicos para codificação de dados, onde um valor entre -3V e -25V, são considerados nível lógico “1” e tensões entre +3V e +25V são considerados nível lógico “0”, é por esta razão que muitos conversores USB/RS-232 não funcionam adequadamente quando utilizados com gravadores de microcontrolador, pois estes não conseguem gerar tais tensões.



 
MAX232


Um dos componentes que faz a conversão dos dados do padrão TTL(PIC) para o padrão RS-232(PC) é o CI MAX232, ele inclui um circuito de “charge pump” capaz de gerar tensões de +10V e –10V a partir de uma fonte de alimentação simples de +5V. Este é o CI empregado na placa PK2Lab para comunicação serial.


 
Cabeamento


O cabo utilizado para a comunicação entre a placa PK2Lab e o PC, é conhecido como cabo “null modem”, onde temos apenas 3 fios (TxD, RxD e GND), neste sistema não utilizamos controle de tráfego e temos que conectar o sinal DTR com os sinais DSR e CD nos dois extremos.


Programa do microcontrolador


Para o programa do microcontrolador, foi escrito um código simples que verifica os dados recebidos pela serial, ligando e desligando os leds do PORTD conforme caracter recebido. Caso o caracter recebido não seja de controle, a placa envia ao PC uma string informando a situação. Para isto utilizamos três funções da biblioteca do MikroC, são elas:


Usart_Init(9600)       

Função que inicializa a comunicação via hardware do microcontrolador, nesta função deve-se informar qual velocidade ele irá trabalhar, neste caso 9600bps.


Usart_Data_Ready()

Função que indica recebimento de dados via comunicação serial, caso tenha dados no buffer, retorna 1.


Usart_Write(x)  

Função que envia dados pela porta serial, onde os dados são enviados como parâmetro da função, neste exemplo é enviado o conteúdo da variável x.


Usart_Read()

Função que recebe dados pela porta serial, para que isto ocorra, deve-se atribuir a uma variável de recepção o retorno da função Usart_Read().

 

Terminal Serial C#

Para este projeto, desenvolvi um software em Visual Studio C# 2010 que consiste em um terminal serial completo, onde temos as janelas de recepção e transmissão de dados e a aba de configuração da porta COM, onde é possível selecionar diferentes taxas de comunicação entre outros parâmetros.



Bom, acredito que tenha conseguido passar alguma idéia do que é a comunicação serial, como puderam ver, com o uso das bibliotecas do MikroC, o processo se torna simples e eficiente, por hoje é isto, boms projetos!

2 comentários:

  1. Legal funciona mesmo,teria como enviar uma palavra inteira exemplo:
    se enviar a palavra: pk2lab0 acende RB0,pk2lab1 acende RB1,
    pk2lab2 acende RB2,ETC...

    ResponderExcluir
  2. os arquivos não estão disponíveis...
    pode indicar onde eu acho?

    ResponderExcluir