Desejo transmitir dados I2C, usando uma placa Digispark ATTiny85:
Eu encontrei as seguintes bibliotecas I2C. Qual delas é mais leve, estável, sem bugs, eficiente, poderosa e fácil de usar?
-
Adafruit “s TinyWireM não foi atualizado em 2 anos.
-
felias-fogg “s SoftI2CMaster foi atualizado dias após esta postagem.
-
lucullusTheOnly “s TinyWire representa alguns anos de melhorias,” com base nas bibliotecas TinyWireM e TinyWireS “. Esta versão é recomendada por BroHogan, co-criador do TinyWireM: https://playground.arduino.cc/Code/USIi2c
O fio parece ter poucos recursos:
“a biblioteca Arduino Wire () padrão não oferece suporte a mudanças na velocidade do barramento ou recurso de relógio adequado ampliação do suporte. Isso torna a biblioteca padrão apenas marginalmente funcional “ https://www.maxbotix.com/articles/095.htm
Quais outras bibliotecas I2C estão disponíveis para ATTiny? No IDE, vejo Digispark SoftSerial, OneWire e VirtualWire.
Como todos eles se comparam?
Observe, essas outras respostas não parecem relevantes para minha pergunta:
Comentários
- tente os dois … aquele com o maior código de exemplo primeiro
Resposta
Quero transmitir dados I2C …
Um pouco vago.
Transmitir para qual dispositivo? Qual é a velocidade da sua taxa de dados (100kHz, 400kHz)? Você está apenas transmitindo e não lendo nada de volta? Qual é a tensão inativa do seu barramento I2C (para então perguntar se você escolheu os valores corretos do resistor pull-up para a velocidade pretendida do barramento)?
Você mencionou que a biblioteca Wire não suporta a velocidade do clock do núcleo muda sem hackear, mas não fale sobre a velocidade que você pretende executar o microcontrolador ou quão rápido você pretende usar o I2C. Posso adivinhar 400 kHz, já que você aumentou a velocidade, mas essa “não é uma ótima maneira de responder a uma pergunta.
Estou usando a biblioteca Wire em um Arduino UNO com taxa de barramento I2C de 100 kHz e isso” funcionou bem para minhas necessidades. Tenho bytes dentro e fora.
Neste ponto, a melhor sugestão que eu teria é que se uma das bibliotecas acima listadas não oferecer suporte a um recurso de que você gostaria, bifurque-o e adicione suporte para o seu recurso você mesmo. Se você estiver transmitindo apenas para um dispositivo escravo, não precisa se preocupar com arbitragem de barramento, como o TinyWire faz. Adafruit é bom na maior parte, mas eles parecem (para mim) lentos para consertar bugs e manter o código. Mas não deixe a idade do código chegar até você. I2C foi criado em 1982 e você ainda o está usando … 😛
Aqui está como eu abordaria escolhendo uma biblioteca:
- Defina os recursos de que você precisa
- Procure uma biblioteca que tenha a maioria desses recursos
- Adicione todos os novos recursos de que você precisa
- Possivelmente compartilhe seus recursos adicionados com a comunidade com uma solicitação pull
Resposta
bHogan parece ser o desenvolvedor original do TinyWireM e do TinyWireS. Andreas Spiess (“O cara com sotaque suíço”) usou a implementação de rambo “da biblioteca TinyWire para seu sensor I2C, e rambo no GitHub e bHogan no arduino.cc parecem ser a mesma pessoa …
Eu também usei a biblioteca TinyWire de rambo e consegui fazê-la A versão Adafruits do TinyWire parece ser uma bifurcação do código de Rambo.