Go Down

Topic: vitesse transmission liaison série par rapport à l'I2C (Read 703 times) previous topic - next topic

Bonjour
J'ai actuellement 2 Arduino Mega qui dialogue en série à 115200. J'utilise la librairie EasyTransfert. Je transfert dans les 2 sens 60 variables en int. J'ai l'impression que la laiison sature quelques fois. Est il plus rapide de faire cette liaison en I2C (en mettant1 Arduino en maitre et l'autre en esclave) ? sachant que j'ai déjà des modules en I2C sur chaque Arduino.
Merci

B@tto

Le mieux est encore d'essayer, faut 3 fils ! Sinon si tu veux du rapide utilise le SPI
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr


skywodd

Bonjour,

L'I2C (en arduino) de base travaille à 100KHz, on peut monter à 400KHz avec une petite modification de TWI_FREQ dans la librairie Wire.

En série tu envois 10 bits (1 bit de start, 8 bits de donnés, 1 bit de stop) par octet soit ici 115200 / 10 = 11 520 octets par secondes.

En I2C tu envois 19 bits (1 bit de start, 7 bits d'adresse, 1 bit de lecture / écriture, 1 bit d'acquittement, 8 bits de données, 1 bit de stop) en mode "octet par octet" soit 100000 / 19 = 5 263 octets par secondes à 100KHz (= 2x fois moins rapide que le port série) ou 400000 / 19 = 21 052 octets par secondes à 400KHz (= 2x fois plus rapide que le port série) .
Si tu envois des blocs d'octets par contre tu peut allez beaucoup plus vite (10 bits fixe au débuts + 9 bits par octet d'un même bloc par la suite ).

A mon avis le plus simple est d'augmenter la vitesse du port série ... l'i2c n'est pas vraiment adapté pour des communications avec seulement deux modules.
Surtout qu'on peut monter la vitesse du port série relativement haut sans problème (on en parlais justement à un moment sur le forum).
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

fdufnews


Je transfert dans les 2 sens 60 variables en int. J'ai l'impression que la laiison sature quelques fois.


Ou alors c'est le programme qui exploite ces données qui sature!!

Il manque une info dans ta demande, c'est la récurrence de l'émission de tes paquets de 60 int. Parce que bon envoyer 120 octets c'est pas vraiment le problème. Par contre si tu envoies en permanence des blocs de 120 octets la saturation va vite arriver coté software.
Autre chose si pour chaque int qui arrive tu as un peu de traitement à faire sur les données, tu risques de voir le buffer de réception déborder du fait que les octets arrivent plus vite par la liaison série que tu ne peux les extraire.

Merci pour vos infos.Alors j'ai augmenté la vitesse à 460800, du coup j'ai plus de problème. Je vais arrangé la trame de liaison pour la réduire : j'ai des boolean qui sont transférés en int.

Go Up