Hora de conversar!

Quem acompanhou os cursos sobre programção de microcontroladores percebeu que dei uma pausa. Pois é meu povo, terceiro ano não é fácil! Mas voltei e trouxe coisa boa!
Até hoje comentei e ensinei a usar recursos internos do PIC, mas tudo girando apenas em torno do PIC. Agora é hora de ir além e fazer ele se comunicar. "Caramba! Vou aprender a controlar um circuito pelo PC/smartphone?" Sim, exatamente isso.

Qual o "idioma"?

Nesta aula ensinarei a vocês a usarem a porta serial usando o protocolo RS232 e se comunicando através do módulo Universal asynchronous receiver/transmitter (UART) do PIC e como usar ele como um Universal Synchronous/Asynchronous Receiver/Transmitter (USART). Não vou explicar o funcionamento deste protocolo uma vez que não será necessário.
A porta serial é bem antiga, mas para a nossa alegria, ainda não foi esquecida. Seu uso é bem mais simples que o da porta USB, e o programa, bem mais fácil.

Como se comunicar?

Basicamente, o UART usará 3 dos 9 pinos da porta serial: TD (transmitted data), RD (Received Data) e o SG (Signal Ground, ou negativo), porém usaremos mais dois que funcionarão fora do módulo: o RTS (Ready to Send) e o CTS (Clear To Send), que serão os responsáveis pelo funcionamento modo USART. Necessário? Não, mas interessante.

E o intérprete?

O padrão lógico da porta serial é diferente do TTL, com o qual o PIC opera, bem como as tensões, que queimariam nosso MCU. Para isso, usamos um conversor de níveis Serial-TTL/TTL-Serial. Existem diversos à venda no mercado, mas usaremos nessa aula o da SchmartBoard, que além de pequeno e simples, tem suporte ao RTS e CTS (com os quais eu não havia trabalhado até receber esse módulo). Este módulo pode ser visto abaixo e pode ser comprado diretamente com eles ou pela Mouser no Brasil.

O módulo ligado ao circuito por jumpers também da SchmartBoard.

Circuito

O circuito é bem simples, sendo o básico do PIC com alguns poucos componentes a mais como no diagrama abaixo.


R1 é um potênciometro, o qual leremos seu valor pelo ADC e enviaremos para o PC, e o LED1 será controlado pelo PC, C3 é para estabilizar o valor lido, e é dado no esquema duas opções de oscilador para o MCU. Acredito que não haverão dificuldades.
A figura a seguir da uma ideia geral do circuito.
Produtos SchmartBoard usados/recomendados pro projeto


Visão geral

Hora de ensinar o PIC

O programa todo pode ser baixado aqui. Vocês verão que não há muitas novidades, mas explicarei alguma coisa:

-Quando o PIC vai realizar alguma operação, como no programa a conversão do ADC, antes dele começar mudamos o CTS para avisar que o programa estará ocupado, e assim que acaba, mudamos novamente o CTS;
-Quando o RTS for igual a 1, o computador estará dizendo que está ocupado e não pode responder, então o PIC identifica o estado antes de reiniciar a rotina eterna (WHILE/WEND) e se estiver como 1 enviará uma mensagem ao PC para que você visualize isso;
-No comando UART1_Init(115200) inicializamos o módula UART1 e definimos a velocidades de comunicação em 115200 bps;
-O comando UART1_Write_Text envia um texto para o computador. Este texto DEVE estar entre aspas (exigência do compilador), mas estas não aparecerão;
-O comando UART1_Read recebe o caracter recebido. Ele é recebido em ASCII. Se quiser compará-lo como um caracter normal, ponha-o entre aspas (como no programa que está "!", "T" e "M"). Se não o puser, deverá usar o código ASCII correspondente;
-Por fim, o comando UART1_Data_Ready avisa se há dados sendo enviados pelo PC.

Mas o que acontece?

Para testar, conecte inicialmente o cabo serial no PC e no módulo conversor, abra um terminal serial (para Windows recomendo o Termite, para linux, o Serial Port terminal. Usuários Linux poderão precisar dar permissões para a porta através do sudo chmod a+rw /dev/ttyS1), deixe o RTS desativado (pesquise como fazê-lo para cada terminal. No termite apenas clique no ícone correspondente na barra superior à caixa de texto, e no Serial Port Terminal, pressione F8. Para ambos os casos, faça duas vezes o procedimento de ativar e desativar) e só então ligue o circuito. Você deverá ver a mensagem "Aguardando o PC". Ative o RTS e verá a mensagem "Pronto".
-Tecla M: alterna entre o modo de leitura manual e o automático;
-Tecla !: requisita o envio da leitura absoluta do ADC (apenas no modo manual); 
-Tecla T: Liga/desliga o LED1.

Basicamente é isso! Agora é só soltar a criatividade e se divertir com essa comunicação. Ligar e desligar luzes da casa, ler sensores, controlar motores, enfim, muitas coisas podem ser feitas com a RS232.

Considerações finais (observações):

-Aos que não acharem um módulo com suporte ao RTS/CTS, apenas excluam as partes do código que os cite (o sub procedimento Check_RTS, as suas chamadas e as partes onde o CTS é controlado). Tudo deverá funcionar normalmente com exceção das partes que os usam;
-Não sei se funciona com conversores Serial/USB;
-Confira se seu cabo possui todos os pinos necessários ligados, pois há cabos que possuem apenas as linhas SG, RD e TD!


É isso galera. Espero que mais uma vez tenha sido útil. Estarei à disposição para dúvidas. Até a próxima pessoal!

Comentários

  1. Agora sim esclarecido tudo funcionando 100%

    ResponderExcluir
    Respostas
    1. Que bom que pude ajudar! Ficarei feliz se mandar foto ou video do projeto aí funcionando :D

      Excluir
  2. Obrigado por partilhar!
    Comunicação sempre foi meu ponto fraco, ótimo seu artigo, bem esclarecedor!
    Abraço

    ResponderExcluir

Postar um comentário