Использовать AS3935 с I2C?

Есть ли у кого-нибудь опыт подключения датчика молний AS3935 по I2C? Я нашёл библиотеку, но, насколько я понимаю, она работает только с SPI. Мне очень не хочется отдавать четыре контакта для SPI, так как они нужны мне для других целей. I2C был бы отличным вариантом, так как я использую ещё пару датчиков по I2C, поэтому не нужны дополнительные контакты только для AS3935.

, 👍2

Обсуждение

Пожалуйста, опубликуйте ссылку на эту библиотеку. Желательно на AS3935. Так на ваш вопрос будет проще ответить., @Nick Gammon

Техническое описание http://www1.futureelectronics.com/doc/AUSTRIAMICROSYSTEMS/AS3935.pdf, @MarkU

Я использовал другие устройства I2C с Arduino UNO (версия 1.6 IDE); небольшой совет: поскольку AS3935 требует условия повторного запуска I2C (Sr) для чтения регистров устройства, вам может потребоваться исправить библиотеку Wire... см. http://forum.arduino.cc/index.php?topic=137607.0 и https://github.com/helenarobotics/Arduino/commit/8aff39a229362e0167e5f48f6c15d02b39b0fbca -- Изменение в файле C:\Program Files (x86)\Arduino-1.6.0\hardware\arduino\avr\libraries\Wire\utility/twi.c --- строка 468 twi_stop(); // <---- закомментируйте эту строку, @MarkU


1 ответ


1

Просто используйте эти функции для чтения/записи регистров AS3935, заменив регистры SPI (_devAddr — адрес устройства, обычно 0x03):

// функции чтения/записи для режима I2C
uint8_t AS3935::_i2cRead(uint8_t addr)
{
    // отправить номер регистра
    Wire.beginTransmission(_devAddr);
    Wire.write(addr);
    Wire.endTransmission(false); // <<<--- 'false' здесь обязательно!

    // запрос данных регистра
    Wire.requestFrom(_devAddr, (uint8_t)1);

    // чтение данных
    return Wire.read();
}

void AS3935::_i2cWrite(uint8_t addr, uint8_t data)
{
    Wire.beginTransmission(_devAddr);
    Wire.write(addr);
    Wire.write(data);
    Wire.endTransmission();
}

«Хитрость» заключается в использовании Wire.endTransmission(false) внутри процедуры чтения; это позволяет избежать отправки стопового бита, который обязателен для операции чтения AS3935.

,