Synchronisation Data Frame SPC

Bonjour à tous :slight_smile:

je vous présente un peu mon projet:

je planche actuellement sur un capteur de Couple ( Capteur magnétique ) dont la communication est basé sur une protocole SPC ( basée sur le protocole SENT J2716 /* pour ceux que sa intéresse */)

mon objectif à terme est de créer une interface de lecture et d'écriture grâce à une arduino Mega 2560 branché directement sur le capteur via son évalBoard.

dans un premier temps je m’intéresse uniquement à la lecture de l'information renvoyé par mon capteur.

En PJ vous trouverez la "frame" renvoyé par le capteur. /j'ai un peu mal avec la gestion des images dans le forum/ :frowning:

la transmission de la frame est initialisée par un "master pulse" ( passage à 0) en suite on a:

  • une pulsation de synchronisation (fixe quelque soit la transmission)
  • une pulsation de "statuts"
  • 3 à 6 pulsations de "data" /* ceux qui m’intéresse :slight_smile: */
  • et enfin un checksum suivi d'une période d’inactivité ( ~ 90µs)

l'information est codé sur la longueur des "data pulses " entrecoupé de passage à 0.

la transmission se fait sur 500~ 800µs et la fréquence de rafraîchissement est 1 ms ( contrainte de réalisation )

Mon problème :confused:

je souhaite m'assuré de toujours lire la "frame" du début a la fin, pour éviter des récupérer une donnée erronée.

ma première approche était de générer une interruption sur changement de front, pour mesurer la temps au niveau haut de chaque impulsion. Mais je n'ai aucune garanti de commencer l'interruption sur le "master pulse".

je me retourne alors vers vous :slight_smile: pour:

  • avoir des suggestions d'algorithme (pas /nécessairement/ de code ) et/ou de librairies qui pourrait m'aider.
  • et je me demandais si on peux être plus restrictif avec la fonction"attachInterrup" ? ( c-a-d, avoir d'autres facteurs d'interruption que "LOW" "HIGH" ou "CHANGE". Par exemple mettre comme facteur le return d'une autre fonction).

PS: Je suis nouveau sur le forum, et j'ai précedement poster mon topic sur "le bar" ( je suppose que ce n’étais l'endroit approprier, comment le supprimer ?) de plus il doit sans doute y avoir des erreurs de fond ou de forme, merci de me le faire remarqué "poliment" SVP :slight_smile: :slight_smile:

Bonjour,

Pour supprimer un post tu cliques en bas à droite de ton post sur modify puis remove.
Je ne sais pas si ça peut supprimer un topic entier. Tu peux aussi cliquer en bas à gauche de ton post 'report to moderator' et expliquer ce que tu veux faire: déplacer, supprimer...

Ausmoz1:

  • une pulsation de synchronisation (fixe quelque soit la transmission)
  • une pulsation de "statuts"
  • 3 à 6 pulsations de "data" /* ceux qui m’intéresse :slight_smile: */
  • et enfin un checksum suivi d'une période d’inactivité ( ~ 90µs)

bonjour
la durée du synchro est AMHA suffisament importante et tres differente pour discriminer ensuite ce qui suit.
çà ressemble à ça ton protocole ?

Oui Artouste c'est exactement sa.

Artouste:
bonjour
la durée du synchro est AMHA suffisament importante et tres differente pour discriminer ensuite ce qui suit.

oui elle est suffisament différente mais, pour le moment, quand je me mesure la durée de chaque impulsion avec "PulseIn", je ne retrouve pas la durée théorique de la Synchro

Ausmoz1:
oui elle est suffisament différente mais, pour le moment, quand je me mesure la durée de chaque impulsion avec "PulseIn", je ne retrouve pas la durée théorique de la Synchro

Pulsein() n'est AMHA pas une solution fiable
il me semble preferable de passer par de l'interruption sur change et d'enregister la valeur de micros()

je vais explorer cette voix, Merci :slight_smile: :slight_smile: !