[Résolu] ARDUINO MEGA 2650 : liaison série sans utiliser la trame UART

Bonjour à tous,

Je travaille sur un projet nécessitant l'envoie de données séries depuis un Arduino MEGA 2650.
Cependant l'IC (SN74LV8153) qui recevra les données nécessite une trame un peu spécifique. Oui vous vous demandez pourquoi je souhaite envoyer des données séries dans un circuit intégré qui converti lui les données séries en données parallèles. La réponse est que entre l'Arduino et cet IC il y a une liaison par fibre optique qui m'oblige à passer par la liaison série pour repasser à une liaison parallèle après l'IC (vient du besoin du projet).

Le format de la trame est la suivante :
2 bit de start (0 puis 1) - 3 bits d'adresse - 4 bits de données - 1 bit de stop (1)
Pour envoyer 1 octet il faut donc envoyer deux trames, ce qui donnerais :
0-1-A0-A1-A2-D0-D1-D2-D3-1-0-1-A0-A1-A2-D4-D5-D6-D7-1

Le problème est que la liaison série de l'Arduino utilise des trames UART. Par exemple une trame UART utilise qu'un bit de start, donc même si il est possible de paramétrer cette trame en définissant un nombre de bits de donnée différents je ne peux pas arriver à mon besoin et même si c'était le cas ce ne serait vraiment pas propre (en utilisant le 1er bit de donnée comme un bit de start par exemple pour avoir mes deux bits de start).

Il n'y a-t-il pas moyen de créer sa propre trame pour la liaison série ?
J'ai fait des recherches sur la liaison série de l'Arduino mais tous les résultats ramènent à la trame UART. Et je ne suis clairement pas un expert d'Arduino donc peut-être que je passe à côté de quelque chose de relativement simple.

C'est pourquoi je fais appel à vous pour m'aider.

En vous remerciant pour le temps que vous me consacrerez !
Bonne journée.

Bonjour,

C'est très simple. Il suffit que tu mettes le bit de poids faible de ton octet à 1. Ainsi, comme l'ordre de transmission est bits de poids faible en premier, ça fera un deuxième start à 1.

Il n'existe pas de trames UART. La transmission s'effectue sur un octet, de 5, 6, 7 ou 8 bits.

Serial.begin(speed, config)

Sauf erreur de ma part je ne pense pas que l'on puisse paramétrer le nombre de bits de START. Par contre ce n'est pas le cas des bit de STOP, SERIAL_8N2 par exemple, avec 8 bits de données et 2 bits de STOP.
Donc il va falloir bricoler avec la config par défaut, SERIAL_8N1. Franchement je ne vois vraiment pas ce qu'il y a de pas propre.

doudoujouin:
Le problème est que la liaison série de l'Arduino utilise des trames UART.

Ça tombe bien parce que justement à la première page de la datasheet du composant on lit

Compatible With UART Serial-Data Format

.
Donc tu devrais y arriver sans problème comme te l'explique kamill
La trame du composant ne contient que 7 bits de données, on peut donc forcer le LSB à se comporter comme le bit de start.

Kamill,

Effectivement cela fonctionne, merci beaucoup.

hbachetti,

Ce que je ne trouve pas propre en faisant cela c'est qu'un bit de start est alors inhérent à une trame UART et l'autre vient s'ajouter en utilisant un bit de data, je trouve cela bizarre, mais comme ça fonctionne je vais faire avec. Mais comme tu le dis, c'est du bricolage, ce dont je ne suis pas fan quand on essaye de faire des choses durables, et modifiables facilement.

fdufnews,

Je crois que je n'ai plus qu'a revoir ma manière de lire les datasheets.

Merci à vous trois, j'ai pas été très malin sur ce coup là.
Bonne journée

doudoujouin:
Je crois que je n'ai plus qu'a revoir ma manière de lire les datasheets.

Je trouve quand même que la datasheet aurait pu être plus clair.
Si c'était expliqué de la manière suivante
1 bit de start (à 0) - 1 bit à 1 - 3 bits d'adresse - 4 bits de données - 1 bit de stop (1)
Ca aurait été beaucoup plus clair.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.