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!
Legal funciona mesmo,teria como enviar uma palavra inteira exemplo:
ResponderExcluirse enviar a palavra: pk2lab0 acende RB0,pk2lab1 acende RB1,
pk2lab2 acende RB2,ETC...
os arquivos não estão disponíveis...
ResponderExcluirpode indicar onde eu acho?