DRO universal baseado no Arduino Nano - shDRO. Parte 2

Olá novamente!

Continuo descrevendo meu desenvolvimento de shDRO. Nesta parte, descreverei o algoritmo de pesquisa de dispositivos e o formato dos comandos do console.

A primeira parte

Firmware

Como o número de canais / portas aos quais os leitores podem ser conectados é 12 e, teoricamente, cada canal pode ser configurado para interromper, dois manipuladores de interrupção PCINT são usados ​​(para as portas D e C). Isso implica uma limitação na conexão: todas as saídas do dispositivo que estão configuradas para entrada devem estar conectadas aos canais de um grupo. Se o canal estiver configurado para saída, então para o dispositivo atual, não importa a qual grupo ele pertence. Grupos: grupo1 (canais 0-5), grupo2 (canais 6-11).

Dois buffers de anel, 256 bytes cada, são usados ​​para manipuladores de interrupção.

O código do manipulador de interrupções é:

buf[pos] = DATA_N; pos++; 

Onde DATA_N é uma das portas: PIND, PINC.

O processamento de dados é o seguinte:

  • ocorre uma interrupção, um novo valor de porta é gravado no buffer;
  • o buffer é pesquisado periodicamente e, a partir dele, os dados que apareceram após a última pesquisa são lidos (a posição do buffer da última pesquisa é armazenada na estrutura do dispositivo);
  • no processo de leitura de novos dados, os níveis de interrupção definidos para os canais são comparados com os dados da porta atual. Se o nível de interrupção não corresponder, os dados serão ignorados.
  • verifica se todos os dados para processamento foram aceitos (por exemplo, 24 bits devem ser recebidos para o protocolo BIN6);
  • os dados são processados ​​em um formato "legível" e os dados processados ​​são exibidos na tela;
  • então o processo é repetido;

Para implementar a lógica acima, os seguintes módulos lógicos são implementados no firmware:

  • Dispositivo: o módulo contém todas as informações sobre um dispositivo conectado. Para cada dispositivo conectado, esse módulo é criado;
  • Protocolo: o módulo contém informações sobre o protocolo e como processar os sinais que chegam às portas de acordo com este protocolo de troca;
  • Função: o módulo contém informações sobre como converter dados recebidos do módulo Protocolo. Por exemplo, existe um módulo de protocolo que suporta um sinal de quadratura, mas os dispositivos que emitem um sinal de quadratura podem ser diferentes: pode ser uma régua óptica ou um sensor de velocidade. I.e. em um caso, os dados precisam ser convertidos em mm ou polegadas e na outra rpm. Este módulo apenas faz isso;
  • Led: um módulo que exibe informações sobre indicadores. O shDRO contém 4 indicadores e para cada dispositivo o indicador de exibição desejado é definido;

Como resultado, para conectar o dispositivo, no console, você precisa:

  • configurar os canais desejados;
  • adicionar dispositivo;
  • para protocolo de conjunto de dispositivos, função e led;
  • adicione / ligue os canais necessários ao dispositivo;

Console

No momento, verifiquei a operação do console no monitor da porta ArduinoIDE e no Terminal v.1.9b. Para terminais do tipo Putty, você precisa implementar o modo de eco (não implementado).

Formato de comando:

 <> </1> <_1> </N> <_N> 

O número máximo de argumentos por linha é 5.

O caso não importa; a análise de comando ocorre após a conversão da string em minúscula (exceção: o valor do argumento entre aspas).

Todos os comandos são executados somente após a emissão do comando Setup (exceção, o comando Help, que exibe uma lista de todos os comandos disponíveis).

Todos os comandos são descritos no arquivo anexo, bem como a primeira versão do firmware no formato hexadecimal.

shDRO.zip (.hex + descrição dos comandos)

Fontes ShDRO

Para ser continuado.

Obrigada

PS
Comandos relacionados à configuração de dispositivos e canais podem ser enviados para o arduino simples, sem correias.

PS1
Pedido para quem mora em Kazan.
Se você tem:
  • pinças digitais que funcionam de acordo com os protocolos: 24BIT, BCD7;
  • réguas digitais iGaging (protocolo 21BIT);

então você poderia me dar por alguns dias para escrever e depurar protocolos para eles?
Prometo mantê-los sãos e salvos!
Mas isso é em PM. Agradecemos antecipadamente.

PS2
Esqueci de adicionar dois comandos ao arquivo de descrição do comando:
- salvar: salva as configurações de canais e dispositivos na EEPROM;
- load: descarrega as configurações de canais e dispositivos da EEPROM (a carga é realizada automaticamente durante a inicialização);
Não voltarei a carregar o arquivo, lembre-se. Mas "ajuda" exibe esses comandos.

Source: https://habr.com/ru/post/pt446458/


All Articles