2017-01-27 18 views
0

[Я задал этот вопрос на Arduino Stack Exchange, и я ждал некоторое время и не получил никакого ответа, поэтому я подумал, что я бы спросить здесь!]Заменить провода библиотеки с TinyWireM (Make Library ATtiny совместимый)

I хотите интегрировать датчик Pololu vl53l0x Time of Flight distance в мой проект. Они создали library для взаимодействия с vl53l0x над I2C, который отлично работает на моем Uno. Единственная проблема в том, что Wire.h не работает на ATtiny85.

TinyWireM является заменой библиотеки для проводов, которые, как я думаю, будут совместимы. Мой вопрос заключается в следующем: как я могу заменить Wire на TinyWireM? Это так же просто, как замена всех экземпляров Wire на TinyWireM? Есть ли что-то еще, что мне нужно сделать, чтобы сделать библиотеку ATtiny85 совместимой?

Я попытался просто переосмысление «Wire», как TinyWireM, как показано ниже:

#include "TinyWireM.h" 
#define Wire TinyWireM 

Все компилируется и добавления к моему ATtiny85 просто отлично. Однако, как представляется, только датчик выводит значение около 7600 мм довольно последовательно.

Спасибо!

+0

Почему tinywirem не работает, являются ли периферийные устройства не на чипе, неправильные имена регистров? –

+0

@GradyPlayer вы имеете в виду, почему Wire не работает? –

+0

Да, почему это не работает? –

ответ

1

Проводная библиотека не работает на ATTiny, поскольку она имеет только интерфейс USI (Universal Serial Interface), который не является тем же оборудованием, что и в Arduino Uno. Библиотека TinyWireM демонстрирует почти то же поведение, что и библиотека Wire в Uno, но не является той же библиотекой, которая портирована ATTiny. Я не совсем понимаю, почему вы хотите переименовать библиотеку TinyWireM в Wire. Если вы просто хотите претендовать на то, что это действительно будет библиотека Wire, это может быть не очень хорошая практика кодирования, поскольку это несколько скрывает факт в вашем коде, что вы используете не библиотеку Wire, а другую библиотеку. Если вы хотите создать код, который можно использовать повторно как для Uno, так и для ATTiny, я бы предложил использовать комбинации #define и #ifdef, #ifndef и #endif директивы, так что в зависимости от определенного флага компилируется только соответствующий код. Насколько я знаю, ArduinoIDE также использует их для включения правильных файлов заголовков для каждой цели. Если вы можете найти соответствующее определение в файлах заголовков, вы можете использовать это. Но проще использовать собственное определение в начале файла.

В качестве подсказки: Если вы когда-либо пытаетесь установить многоуровневую связь через I2C с TinyWireM (который отлично работает для меня), вы должны бесплатно освободить шину после вашей передачи, чтобы другой мастер мог ее использовать. Я сделал это с отключением аппаратного обеспечения USI с помощью USICR&= 0b11001111; pinMode(0,INPUT); pinMode(2,INPUT); Библиотека не делает этого для вас. (Если вы этого не сделаете, шина останется занятой, и никакой другой мастер не сможет связаться) Чтобы использовать директиву регистра USICR у вас также есть #include <USI_TWI_Master.h>

+0

Я попробую это скоро - спасибо. Тем не менее, проблема, с которой я столкнулась, заключается в том, что библиотека TinyWireM не может корректно общаться с устройством. Я попробую установить регистры, как вы предлагали. –

+0

У вас был определенный прогресс в вашей проблеме? Может быть - если у вас есть запасной ардуино - вы можете проверить, какие данные действительно отправляют на датчик. – chrisl

+0

Я все еще работаю над этим, но я все равно не получаю никакого успеха. Все отлично работает с Uno, что является странной частью. Я продолжу расследовать это, хотя, спасибо за ваш ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^