Использовать AS3935 с I2C?
Есть ли у кого-нибудь опыт подключения датчика молний AS3935 по I2C? Я нашёл библиотеку, но, насколько я понимаю, она работает только с SPI. Мне очень не хочется отдавать четыре контакта для SPI, так как они нужны мне для других целей. I2C был бы отличным вариантом, так как я использую ещё пару датчиков по I2C, поэтому не нужны дополнительные контакты только для AS3935.
@qwertz, 👍2
Обсуждение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.
,
@Max
Смотрите также:
- OVF в последовательном мониторе вместо данных
- Путаница между SPI и I2C для SSD1306 OLED
- I2C и SPI одновременно?
- Как подключить MPU9250 к NodeMCU с помощью SPI или I2C Slave?
- Запуск 7-контактного OLED-дисплея с 4 контактами (I2C)
- Последовательная связь между несколькими устройствами (или ардуино)
- Несколько датчиков расстояния VL6180X интерактивная проблема
- Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
Пожалуйста, опубликуйте ссылку на эту библиотеку. Желательно на 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