Jag vill överföra I2C-data med hjälp av ett Digispark ATTiny85-kort:
Jag har hittat följande I2C-bibliotek. Vilket är lättare, stabilt, buggfritt, effektivt, kraftfullt och lätt att använda?
-
Adafruit ”s TinyWireM har inte uppdaterats på två år.
-
felias-fogg ”s SoftI2CMaster har uppdaterats inom några dagar efter det här inlägget.
-
lucullusTheOnly ”s TinyWire representerar några år av förbättringar,” baserat på TinyWireM och TinyWireS-biblioteken ”. Denna version rekommenderas av BroHogan, medskapare av TinyWireM: https://playground.arduino.cc/Code/USIi2c
Wire verkar underutrustad:
”standard Arduino Wire () -bibliotek stöder inte ändringar i busshastighet eller har rätt klocka stretching support. Detta gör att standardbiblioteket bara är marginellt funktionellt ” https://www.maxbotix.com/articles/095.htm
Vilka andra I2C-libs är tillgängliga för ATTiny? I IDE ser jag Digispark SoftSerial, OneWire och VirtualWire.
Hur jämför de alla?
Obs! Dessa andra svar verkar inte relevant för min fråga:
Kommentarer
- prova dem båda … den med mest exempelskod först
Svar
Jag vill överföra I2C-data …
Lite vagt.
Överför till vilken enhet? Hur snabb är din datahastighet (100kHz, 400kHz)? Din enda sänder och läser inte tillbaka något? Vad är tomgångsspänningen på din I2C-buss (för att fråga om du har valt korrekta motståndsvärden för din avsedda busshastighet)?
Du nämner att Wire-biblioteket inte stöder klockhastigheten ändras utan lite hacking, men prata inte om hastigheten du tänker köra mikrokontrollern eller hur snabbt du tänker använda I2C. Jag kan gissa 400kHz, eftersom du ökade hastigheten, men det är inte ett bra sätt att svara på en fråga.
Jag använder Wire-biblioteket på en Arduino UNO vid I2C-busshastighet på 100kHz och det ” s fungerade bra för mina behov. Jag fick byte in och ut.
Vid det här tillfället är det bästa förslaget att jag har att om ett av ovanstående bibliotek som du listar inte stöder en funktion som du vill gaffla, och lägga till stöd för din funktion själv. Om du bara sänder till en slavenhet, behöver du inte behöva oroa dig för bussförlikning, som TinyWire gör. Adafruit är okej för det mesta, men de verkar (för mig) långsamma att fixa buggar och underhålla kod. Men låt inte koden ålder komma till dig. I2C skapades 1982 och du använder den fortfarande … 😛
Så här skulle jag närma mig välja ett bibliotek:
- Definiera funktioner du behöver
- Leta efter ett bibliotek som har de flesta av dessa funktioner
- Lägg till alla nya funktioner du behöver
- Eventuellt dela dina tillagda funktioner med communityn med ett Pull Request
Svar
bHogan verkar vara den ursprungliga utvecklaren av TinyWireM och TinyWireS. Andreas Spiess (”Killen med den schweiziska accenten”) använde rambo ”implementering av TinyWire-biblioteket för sin I2C-sensor och rambo på GitHub och bHogan på arduino.cc verkar vara samma person …
Jag har också använt rambo TinyWire-bibliotek och lyckades göra det Adafruits-versionen av TinyWire verkar vara en gaffel med rambo-kod.