Je souhaite transmettre des données I2C, en utilisant une carte Digispark ATTiny85:
Jai trouvé les bibliothèques I2C suivantes. Laquelle est la plus légère, stable, sans bogue, efficace, puissante et facile à utiliser?
-
Adafruit « s TinyWireM na pas été mis à jour depuis 2 ans.
-
felias-fogg « s SoftI2CMaster a été mis à jour quelques jours après ce message.
-
lucullusTheOnly « s TinyWire représente quelques années daméliorations, » basées sur les bibliothèques TinyWireM et TinyWireS « . Cette version est recommandée par BroHogan, co-créateur de TinyWireM: https://playground.arduino.cc/Code/USIi2c
Wire semble sous-présenté:
« la bibliothèque Arduino Wire () par défaut ne prend pas en charge les changements de vitesse du bus ou ne dispose pas dune horloge appropriée prise en charge de létirement. Cela rend la bibliothèque par défaut seulement marginalement fonctionnelle « https://www.maxbotix.com/articles/095.htm
Quelles autres bibliothèques I2C sont disponibles pour ATTiny? Dans lEDI, je vois Digispark SoftSerial, OneWire et VirtualWire.
Comment se comparent-ils tous?
Remarque, ces autres réponses ne pas semblent pertinentes pour ma question:
Commentaires
- essayez-les tous les deux … celui avec le plus dexemples de code en premier
Réponse
Je souhaite transmettre des données I2C …
Un peu vague.
Transmettre à quel appareil? Quelle est la vitesse de votre débit de données (100 kHz, 400 kHz)? Votre seule transmission et ne rien relire? Quelle est la tension de ralenti de votre bus I2C (pour vous demander ensuite si vous avez choisi les valeurs de résistance de rappel correctes pour votre vitesse de bus prévue)?
Vous mentionnez que la bibliothèque Wire ne prend pas en charge la vitesse dhorloge du cœur change sans quelques piratages, mais ne parlez pas de la vitesse à laquelle vous avez lintention de faire fonctionner le microcontrôleur ou de la vitesse à laquelle vous prévoyez dutiliser lI2C. Je peux deviner 400 kHz, puisque vous avez augmenté la vitesse, mais ce nest pas un excellent moyen de répondre à une question.
Jai utilisé la bibliothèque Wire sur un Arduino UNO à un taux de bus I2C de 100 kHz et cela » s a bien fonctionné pour mes besoins. Jai des octets entrants et sortants.
À ce stade, la meilleure suggestion que jaurais est que si lune des bibliothèques ci-dessus que vous avez listées ne supporte pas une fonctionnalité que vous aimeriez, créez-la et ajoutez vous-même la prise en charge de votre fonctionnalité. Si vous transmettez uniquement à un périphérique esclave, vous ne devriez pas avoir à vous soucier de larbitrage de bus, comme le fait le TinyWire . Adafruit est correct pour la plupart, mais ils semblent (pour moi) lents à corriger les bogues et à maintenir le code. Mais ne laissez pas lâge du code vous atteindre. I2C a été créé en 1982 , et vous lutilisez toujours … 😛
Voici comment japproche choisir une bibliothèque:
- Définissez les fonctionnalités dont vous avez besoin
- Recherchez une bibliothèque qui possède la plupart de ces fonctionnalités
- Ajoutez les nouvelles fonctionnalités dont vous avez besoin
- Partagez éventuellement vos fonctionnalités ajoutées avec la communauté avec une Pull Request
Réponse
bHogan semble être le développeur original de TinyWireM et TinyWireS. Andreas Spiess (« Le type à laccent suisse ») a utilisé limplémentation de la bibliothèque TinyWire par rambo « pour son capteur I2C, et rambo sur GitHub et bHogan sur arduino.cc semblent être la même personne …
Jai également utilisé la bibliothèque TinyWire de rambo, et jai réussi à la créer travail. La version Adafruits de TinyWire semble être une fourchette du code de rambo.