Страница 1 из 2
ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 13:43:56
Alexey1969
Имеется ESP с прошивкой arduino, необходимо организовать опрос нескольких АЦП по I2c.
В сети полно примеров и все работает, пока на шине только один АЦП, стоит подключить еще, вместо данных мусор.
Возможно, кто то разобрался?
Типичный пример из сети :
#include "Wire.h"
int PCF8591=0x48; // I2C bus address
byte ana0, ana1, ana2, ana3;
void setup()
{
Wire.pins(0,2);// just to make sure
Wire.begin(0,2);// the SDA and SCL
}
void loop()
{
Wire.beginTransmission(PCF8591); // wake up PCF8591
Wire.write(0x04); // control byte: reads ADC0 then auto-increment
Wire.endTransmission(); // end tranmission
Wire.requestFrom(PCF8591, 5);
ana0=Wire.read();// throw this one away
ana0=Wire.read();
ana1=Wire.read();
ana2=Wire.read();
ana3=Wire.read();
}
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:02:41
electroget
[uquote="Alexey1969",url="/forum/viewtopic.php?p=4371536#p4371536"]необходимо организовать опрос нескольких АЦП по I2c.[/uquote]
Для подключения нескольких I2C устройств к одной шине существуют специальные хабы. Например PCA9516APW.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:04:58
azhel12
Беглый просмотр документации показал, что у них 3 ножки настройки адреса, то есть можно 8 АЦП подключить на шину (выставив, разумеется, на разных устройствах разные адреса).
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:08:36
Alexey1969
Мне казалось что I2c сама по себе предназначена для подключения нескольких устройств. Или нет ?
Безусловно, адреса установлены разные.
У меня нет вопросов подцепить все это какому-нибудь PICу.
Но надо вот с ардуинкой на esp, так как конструктив уже собран.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:24:01
azhel12
А в коде где заданы разные адреса?
У вас в коде только одна строчка int PCF8591=0x48; // I2C bus address, а их должно быть по количеству АЦП (или массив), ну и потом, понятно, в главном цикле при вызове методов beginTransmission и requestFrom надо передавать по очереди адреса всех АЦП.
Проще, наверно, загнать их в массив и в loop инкрементировать номер текущего АЦП (по модулю их количества).
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:28:16
Alexey1969
Нигде. Просто подключаю к шине еще одно устройство и этот код перестает работать с первым устройством.
Ничего не замыкает. Проверено. Засада либо в коде, либо в библиотеке
У второго устройства другой адрес
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:36:55
azhel12
А, теперь понял, извините за глупые вопросы тогда
Тогда вообще странно, второй вообще не должен мешать. Пробовали скорость уменьшить? Или (если АЦП в виде собранных модулей) у второго убрать резисторы подтяжки SCL/SDA
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Пн фев 13, 2023 14:46:34
Alexey1969
Скорость пробовал. Нет результата.
Чипы голые на плате, подтяжка верная.
Подозреваю что то там не корректно с адресацией в библиотеке или я не разобрался как ее правильно применять, не часто использую ардуинку.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Вт фев 14, 2023 05:48:38
electroget
[uquote="Alexey1969",url="/forum/viewtopic.php?p=4371551#p4371551"]подключаю к шине еще одно устройство и этот код перестает работать с первым устройством.[/uquote]
Проверьте работоспособность каждого АЦП с контроллером по отдельности.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Вт фев 14, 2023 06:00:36
Alexey1969
По отдельности все корректно, по любому из адресов
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 10:57:38
Alexey1969
Так и не понял, что не так, но по одному байту читает корректно. Получилась вот такая конструкция.
Код: Выделить всё
Wire.beginTransmission(DIVACE); // wake up PCF8591
// control byte: где то прочитал, что если авто инскримент, то обязательно включить выход аналоговый
Wire.write(0x44);
Wire.write(0x00);
Wire.endTransmission(); // end tranmission
Wire.requestFrom(DIVACE, 1); // тут предыдущее измеренное, оно нам не надо. Особенности микросхемы
AV[0]=Wire.read();
Wire.requestFrom(DIVACE, 1); // принять 1 байт из устройства
AV[0] = Wire.read();
Wire.requestFrom(DIVACE, 1); // принять 1 байт из устройства
AV[1] = Wire.read();
Wire.requestFrom(DIVACE, 1); // принять 1 байт из устройства
AV[2] = Wire.read();
Wire.requestFrom(DIVACE, 1); // принять 1 байт из устройства
AV[3] = Wire.read();
Возможно, комуто пригодится
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:26:12
veso74
Ваше устройство имеет напр. 4 шт. PCF8591 ( макс. 8 ). Аппаратно, на плате, с выводами A0, A1, A2 каждому чипу назначаете уникальный адрес.
Напр. будет:
Код: Выделить всё
#define PCF8591_0 0x48
#define PCF8591_1 0x49
#define PCF8591_2 0x4A
#define PCF8591_3 0x4B
Управляйте ИС с кодом как одного чипа, по одному уникальному адресу на чип.
PS функция Wire.pins(0,2); нет. Вероятно автор использовал собственное программное решение для I2C.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:28:48
Alexey1969
Я бы все же рекомендовал прочитать всю ветку, чтобы понять, в чем же все таки был вопрос:)
Пины I2c были заданы ранее.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:36:17
veso74
Повторю вопрос коллеги:
---
Как вы это сделали? Код?
А можете подключить ВСЕ микросхемы к одной шине, если они имеют разные адреса.
Запускайте хотя бы сканер I2C, увидите конфликт или работу.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:37:06
electroget
Не совсем понятен итог.
Решение проблемы было найдено или нет?
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:41:35
Alexey1969
Извините, не понял, в чем был совет
Резюмирую:
В исходном примере библиотеки после команды чтения с указанием количества считаных байт, они все корректно считываются.
При подключении дополнительных устройств(с другими адресами), корректно считывается только один байт.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:45:25
electroget
А зачем вам 1 байт? Какая может быть польза от 1 байта инфы?
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:47:30
veso74
Если не устанавливали разные адреса, это нормально: задан первый байт, все устройства отвечают вместе (с разной информацией), и возникает конфликт шины.
Разделите действия каждого по отдельности. I2C может управлять, например. 128 устройств по 2 проводам, если они имеют уникальный адрес.
А как - в сообщениях, советы выше.
Дайте схему (какая микросхема по какому адресу и пину) и полный код для инициализации чипов.
Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:53:48
Alexey1969
Решение было найдено и проверено. Соберу все в кучку, выложу
Измеритель мощности, 16 каналов с передачей на сервер.
Задачи получить высокую точность не стояло, поэтому дешевые АЦП
Прототип, плата категории "на коленке"
Добавлено after 2 minutes 39 seconds:
veso74 писал(а):Если не устанавливали разные адреса, это нормально: задан первый байт, все устройства отвечают вместе (с разной информацией), и возникает конфликт шины.
Эх, что же вы раньше то писать не стали

Re: ESP8266 + Arduino + несколько PCF8591. Как ?
Добавлено: Чт фев 23, 2023 11:57:35
veso74
Фото не очень помогает, куда подключены пины 5, 6, 7 на каждой PCF8591? (GND/VDD)