top of page

COMUNICAÇÃO RS-232

A todo instante dados trafegam de um lugar para outro para que haja uma tranquila e clara comunicação seja ela com fio ou sem fio por meio de protocolos. RS-232 é um protocolo de comunicação que trabalha serialmente, ou seja, os bits enviados por meio deste trafegam em “fila”, um de cada vez. Além disso, o protocolo RS-232, se não for um dos mais usados, chega próximo disto. A comunicação com RS-232 pode ser estabelecida, por exemplo, entre dois microcontroladores, entre um microcontrolador e um sensor, entre computadores, enfim, um vasto ambiente de possibilidades de comunicação. Nessa aula vamos aprender mais sobre esse tipo de comunicação que existe dentro do PIC assim como suas ligações e características.


Para começarmos a falar sobre as características e configurações para a comunicação do RS-232 dentro do PIC vamos abrir o nosso PIC C Compiller. Veja a figura abaixo:































































Independente do microcontrolador selecionado, vamos a opção Communications. Para usarmos a comunicação por RS-232 devemos marcar a opção Use RS-232, quando marcamos as opções adicionais ficam disponíveis para configuração. Vamos explicar as mais importantes e também as mais usadas.



3 – Baud: Baud ou Baud Rate é a velocidade de transmissão de dados (bits). A velocidade padrão e que usamos mais frequentemente (por isso digo ser padrão) é 9600. Além disso também é a mais usada por sensores e outros periféricos. Muito embora, podemos sim configurar essa taxa de transmissão de dados mas precisamos estar atentos que se eu uso um sensor que possui uma taxa de 4800 e eu programo meu microntrolador para trabalhar com uma taxa de 9600, obviamente isso não dará certo e acabaremos enviando e recebendo apenas sujeiras. Portanto, os dois lados da moeda devem estar sincronizados, com a mesma taxa de transmissão.


4 – Parity: Pelo que pesquisei, é um tipo de segurança que se dá ao envio e transmissão de dados para garantir que eles realmente chegarão ao outro lado. No entanto, não é muito eficaz e geralmente usa-se a opção None ou nenhuma.


5 – Transmit: Nessa opção nós iremos selecionar qual o pino do nosso microcontrolador será o transmissor de dados. Geralmente o PIC C Compiller já deixa selecionado o pino TX (transmissor) como transmissor padrão, mas não custa nada vermos em nosso datasheet ou mesmo no ISIS qual é o TX do nosso microncontrolador.


6 – Receive: Aqui selecionamos o pino receptor de dados. Da mesma que acontece com o Transmit, o pino padrão RX do nosso microcontrolador é geralmente selecionado automaticamente.


7 – restart_wdt: É um tipo de timer que vamos ver mais a frente. Significa “Cão de Guarda”, um tipo de interrupção que reseta o microcontrolador quando algo dá errado na transmissão de dados. De qualquer forma, atua como um item de segurança porém pouco usado.


8 – Invert: Serve para inverter os pinos TX e RX, ou seja, se marcado, o pino TX passa a ser RX, e RX passa a ser TX.
As outras opções são muito pouco usadas e portanto não tem tanta relevância. Essas são as características da RS-232 e as configurações que devem ser feitas para se estabelecer uma comunicação.


Antes de começarmos a ver algo sobre programação vamos atentar para funções básicas para envio e recebimento via RS-232.


PUTC(dados);
          A função PUTC() transmite dados, mais especificamente caracteres, pela porta serial, ou seja, envia. O campo dados deve ser preenchido com o caractere que queremos enviar. A desvantagem dessa função é que se eu quiser enviar uma frase, por exemplo, eu tenho que enviar caractere a caractere dessa frase, ou seja, não posso enviar a frase inteira, por completo, apenas por partes até finalizá-la.


Exemplos:
  putc(‘*’); //Envia um caracter especial, o asterisco;
  putc(buffer[0]); //Envia um caracter de uma frase, por exemplo;
  putc(13); //Envia um caractere correspondente ao número 13 na tabela ASCII.;


GETC()
          A função GETC() recebe os dados enviados pela serial. Não há nenhum parâmetro a ser declarado, apenas devemos atentar que como ela recebe algo, esse algo será armazenado em uma variável. Semelhantemente à função PUTC(), a função GETC() recebe de uma frase, por exemplo, caractere a caractere. Portanto, se for realmente uma frase, um vetor deve ser criado para pegar esses caracteres.


Exemplos:
  char caracter_especial = getc(); //Recebe um * por exemplo;
  char buffer[0] = getc(); //Recebe um caractere de um frase, por exemplo;
  int valor = getc();  //Recebe um número inteiro, por exemplo;


PRINTF()
          A função PRINTF() é bastante conhecida e é também usada nas comunicações seriais e todo mundo usa. Essa função é um conjunto de funções PUTC() e é capaz de enviar uma frase inteira se a necessidade de um vetor de caracteres, por exemplo, essa é a sua vantagem. A desvantagem é que como ela é um conjunto dessas funções, há portanto um atraso de transmissão para formatação dos dados para enfim serem enviados. No entanto, em uma frase pequena o uso da função PRINTF() é o mais adequado para que possamos organizar melhor o nosso programa.


Com essas três funções podemos fazer praticamente tudo que envolve comunicação serial por RS-232.


Vamos à nossas ligações no ISIS? O circuito é simples e contará com um PIC 16F877A e um Terminal Virtual que vimos como achá-lo na aula passada. Fica assim:

















































​Observe que o pino 25 é o pino TX do microcontrolador e deve ser ligado no pino RX de qualquer outro dispositivo. Sempre assim, o TX tem que ser ligado no RX de outro periférico e o RX no TX.



Vamos agora ver nossa programação.


Acessamos o PIC Wizard para fazer as devidas configurações. Vamos usar o PIC16F877A.


Depois vamos clicar na opção Communications e marcar a opção Use RS-232. Não vamos fazer mais nenhuma configuração neste campo, pois como falamos anteriormente, o PIC C Compiller se encarrega, geralmente, de selecionar os pinos padrões do microcontrolador usado. Clicamos em OK e vamos digitar 
apenas o seguinte:



While(TRUE)
{
    Printf(“TronicSide    ”); //Envia a palavra TronicSide completa
    putc(13); //Envia o caractere correspondente ao número 13 na tabela ASCII, o "pula linha"
    Delay_ms(1000); //Espera 1 segundo para voltar ao início
}


Compile o código, carregue-o no ISIS 7 Professional e simule seu projeto. Você deverá ver na tela o seguinte: TronicSide. Este texto deve aparecer um embaixo do outro dentro do intervalo de tempo de 1 segundo, claro que com a tolerância do atraso da função Printf().


Não devemos esquecer que qualquer dúvida ou curiosidade podemos ir diretamente em Ajuda > Contents e buscar tudo aquilo que queremos saber. 

bottom of page