Страница 2 из 2
ADS1115
Добавлено: 04 сен 2023, 08:19
Rovki
Спасибо, проверю
Отправлено спустя 10 часов 6 минут 45 секунд:
Ругается на скобку
C:\Users\User\AppData\Local\Temp\arduino_modified_sketch_978183\sketch_sep03b.ino: In function 'void loop()':
sketch_sep03b:40:91: error: expression list treated as compound expression in functional cast [-fpermissive]
Serial.println("Chanel " + String(s*4) + " = " + String(float(data_array[s*4] * 0,000125),6)); // *4 для данных из 1 мс
^
ADS1115
Добавлено: 04 сен 2023, 08:30
Александр
Rovki писал(а): 04 сен 2023, 08:19
Ругается на скобку
пишу с планшета.
Замените в числе 0,000125 запятую на точку.
Наверняка, нужно i>>2 взять в скобки. Найдите в тексте и сделайте.
(i>>2 + 1) нужно ((i>>2) + 1)
ADS1115
Добавлено: 04 сен 2023, 10:07
Rovki
Компиляция прошла , но работает не верно . Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор. Спасибо за примеры, но самому править сложно (не на то учился)

ADS1115
Добавлено: 04 сен 2023, 10:27
Александр
Rovki писал(а): 04 сен 2023, 10:07
но работает не верно
Rovki писал(а): 04 сен 2023, 10:07
Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор.
Rovki писал(а): 03 сен 2023, 07:10
Использую 4х4 АЦП
?
Что не верно?
Для одной, 48
Код: Выделить всё
#include <Wire.h>
uint16_t config_1115 = 0xC3E3; // первичная конфигурация, AI-0, 4,096 В
void setup(){
Wire.begin();
for(int16_t a=0; a<1; a++){ // Первичная инициализация, не обязательна. a<1 для х48
Wire.beginTransmission(0x48 | a);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
}
Serial.begin(38400);
}
void loop(){
int16_t data_array[16]; // данные без конверсии, чистые данные АЦП
int16_t adr1115;
int16_t chanel1115;
// цикл для 100k
for (int16_t i=0; i<16; i+4){ // первые два бита, младшие, адрес мс, след. два - номер канала.
adr1115 = 0x0048 | (i & 0x0003); // готовим адрес
// читаем данные из предыдущего запроса
Wire.beginTransmission(adr1115);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(adr1115, 2);
data_array[i] = (Wire.read() << 8) | Wire.read(); // данные без конверсии!!!
// даём команду на следующее преобразование, изменив номер канала в конф. регистре
chanel1115 = ((i>>2) + 1) & 0x0003;
config_1115 = 0xC3E3 | chanel1115 << 12;
Wire.beginTransmission(adr1115);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
delay(1); // т.к. нет других мс, 3 шт
Serial.println("Chanel " + String(i/4) + " = " + String(float(data_array[i] * 0.000125),6)); // *4 для данных из 1 мс
}
// delay(500); // реже опрос
}
ADS1115
Добавлено: 04 сен 2023, 14:13
Rovki
один канал выводит
1693825626324.jpg
Отправлено спустя 3 минуты 22 секунды:
А почему массив 16?
int16_t data_array[16]
ADS1115
Добавлено: 04 сен 2023, 15:03
Александр
Rovki писал(а): 04 сен 2023, 14:13
один канал выводит
Извините, поправьте сами - должно быть так:
for (int16_t i=0; i<16; i = i+4)
16 массив для данных от 16 каналов, 4х4 АЦП.
ADS1115
Добавлено: 04 сен 2023, 15:13
Rovki
Поправлю
ADS1115
Добавлено: 04 сен 2023, 15:22
Александр
Если будут ошибки, пробуйте увеличивать время в delay. Но это может указывать на то, что Ваша мс не тянет 860 сэмплов в секунду.
ADS1115
Добавлено: 04 сен 2023, 18:40
Rovki
странно выводит каналы , а значения нормальные
1693841619146.jpg
Отправлено спустя 1 минуту 38 секунд:
Задержка 500 не меняет дело
ADS1115
Добавлено: 04 сен 2023, 20:53
Александр
Rovki писал(а): 04 сен 2023, 18:40
Задержка 500 не меняет дело
Увеличьте задержку, которая перед сериал принт, я её имел ввиду.
ADS1115
Добавлено: 05 сен 2023, 07:22
Rovki
Александр писал(а): 04 сен 2023, 20:53
Rovki писал(а): 04 сен 2023, 18:40
Задержка 500 не меняет дело
Увеличьте задержку, которая перед сериал принт, я её имел ввиду.
Понял, попробую
Отправлено спустя 9 часов 2 минуты 3 секунды:
Нормально работает при delay(8)

и скорости uart 115200.Еще бы вывести на GPIO13 флаг 0\1 , что бы оценить быстродействие.
Спасибо ,Александр. Если нужна лицензия для HMI-KaScada , обращайтесь.
Отправлено спустя 18 минут 11 секунд:
Вывел флаг - получил 36мс на 4 канала . Или 9мс на канал (с учетом вывода в уарт).Или 1000 измерений за 9сек- это укладывается в задание

Все 4 ads будут работать "параллельно", с небольшой задержкой относительно друг-друга, что допустимо
Отправлено спустя 19 минут 16 секунд:
график.jpg
ADS1115
Добавлено: 05 сен 2023, 07:23
Rovki
Осталось сделать блок

[spoiler]#include <Wire.h>
uint16_t config_1115 = 0xC3E3; // первичная конфигурация, AI-0, 4,096 В
void setup(){
Wire.begin();
for(int16_t a=0; a<1; a++){ // Первичная инициализация, не обязательна. a<1 для х48
Wire.beginTransmission(0x48 | a);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
}
Serial.begin(115200);
}
void loop()
{
int16_t data_array[16]; // данные без конверсии, чистые данные АЦП
int16_t adr1115;
int16_t chanel1115;
// цикл для 100k
for (int16_t i=0; i<16; i=i+4){ // первые два бита, младшие, адрес мс, след. два - номер канала.
adr1115 = 0x0048 | (i & 0x0003); // готовим адрес
// читаем данные из предыдущего запроса
Wire.beginTransmission(adr1115);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(adr1115, 2);
data_array
= (Wire.read() << 8) | Wire.read(); // данные без конверсии!!!
// даём команду на следующее преобразование, изменив номер канала в конф. регистре
chanel1115 = ((i>>2) + 1) & 0x0003;
config_1115 = 0xC3E3 | chanel1115 << 12;
Wire.beginTransmission(adr1115);
Wire.write(0x01);
Wire.write((uint8_t)(config_1115 >> 8));
Wire.write((uint8_t)(config_1115 & 0xFF));
Wire.endTransmission();
delay(8); // т.к. нет других мс, 3 шт
Serial.println("Chanel " + String(i/4) + " = " + String(float(data_array * 0.000125),6)); // *4 для данных из 1 мс
}
}
[/spoiler]
Убрав выдачу в Уарт . И сделать вывод на выходы блока(4шт), а в настройках сделать установку адреса ADS(#48,49,50,51)
ADS1115
Добавлено: 06 сен 2023, 14:21
Rovki
Получается ,что данный чип имеет скорость преобразования 128 ГЦ (умолч).

, потому и вел себя так...
ADS1115
Добавлено: 07 сен 2023, 13:24
Rovki
Если запустить штатный блок ads1115 с внешним стробированием по EN, то данные на выходах не перепутываются, работает нормально.
ADS1115
Добавлено: 02 окт 2023, 18:34
aidar_i
Блок на основе выложенного выше скетча, убран delay.
ADS1115_millis.flp
Внес изменение по замечанию Naladchik .
Re: ADS1115
Добавлено: 05 мар 2025, 10:21
Stue
Как правильно подключить ESP32C3, ads1115 и датчик с выходом от 0-5v, чтобы не спалить ни одно из устройств?
Планирую следующим образом:
1. **ADS1115**:
- VDD -> 3.3V на ESP32-C3
- GND -> GND на ESP32-C3
- SCL -> SCL (GPIO 9 на ESP32-C3)
- SDA -> SDA (GPIO 8 на ESP32-C3)
- A0 -> Выход датчика давления (0-5V)
2. **Датчик давления**:
- VCC -> 5V (если датчик требует 5V)
- GND -> GND
- OUT -> A0 на ADS1115
Нужен ли делитель напряжения для подключения датчика?
Re: ADS1115
Добавлено: 05 мар 2025, 12:08
montirovka
Делитель на входе нужен при питании ADS1115 от 3.3 вольта.
1102dc09c3dfff50d37e4027ca5058a7.png