DRO universel basé sur Arduino Nano - shDRO. 2e partie

Bonjour encore!

Je continue de décrire mon développement de shDRO. Dans cette partie, je décrirai l'algorithme d'interrogation du périphérique et le format des commandes de la console.

La première partie.

Firmware

Étant donné que le nombre de canaux / ports auxquels les lecteurs peuvent être connectés est de 12 et que chaque canal peut théoriquement être configuré pour interrompre, deux gestionnaires d'interruption PCINT sont utilisés (pour les ports D et C). Cela implique une limitation de la connexion: toutes les sorties de l'appareil configurées pour l'entrée doivent être connectées aux canaux d'un groupe. Si le canal est configuré pour la sortie, alors pour le périphérique actuel, peu importe le groupe auquel il appartient. Groupes: groupe1 (canaux 0-5), groupe2 (canaux 6-11).

Deux tampons en anneau, 256 octets chacun, sont utilisés pour les gestionnaires d'interruption.

Le code du gestionnaire d'interruption est:

buf[pos] = DATA_N; pos++; 

Où DATA_N est l'un des ports: PIND, PINC.

Le traitement des données est le suivant:

  • une interruption se produit, une nouvelle valeur de port est écrite dans le tampon;
  • le tampon est périodiquement interrogé, et à partir de celui-ci les données qui sont apparues après le dernier sondage sont lues (la position du tampon du dernier sondage est stockée dans la structure de l'appareil);
  • lors de la lecture de nouvelles données, les niveaux d'interruption définis pour les canaux sont comparés aux données de port actuelles. Si le niveau d'interruption ne correspond pas, les données sont ignorées.
  • il vérifie que toutes les données pour le traitement ont été acceptées (par exemple, 24 bits doivent être reçus pour le protocole BIN6);
  • les données sont traitées sous une forme "lisible" et les données traitées sont affichées à l'écran;
  • puis le processus est répété;

Pour implémenter la logique ci-dessus, les modules logiques suivants sont implémentés dans le firmware:

  • Appareil: le module contient toutes les informations sur un appareil connecté. Pour chaque appareil connecté, un tel module est créé;
  • Protocole: le module contient des informations sur le protocole et comment traiter les signaux arrivant aux ports conformément à ce protocole d'échange;
  • Fonction: le module contient des informations sur la façon de convertir les données reçues du module Protocole. Par exemple, il existe un module Protocole qui prend en charge un signal en quadrature, mais les appareils qui émettent un signal en quadrature peuvent être différents: il peut s'agir d'une règle optique ou d'un capteur de vitesse. C'est-à-dire dans un cas, les données doivent être converties en mm ou pouces et dans l'autre tr / min. Ce module fait juste cela;
  • Led: un module qui affiche des informations sur les indicateurs. shDRO contient 4 indicateurs, et pour chaque appareil, l'indicateur d'affichage souhaité est réglé;

Par conséquent, pour connecter l'appareil, vous avez besoin dans la console:

  • configurer les canaux souhaités;
  • ajouter un appareil;
  • pour le protocole, la fonction et la led de l'ensemble de périphériques;
  • ajouter / lier les canaux nécessaires à l'appareil;

La console

Pour le moment, j'ai vérifié le fonctionnement de la console dans le moniteur de port ArduinoIDE et dans le terminal v.1.9b. Pour les terminaux de type Putty, vous devez implémenter le mode écho (non implémenté).

Format de commande:

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

Le nombre maximum d'arguments par ligne est de 5.

La casse n'a pas d'importance; l'analyse des commandes se produit après la conversion de la chaîne en minuscules (exception: la valeur de l'argument entre guillemets).

Toutes les commandes sont exécutées uniquement après l'émission de la commande Setup (une exception est la commande Help, qui affiche une liste de toutes les commandes disponibles).

Toutes les commandes sont décrites dans l'archive jointe, ainsi que la première version du firmware au format hexadécimal.

shDRO.zip (.hex + description des commandes)

Sources ShDRO

À suivre.

Je vous remercie!

PS
Les commandes liées à la configuration des périphériques et des canaux peuvent être envoyées à l'arduino nu sans attachement.

PS1
Demande à ceux qui vivent à Kazan.
Si vous avez:
  • étriers numériques fonctionnant selon les protocoles: 24BIT, BCD7;
  • règles numériques iGaging (protocole 21BIT);

alors pourriez-vous me les donner pendant quelques jours pour écrire et déboguer des protocoles pour eux?
Je promets de les garder sains et saufs!
Mais c'est en PM. Merci d'avance.

PS2
J'ai oublié d'ajouter deux commandes au fichier de description de commande:
- enregistrer: enregistre les paramètres des canaux et des périphériques dans l'EEPROM;
- charger: décharge les paramètres des canaux et des périphériques de l'EEPROM (le chargement est effectué automatiquement lors de l'initialisation);
Je ne téléchargerai pas à nouveau le fichier, gardez juste à l'esprit. Mais "help" affiche ces commandes.

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


All Articles