Существуют ли хорошие и поддерживаемые библиотеки для использования моста DS2482 I2C с 1-Wire?

DS2482-100 и DS2482-800 — это мосты I2C-1-Wire, которые полезны для управления сложными сетями 1-Wire.

Они изначально поддерживаются рядом пакетов в Linux, поэтому вы можете легко взаимодействовать с ними на Raspberry Pi.

Однако я был удивлен, обнаружив, что нет очевидной библиотеки для доступа к ним на Arduino.

Я обнаружил следующее:

  • Библиотека Arduino имеет некоторые особенности и не поддерживается.
  • Часть AVR-Liberty — меньше причуд, не уверен если поддерживается, не "Arduino", как такой, больше AVR.

Полезно иметь возможность полагаться на поддерживаемые библиотеки для работы с любыми изменениями в среде Arduino.

Библиотеки Arduino часто проще в использовании, чем библиотеки, разработанные для AVR в целом, что означает, что больше людей могут использовать программное обеспечение.

Есть ли лучшая библиотека?

, 👍3

Обсуждение

Единственное, что я знаю, это [библиотека проводов](http://arduino.cc/en/reference/wire#.Uv_jOvbzT1o), но I2c для TWI. Там также есть несколько крошечных библиотек onewire, но похоже, что это не то, что вы ищете. Это может быть хорошее время, чтобы начать свою собственную библиотеку :-), @Faux_Clef

Неподдерживаемая библиотека не обязательно означает плохую библиотеку. Если он полнофункционален и безупречен, то его не нужно поддерживать. Кроме того, тот факт, что коммит не происходит в течение длительного времени, не всегда означает, что его некому поддерживать., @jfpoilpret

По крайней мере, с библиотекой с открытым исходным кодом вы можете легко изменить код самостоятельно, если он содержит ошибки или не соответствует вашим потребностям. Техническое описание DS2482 может помочь в этом., @jfpoilpret

Нет, неподдерживаемый не всегда означает плохой, но когда с ним проблемы и он не обновлялся несколько лет, это вообще плохо., @Cybergibbons

@Cybergibbons, ты пробовал? Некоторые вопросы могут быть актуальны не для всех пользователей библиотеки. Насколько я вижу, по упомянутой библиотеке Arduino открыта только одна проблема, и ей всего месяц; Я бы не считал это неподдерживаемым (пока)., @jfpoilpret

Да, он не очень надежен - кажется, периодически пропускаются показания, и его необходимо модифицировать, чтобы решить эту проблему. Также не полностью реализован набор функций DS2482., @Cybergibbons

Библиотека не имела дело с паразитным питанием, отсюда и ненадежность., @Cybergibbons

Я использую эту библиотеку для связи с DS2482, но впоследствии не могу связаться с DS2401+ через 1-Wire. Я использую I2C 1-Wire Click (DS2482-800) и на 8 каналах DS2401+. https://www.mikroe.com/i2c-1-wire-click -> I2C 1-Wire Click (DS2482-800) https://pdfserv.maximintegrated.com/en/ds/DS2401.pdf -> DS2401+. Не могли бы вы объяснить мне? Спасибо, @Ibrahim


2 ответа


Лучший ответ:

1

Я реализовал библиотеку на основе библиотеки Paeaetech, указанной выше, но приведя в порядок определения, устранив указанную проблему, добавление CRC на основе таблицы поиска и поддержка датчиков с пассивным питанием.

,

2

Я считаю, что в библиотеке, на которую ссылается Cybergibbons, есть ошибка

uint8_t OneWire::wireSearch(uint8_t *адрес)

Расхождение при i = 0 (нулевой бит в этой библиотеке, id_bit_number = 1 в примере Maxim) следует только по пути direction = 1 и не может найти адреса ПЗУ, где нулевой бит = 0 (т. е. даже коды семейств пропускаются, когда на шине 1-wire присутствуют смешанные устройства, некоторые с четными, а другие с нечетными кодами семейства).

Исправление, которое я только что внедрил и, похоже, работает, состоит в том, чтобы изменить библиотеку, чтобы объявить searchLastDiscrepancy и last_zero как int8_t (не uint8_t), инициализировать/сбросить их в -1 (не ноль) и ближе к концу метода

    if (!last_zero) 
            searchLastDeviceFlag = 1;

становится

    if (last_zero == -1)
            searchLastDeviceFlag = 1;

Надеюсь, это поможет.

,