Voglio trasmettere dati I2C, utilizzando una scheda Digispark ATTiny85:
Ho trovato le seguenti librerie I2C. Quale è più leggera, stabile, priva di bug, efficiente, potente e facile da usare?
-
Adafruit “s TinyWireM non viene aggiornato da 2 anni.
-
felias-fogg “s SoftI2CMaster è stato aggiornato pochi giorni dopo questo post.
-
lucullusTheOnly “s TinyWire rappresenta alcuni anni di miglioramenti”, basato sulle librerie TinyWireM e TinyWireS “. Questa versione è consigliata da BroHogan, co-creatore di TinyWireM: https://playground.arduino.cc/Code/USIi2c
Wire sembra sottodimensionato:
“la libreria predefinita di Arduino Wire () non supporta le modifiche alla velocità del bus o presenta un clock appropriato supporto per lestensione. In questo modo la libreria predefinita funziona solo marginalmente “ https://www.maxbotix.com/articles/095.htm
Quali altre librerie I2C sono disponibili per ATTiny? NellIDE vedo Digispark SoftSerial, OneWire e VirtualWire.
Come si confrontano tutti?
Nota, queste altre risposte non sembrano pertinenti alla mia domanda:
-
Qual è ' la differenza tra tutte le librerie di serie del software? Qual è Arduino Nano compatibile?
Commenti
- provali entrambi … prima quello con il codice più esempio
Risposta
Voglio trasmettere dati I2C …
Un po vago.
Trasmettere a quale dispositivo? Qual è la velocità dei dati (100 kHz, 400 kHz)? Stai solo trasmettendo e non rileggendo nulla? Qual è la tensione al minimo del tuo bus I2C (per poi chiederti se hai scelto i valori corretti del resistore di pull-up per la velocità del bus prevista)?
Hai detto che la libreria Wire non supporta la velocità di clock del core cambia senza alcun hacking, ma non parlare della velocità a cui intendi far funzionare il microcontrollore o di quanto velocemente intendi utilizzare lI2C. Posso indovinare 400kHz, dato che hai aumentato la velocità, ma non è un ottimo modo per rispondere a una domanda.
Ho usato la libreria Wire su un Arduino UNO con una velocità del bus I2C di 100kHz e ” ha funzionato bene per le mie esigenze. Ho ottenuto byte in entrata e in uscita.
A questo punto, il miglior suggerimento che avrei è che se una delle librerie sopra elencate non supporta una funzione che desideri, esegui il fork e aggiungi il supporto per la tua funzione tu stesso. Se stai trasmettendo solo a un dispositivo slave, non dovresti preoccuparti dellarbitrato del bus, come fa TinyWire . Adafruit va bene per la maggior parte, ma mi sembrano lenti a correggere i bug e mantenere il codice. Ma non lasciare che letà del codice ti arrivi. I2C è stato creato nel 1982 e lo stai ancora utilizzando … 😛
Ecco come mi avvicinerei scelta di una libreria:
- Definisci le funzionalità di cui hai bisogno
- Cerca una libreria che abbia la maggior parte di queste funzionalità
- Aggiungi le nuove funzionalità di cui hai bisogno
- Possibilmente condividi le tue funzionalità aggiunte con la comunità con una richiesta pull
risposta
bHogan sembra essere lo sviluppatore originale di TinyWireM e TinyWireS. Andreas Spiess (“The guy with the Swiss accent”) ha utilizzato rambo “limplementazione della libreria TinyWire per il suo sensore I2C, e rambo su GitHub e bHogan su arduino.cc sembrano essere la stessa persona …
Ho anche usato la libreria TinyWire di rambo e sono riuscito a farcela La versione Adafruits di TinyWire sembra essere un fork del codice di rambo.