Chcę przesyłać dane I2C za pomocą karty Digispark ATTiny85:
Udało mi się znaleźć następujące biblioteki I2C. Która z nich jest lżejsza, stabilniejsza, wolniejsza od błędów, wydajna, wydajna i łatwa w użyciu?
-
Adafruit „s TinyWireM nie był aktualizowany od 2 lat.
-
felias-fogg „s SoftI2CMaster został zaktualizowany w ciągu kilku dni od tego postu.
-
lucullusTheOnly „s TinyWire reprezentuje kilka lat ulepszeń” w oparciu o biblioteki TinyWireM i TinyWireS „. Ta wersja jest rekomendowana przez BroHogana, współtwórcę TinyWireM: https://playground.arduino.cc/Code/USIi2c
Drut wydaje się niedostatecznie wyposażony:
„domyślna biblioteka Arduino Wire () nie obsługuje zmian szybkości magistrali ani nie ma odpowiedniego zegara obsługa rozciągania. Dzięki temu biblioteka domyślna działa tylko marginalnie „ https://www.maxbotix.com/articles/095.htm
Jakie inne biblioteki I2C są dostępne dla ATTiny? W IDE widzę Digispark SoftSerial, OneWire i VirtualWire.
Jak one wszystkie się porównują?
Uwaga, te inne odpowiedzi nie wydają się pasować do mojego pytania:
Komentarze
- wypróbuj oba … najpierw ten z najbardziej przykładowym kodem
Odpowiedź
Chcę przesyłać dane I2C …
Trochę niejasne.
Przesłać na jakie urządzenie? Jaka jest szybkość transmisji danych (100 kHz, 400 kHz)? Jesteś jedynym nadawcą i nie czytającym niczego w zamian? Jakie jest napięcie biegu jałowego twojej magistrali I2C (aby następnie zapytać, czy wybrałeś prawidłowe wartości rezystora podciągającego dla planowanej szybkości magistrali)?
Wspomniałeś, że biblioteka Wire nie obsługuje taktowania rdzenia zmienia się bez hakowania, ale nie mów o szybkości, z jaką zamierzasz uruchomić mikrokontroler, ani o tym, jak szybko zamierzasz używać I2C. Domyślam się, że 400 kHz, skoro podnieśliście prędkość, ale to nie jest świetny sposób na odpowiedź na pytanie.
Korzystam z biblioteki Wire na Arduino UNO przy szybkości magistrali I2C równej 100 kHz i tak ” działało dobrze na moje potrzeby. Mam bajty wchodzące i wychodzące.
W tym miejscu najlepszą sugestią, jaką mam, jest to, że jeśli jedna z wymienionych powyżej bibliotek nie obsługuje funkcji, którą chcesz, rozwidlaj ją i dodaj obsługę swojej funkcji samodzielnie. Jeśli transmitujesz tylko do jednego urządzenia podrzędnego, nie powinieneś się martwić arbitrażem na magistrali, jak robi to TinyWire . Adafruit jest w większości w porządku, ale wydaje mi się, że wolno naprawia błędy i utrzymuje kod. Ale nie pozwól, aby wiek kodu dotarł do Ciebie. I2C został utworzony w 1982 r. , a Ty nadal go używasz … 😛
Oto, jak bym podszedł wybór biblioteki:
- Zdefiniuj potrzebne funkcje
- Poszukaj biblioteki, która ma większość tych funkcji
- Dodaj nowe funkcje, których potrzebujesz
- Prawdopodobnie udostępnij społeczności dodane funkcje za pomocą żądania ściągnięcia
odpowiedzi
bHogan wydaje się być oryginalnym twórcą TinyWireM i TinyWireS. Andreas Spiess („Facet ze szwajcarskim akcentem”) użył implementacji biblioteki TinyWire rambo dla jego czujnika I2C i rambo na GitHub i bHogan na arduino.cc wydają się być tą samą osobą …
Użyłem również biblioteki TinyWire firmy Rambo i udało mi się to działa. Wersja Adafruits TinyWire wydaje się być rozwidleniem kodu Rambo.