Comunicação entre microcontroladores utilizando Código Morse


A comunicação entre microcontroladores hoje em dia já não é mais um "segredo". Hoje em dia utilizamos várias normas que atendem bem, cada qual, a um determinado objetivo. Temos então a RS-232, RS-485, CAN, LIN, Ethernet, WiFi entre outras, para comunicação entre dispositivos a distância e outras normas como SPI, I2C, 1Wire, etc, para comunicação entre dispositivos instalados em uma mesma placa ou ainda gabinete. Porém o que eu pretendo descrever nesse artigo é uma experiência que visa juntar o "passado" ao "presente" de uma maneira divertida. Para que serve?! Qualquer desafio saudável serve apenas a um propósito: aprendizado/diversão!


A experiência

O desafio proposto era fazer a comunicação entre dois microcontroladores utilizado o Código Morse. Para isso eu utilizei um PIC16F648A e um STM32F103C8T6 (nada em comum entre os mesmos, mas era o que eu tinha a mão! rsrsrs). Óbvio que utilizando tal padrão de comunicação não seria possível transmitir valores "binários" ou "hexadecimal" e nem mesmo FULL ASCII, apenas letras e números, além de alguns caracteres de pontuação (não implementados nessa primeira versão) seria totalmente possível. Como eu disse, valeu apenas como desafio!


Um pouco da teoria

O código morse foi criado por Samuel Finley Breese Morse, o criador do telégrafo elétrico. Ele baseia-se em um sistema de representação de letras, números e caracteres de pontuação que utiliza codificação intermitente através de pulsos ou tons com duração curta e longa (sistema binário). O código criado por Samuel Morse sofreu grandes adaptações por parte do alemão Friedrich Gerke em 1948 e em 1965 o Congresso Internacional de Telegrafia oficializou a simbologia internacional, bem diferente da original criada por Morse. O atual código contempla todas as letras do alfabeto, números e caracteres de pontuação e a figura/tabela abaixo mostra os caracteres válidos no código hoje.

Além desses caracteres temos ainda:

Barra [/]
-··-·
Parênteses [(]  
  -·--·
Parênteses [)]    
-·--·-
E comercial [&]    
·-···
Ponto e vírgula [;]   
-·-·-·
Hífen [-]   
-····-
Linha baixa [_]    
··--·-
Cifrão [$]    
···-··-
Arroba [@]   
·--·-·

E também alguns caracteres especiais para controle das mensagens:

Sinal
Código
Significado
AR
·-·-· Fim da mensagem
AS
·-··· Espere
BT
-···- Separador dentro da mensagem
CL
-·-··-·· Saindo do ar
DO
-··--- Troque por código Wabun
K
-·- Convite para transmitir
KN
-·--· Convite especifico para transmitir
R
·-· Recebido e entendido
SK
···-·- Fim do contato
SOS
···---··· Mensagem de sério perigo e pedido por ajuda urgente.


Além destes, temos ainda:

ä (também æ) ·-·-
à (também å) .--.--
ç (também ĉ) -.-..
ch
----
ð ..--.
è .-..-
é ..-..
ĝ --.-.
ĥ -.--.
ĵ .---.
ñ --.--
ö (também ø) ---.
ü (também ŭ) ..--

Perceba que não estão contemplados nas tabelas acima todos os caracteres presentes na tabela ASCII. Isso porque o código foi criado muito antes do padrão ASCII e desde então as comunicações avançaram muito e novos padrões de transmissão foram criados.

Um outro detalhe importante a respeito do código morse é a nomenclatura adotada para ponto e traço. Costuma-se chamar o ponto de "dit" e o traço de "dah", para facilitar seu uso durante o estudo do código.

Convencionalmente adotou-se que um "traço" tem 3 vezes a duração de um "ponto". O espaço entre um ponto e um traço ou ponto e ponto ou traço e traço tem a duração de um ponto. E o espaço entre palavras tem a duração de 7 pontos.

Um radioamador experiente consegue transmitir/receber mensagens a uma velocidade de aproximadamente 40 WPS (palavras por minuto) e tem-se notícias que alguns chegaram a um número muito maior que isso (algo em torno de 100 WPS).

Não há um tempo fechado para a duração de um ponto (mandatário na adequação dos outros tempos), já que isso vai de operador para operador.

 

O Hardware utilizado

Para está experiência eu utilizei duas placas criadas por mim (figura acima) e que eu costumo usar em minhas experiências e para trabalho também. Uma delas está disponível neste site. A outra estará em breve. Uma delas é a PE-PIC16F628A (Placa de estudos para microcontroladores PIC16F628A) e a PE-STM32 (Placa de estudos para microcontroladores STM32F103C8T6 - em breve no site!).

As conexões são muito simples: As saídas C (comum) e NA (normalmente aberta) do relé da placa PE-PIC16F628A foram conectadas aos pinos GND e PA0 da placa PE-STM32.

Claro que você poderá fazer a experiência utilizando um PIC-16F648A e um módulo BluePill adequadamente inseridos em "proto-boards", ou adaptar a mesma para o hardware que possui em mãos. Para isso as conexões necessárias são:

Placa PE-STM32:

Port A:

  • PA0   - DEC_IN - entrada para decodificação
  • PA4   - D4   - dado bit4 LCD
  • PA5   - D5   - dado bit5 LCD
  • PA6   - D6   - dado bit6 LCD
  • PA7   - D7   - dado bit7 LCD


Port B:

  • PB5   - LED1 - LED_Live2
  • PB6   - LED2 - LED para acusar recebimento de pulso
  • PB10 - TX3  - RX     - USART3 - apenas "debug"
  • PB11 - RX3  - TX     - USART3
  • PB13 - RS   - LCD
  • PB14 - RW   - LCD
  • PB15 - EN   - LCD


Port C:

  • PC13 - LED  - LED_Live1Placa PE-PIC16F628A:


Placa PE-PIC16F628A:

Port A:

  • RA0 - n.c.
  • RA1 - n.c.

Port B:
  • RB0 - n.c.
  • RB1 - RX - Entrada para comunicação entre PC (recebe msg a ser enviada)
  • RB2 - TX - saída para "echo"
  • RB3 - relé

Os programas

Mais abaixo em "Download's" você poderá obter os pacotes com os respectivos códigos para os microcontroladores PIC e STM32, ambos desenvolvidos na Linguagem C. Não vou aqui detalhar nenhum deles. Tudo foi bem comentado, o que deve ajudar na compreensão dos mesmos. Enjoy!!!


Conclusão

O uso de tecnologias mais antigas em conjunto com as novas tecnologias é algo bastante desafiador e desafios são a base do aprendizado e também da diversão (se você considerar que um projeto de final de semana é algo divertido). Espero que tenha curtido essa leitura! Boas montagens, estudos e desafios!!! Até a próxima!


Downloads:

- Pacote com código fonte para microcontrolador PIC16F648A
- Pacote com código fonte para microcontrolador STM32F103C8T6



Especificações:

- Cérebros  - PIC16F628A e STM32F103C8T6
- Saídas - Chave NA de um Relé
- Entradas - Pino de I/O
- Programas - Ambos desenvolvidos na Linguagem C

 



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.