[DIY или Сделай сам] Как быстро обойти неизменяемость адреса у датчика HTU21 без стрельбы в ногу
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет дорогие Хабровчане, ну вот и я теперь помогаю Вам.В процессе разработки интересного девайса столкнулся с проблемой, нужно было быстро подключить несколько датчиков htu 21 к ардуинке и записать показания. Датчик порадовал наличием шины i2c, но тут случился облом, ибо адреса у них статичны. Внутренний ардуино гений придумал хитрый способ с поочередной коммутацией и опросом датчиков, потирая ладошки я наблюдал как контроллер иногда зависает, ведь не так все просто. Погуглив, я нашел только вот это, такой же гений, но он видимо не тестировал связку, потому что она не работоспособна больше пары минут из за сквозного тока через защитный диод порта.В комментариях умные люди предлагали разные способы и о да, самый простой, дешевый способ оказался с применением аналогового мультиплексора cd4051be. Цитирую комментарий: "Да проще же. И ног меньше, и I2C аппаратный (мы же тут не про контроллеры, у которых SCL можно на любую ногу вывести?) — ставится аналоговый мультиплексор типа хоть доисторического CD4051, SDA напрямую на все чипы, SCL через мультиплексор. Три дополнительные ноги, 8 дополнительных каналов. Подтяжку SCL к питанию не забыть поставить после мультиплексора, а не до. "Подключал по схеме отсюда, только выход мульплексора не к А0, а к А5. 3 датчика SCL подключены к ноге 15, 13 и 1, SDA общий.Код простейший индийский, основан на таблице состояний
адресные шины включаются через digitalWrite() (пожалуйста не бейте, я не шарю)
int temp1;
int hum1;
int temp2;
int hum2;
int temp3;
int hum3;
#include <HTU21D.h>
HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14);
void setup() {
pinMode(8, OUTPUT); // CD4051 pin 11 (A)
pinMode(9, OUTPUT); // CD4051 pin 10 (B)
pinMode(10, OUTPUT); // CD4051 pin 9 (C)
Serial.begin(9600);
while (myHTU21D.begin() != true)
{
Serial.println(F("Sensor is faild or not connected")); //(F()) saves string to flash & keeps dynamic memory free
delay (200);
// Инициируем передачу данных по последовательному порту на скорости 9600 бот.
}
}
void loop() {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
myHTU21D.begin();
delay (150);
temp1 = myHTU21D.readTemperature();
hum1 = myHTU21D.readCompensatedHumidity();
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
myHTU21D.begin();
delay (150);
temp2 = myHTU21D.readTemperature();
hum2 = myHTU21D.readCompensatedHumidity();
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
myHTU21D.begin();
delay (150);
temp3 = myHTU21D.readTemperature();
hum3 = myHTU21D.readCompensatedHumidity();
Serial.print(" T1: "); Serial.print(temp1 );
Serial.print(" H1: "); Serial.print(hum1 );
Serial.print(" T2: "); Serial.print(temp2 );
Serial.print(" Н2: "); Serial.print(hum2 );
Serial.print(" Т3: "); Serial.print(temp3 );
Serial.print(" Н3: "); Serial.print(hum3 );
===========
Источник:
habr.com
===========
Похожие новости:
- [Производство и разработка электроники, Физика, DIY или Сделай сам, Электроника для начинающих] Радиация: детекторы. Как подружить сцинтиллятор и SiPM
- [Беспроводные технологии, Программирование микроконтроллеров, Умный дом, Интернет вещей, DIY или Сделай сам] Hello NXP JN5169 Zigbee World: правильное подключение и переподключение устройств
- [Научно-популярное, DIY или Сделай сам, Транспорт, Будущее здесь] Джетпак вертолетного типа
- [Программирование микроконтроллеров, 3D-принтеры, DIY или Сделай сам] Обзор PAT9125 оптического датчика филамента для 3d печати
- [Научно-популярное, DIY или Сделай сам, Здоровье] 62-летний инженер с тремором рук легко вышел из положения: закрепил паяльник на стабилизации для камеры
- [Программирование микроконтроллеров, Схемотехника, Производство и разработка электроники, DIY или Сделай сам, Электроника для начинающих] Разработка контроллера резервного питания. Схемотехника
- [Развитие стартапа, Научно-популярное, DIY или Сделай сам, Транспорт] Возрождение гражданской сверхзвуковой авиации
- [Схемотехника, Производство и разработка электроники, DIY или Сделай сам, Электроника для начинающих] Fourth Order Low-pass Filter with One Op Amp
- [Научно-популярное, Энергия и элементы питания, DIY или Сделай сам, Автомобильные гаджеты, Транспорт] Проектирование и создание электровездехода нового формата. Восток
- [Восстановление данных, Компьютерное железо, Накопители, DIY или Сделай сам] NANDкромантия: трансплантация флэш-памяти наживую (перевод)
Теги для поиска: #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_htu_21, #_multipleksory (мультиплексоры), #_arduino (ардуино), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:05
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет дорогие Хабровчане, ну вот и я теперь помогаю Вам.В процессе разработки интересного девайса столкнулся с проблемой, нужно было быстро подключить несколько датчиков htu 21 к ардуинке и записать показания. Датчик порадовал наличием шины i2c, но тут случился облом, ибо адреса у них статичны. Внутренний ардуино гений придумал хитрый способ с поочередной коммутацией и опросом датчиков, потирая ладошки я наблюдал как контроллер иногда зависает, ведь не так все просто. Погуглив, я нашел только вот это, такой же гений, но он видимо не тестировал связку, потому что она не работоспособна больше пары минут из за сквозного тока через защитный диод порта.В комментариях умные люди предлагали разные способы и о да, самый простой, дешевый способ оказался с применением аналогового мультиплексора cd4051be. Цитирую комментарий: "Да проще же. И ног меньше, и I2C аппаратный (мы же тут не про контроллеры, у которых SCL можно на любую ногу вывести?) — ставится аналоговый мультиплексор типа хоть доисторического CD4051, SDA напрямую на все чипы, SCL через мультиплексор. Три дополнительные ноги, 8 дополнительных каналов. Подтяжку SCL к питанию не забыть поставить после мультиплексора, а не до. "Подключал по схеме отсюда, только выход мульплексора не к А0, а к А5. 3 датчика SCL подключены к ноге 15, 13 и 1, SDA общий.Код простейший индийский, основан на таблице состояний адресные шины включаются через digitalWrite() (пожалуйста не бейте, я не шарю) int temp1;
int hum1; int temp2; int hum2; int temp3; int hum3; #include <HTU21D.h> HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14); void setup() { pinMode(8, OUTPUT); // CD4051 pin 11 (A) pinMode(9, OUTPUT); // CD4051 pin 10 (B) pinMode(10, OUTPUT); // CD4051 pin 9 (C) Serial.begin(9600); while (myHTU21D.begin() != true) { Serial.println(F("Sensor is faild or not connected")); //(F()) saves string to flash & keeps dynamic memory free delay (200); // Инициируем передачу данных по последовательному порту на скорости 9600 бот. } } void loop() { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); myHTU21D.begin(); delay (150); temp1 = myHTU21D.readTemperature(); hum1 = myHTU21D.readCompensatedHumidity(); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); myHTU21D.begin(); delay (150); temp2 = myHTU21D.readTemperature(); hum2 = myHTU21D.readCompensatedHumidity(); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); myHTU21D.begin(); delay (150); temp3 = myHTU21D.readTemperature(); hum3 = myHTU21D.readCompensatedHumidity(); Serial.print(" T1: "); Serial.print(temp1 ); Serial.print(" H1: "); Serial.print(hum1 ); Serial.print(" T2: "); Serial.print(temp2 ); Serial.print(" Н2: "); Serial.print(hum2 ); Serial.print(" Т3: "); Serial.print(temp3 ); Serial.print(" Н3: "); Serial.print(hum3 ); =========== Источник: habr.com =========== Похожие новости:
DIY или Сделай сам ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:05
Часовой пояс: UTC + 5