Jeg vil overføre I2C-data ved hjelp av et Digispark ATTiny85-kort:
Jeg har funnet følgende I2C-biblioteker. Hvilken er mer lett, stabil, feilfri, effektiv, kraftig og enkel å bruke?
-
Adafruit «s TinyWireM er ikke oppdatert på 2 år.
-
felias-fogg «s SoftI2CMaster er oppdatert innen få dager etter dette innlegget.
-
lucullusTheOnly «s TinyWire representerer noen år med forbedringer,» basert på TinyWireM og TinyWireS biblioteker «. Denne versjonen anbefales av BroHogan, medskaper av TinyWireM: https://playground.arduino.cc/Code/USIi2c
Wire virker underutvalgt:
«standard Arduino Wire () -bibliotek støtter ikke endringer i busshastighet eller har riktig klokke strekkstøtte. Dette gjør standardbiblioteket bare marginalt funksjonelt « https://www.maxbotix.com/articles/095.htm
Hvilke andre I2C-biblioteker er tilgjengelige for ATTiny? I IDE ser jeg Digispark SoftSerial, OneWire og VirtualWire.
Hvordan sammenligner de alle?
Merk at disse andre svarene ikke virker relevante for spørsmålet mitt:
-
Hva ' er forskjellen mellom alle seriens programvarebiblioteker? Hvilken er Arduino Nano-kompatibel?
Kommentarer
- prøv dem begge … den med mest eksempler på koden først
Svar
Jeg vil overføre I2C-data …
Litt vag.
Overfør til hvilken enhet? Hvor rask er datahastigheten din (100kHz, 400kHz)? Din eneste sender og ikke leser noe tilbake? Hva er tomgangsspenningen til I2C-bussen din (for å spørre om du har valgt riktige mottaksverdier for din tiltenkte busshastighet)?
Du nevner at Wire-biblioteket ikke støtter kjernehastigheten endres uten noe hacking, men ikke snakk om hastigheten du har tenkt å kjøre mikrokontrolleren eller hvor fort du har tenkt å bruke I2C. Jeg kan gjette 400kHz, siden du økte hastigheten, men det er ikke en fin måte å svare på et spørsmål på.
Jeg har brukt Wire-biblioteket på en Arduino UNO med I2C-bussfrekvens på 100kHz og det » s fungerte bra for mine behov. Jeg fikk byte inn og ut.
På dette tidspunktet er det beste forslaget jeg vil ha at hvis et av bibliotekene ovenfor du ikke støtter en funksjon du vil, kan du forkaste den og legge til støtte for funksjonen din selv. Hvis du bare sender til en slaveenhet, trenger du ikke å bekymre deg for bussvoldgift, slik som TinyWire gjør. Adafruit er greit for det meste, men de synes (for meg) sakte å fikse feil og vedlikeholde kode. Men ikke la kodenes alder komme til deg. I2C ble opprettet tilbake i 1982 , og du bruker den fortsatt … 😛
Her er hvordan jeg ville nærme meg velge et bibliotek:
- Definer funksjoner du trenger
- Se etter et bibliotek som har de fleste av disse funksjonene
- Legg til eventuelle nye funksjoner du trenger
- Eventuelt del dine tilleggsfunksjoner med samfunnet med et Pull Request
Svar
bHogan ser ut til å være den opprinnelige utvikleren av TinyWireM og TinyWireS. Andreas Spiess («Fyren med sveitsisk aksent») brukte rambo «s implementering av TinyWire-biblioteket for I2C-sensoren hans, og rambo på GitHub og bHogan på arduino.cc ser ut til å være den samme personen …
Jeg har også brukt rambo «s TinyWire-bibliotek, og klarte å gjøre det fungerer. Adafruits-versjonen av TinyWire ser ut til å være en gaffel med ramboks kode.