J'envisage un projet qui nécessiterait que plusieurs AVR se parlent dans un bus. Ils seraient séparés par pas moins de 6 pieds.
Il semble qu'I2C et SPI puissent laisser une série de micros communiquer sur un bus, mais je n'ai rien vu qui dise combien de temps cela prendrait. Quelqu'un at-il essayé de connecter ces protocoles sur des distances de plusieurs pieds?
avr
spi
i2c
digital-communications
edebill
la source
la source
Réponses:
Comme d'autres l'ont dit, SPI et I2C peuvent être utilisés sur de longues distances, à condition que les résistances de rappel, les fréquences d'horloge, etc.
Les principales alternatives (qui donneront une meilleure immunité au bruit) sont RS485 et CAN . Les deux utilisent des lignes différentielles afin de minimiser les problèmes de bruit et conviennent mieux à cette longueur de transmission de données que I2C ou SPI. Cependant, je ne pense pas que beaucoup (aucun?) AVRs soient livrés avec des périphériques CAN intégrés, ce qui facilite beaucoup l'utilisation de CAN.
Je dirais que la chose la plus importante à prendre en compte lors du choix d’un bus est de s’assurer que le protocole que vous utilisez pour la communication entre périphériques inclut un CRC ou l’équivalent, de sorte que vous puissiez déterminer si un message a été reçu correctement (le CAN en a fait partie Le Colis). Compte tenu de cela, il est également utile d’avoir une réponse de type ACK / NACK dans le protocole afin qu’un message corrompu puisse être retransmis.
la source
Plusieurs pieds ne devraient pas être problématiques, utilisez simplement des fils torsadés si vous le pouvez. SPI est beaucoup plus facile à tamponner (si vous en avez besoin) que I2C car les signaux SPI sont tous unidirectionnels, alors que les signaux I2C sont sur des lignes partagées.
les microcontrôleurs AVR peuvent-ils gérer les modes esclaves I2C et SPI ainsi que les modes maîtres? (vous auriez besoin des deux)
la source
Pour I2C sur de longues distances, vous pouvez rechercher des solutions de "répéteur de bus I2C". Gardez à l'esprit que toute distance maximale que vous pourriez trouver pour une communication I2C ou SPI fait principalement référence à la distance totale du bus et non à la distance séparant deux nœuds d'un bus.
Vous voudrez peut-être examiner la RS485 pour résoudre ce type de problèmes. C'est un protocole de bus série qui communique sur des lignes différentielles. Ainsi, lorsque vous utilisez des câbles torsadés, les risques de parasites sont minimisés. De très longues distances peuvent être atteintes de cette façon. L'inconvénient serait que vous auriez besoin d'un IC de codeur RS485 supplémentaire (comme un MAX485, pas très cher) dans votre circuit.
la source
Un avantage non mentionné encore de SPI par rapport à I2C est que tous les fils de SPI sont unidirectionnels et sont toujours alimentés haut ou bas. Cela permet une communication beaucoup plus rapide qu'avec I2C, réduit les risques de bruit et permet d'utiliser de simples portes comme répéteurs. Une autre option utile est la communication async simple (un fil dans chaque sens). Le seul inconvénient de la communication asynchrone, c’est qu’elle exige généralement que les deux parties soient «éveillées», avec une horloge stable, pour échanger des données.
Pour un projet personnel, j'ai utilisé un protocole SPI légèrement modifié à 3 fils et j'ai trouvé les résultats satisfaisants. J'envoie des données d'affichage bitmap (où la corruption occasionnelle de données ne serait pas grave) à 10 Mbps et d'autres données à 2,5 Mbps sans difficulté.
la source
Bien que les systèmes I2C et SPI soient conçus pour des transports à courte distance (quelques centimètres), ils peuvent tous deux être utilisés pour des transports plus longs avec un câble approprié et une attention particulière à la capacité globale du bus.
Bien que j'ai peu d'expérience avec SPI, I2C n'est pas terriblement difficile, car vous devez toujours calculer la taille appropriée pour votre résistance de rappel. De plus, il existe des tampons I2C dédiés et peu coûteux, qui sont assez faciles à utiliser. Toutefois, vous devrez toujours utiliser une résistance de rappel de taille appropriée pour votre réseau.
J'ai utilisé I2C pour mettre en réseau deux AVR à une distance de 8 pieds, en utilisant uniquement des résistances de rappel et un câble torsadé de haute qualité et bien blindé.
la source
Comme beaucoup l'ont suggéré, I2C et SPI sont mieux utilisés pour les courtes distances. Bien qu'il soit possible d'implémenter une solution avec ces interfaces, je vous recommande fortement de rechercher une solution différente, "plus standard" (par exemple, Ethernet, RS485, CAN, etc.). - Surtout si vous prévoyez d’utiliser des câbles pour atteindre la distance de 6 pieds entre les microcontrôleurs.
la source
Juste un FYI, l’interface entre la télécommande sans fil Nintendo Wii et son compagnon Nunchuck utilise I2C sur un câble d’environ 3 pieds de long. Il existe également des câbles de rallonge de 3 pieds qui prolongent la longueur totale à environ 6 pieds. Ce n'est pas exactement la même chose que votre configuration (seulement deux périphériques connectés ensemble), mais c'est un exemple d'I2C sur un câble dans un produit grand public très utilisé.
la source
J'ai travaillé sur un projet impliquant environ 80 nœuds basés sur AVR dans un réseau en étoile communiquant via I2C. C'était un désordre total et n'a pas fonctionné à la fin. Obtenir des mises à jour sur tous les nœuds prenait quelques secondes et une seule connexion défaillante aurait pour effet de gâcher tout le réseau. Enfin, j’ai parlé au gars qui a créé les nœuds, il a dit qu’il avait cessé d’utiliser I2C pour des projets comme celui-ci. Malheureusement, je ne sais pas pourquoi spécifiquement I2C était inadéquat ici.
la source
Cela devrait être facile avec ces courtes distances. Ce que vous pouvez faire, c'est comprendre ce que signifient ces distances et votre câblage en termes de capacité et d'impédance de ligne, et voir quel type de fréquences (temps de montée / descente) vous pouvez traverser. Au-delà d'un certain point, il est préférable de les traiter comme des lignes de transmission. Si le résultat est mauvais, vous pouvez en effet basculer sur une autre ligne série telle que EIA-232 ou 422. Cela pourrait signifier une puce supplémentaire aux deux extrémités mais s’étirerait loin. Si vous devez vraiment aller vite et loin, vous aurez besoin de quelque chose de plus (Ethernet, ne comptez pas la radio ou le laser :).
la source
Si vous pouvez contrôler la vitesse d'horloge et que vous n'avez pas besoin de transfert de données à haute vitesse, essayez de ralentir l'horloge. Cela le rendra moins susceptible au bruit.
la source