Pages: [1]   Go Down
Author Topic: vitesse transmission liaison série par rapport à l'I2C  (Read 592 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3626
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le mieux est encore d'essayer, faut 3 fils ! Sinon si tu veux du rapide utilise le SPI
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok merci.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3511
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: