ADS1115
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Спасибо, проверю
Отправлено спустя 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 мс
^
Отправлено спустя 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 мс
^
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Компиляция прошла , но работает не верно . Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор. Спасибо за примеры, но самому править сложно (не на то учился) 

Электронщик до мозга костей и не только
-
- Рядовой
- Сообщения: 85
- Зарегистрирован: 01 дек 2015, 15:49
- Откуда: Бобруйск
- Имя: Александр
- Поблагодарили: 2 раза
ADS1115
Rovki писал(а): 04 сен 2023, 10:07 Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор.
?
Что не верно?
Для одной, 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); // реже опрос
}
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
один канал выводит
Отправлено спустя 3 минуты 22 секунды:
А почему массив 16? int16_t data_array[16]
А почему массив 16? int16_t data_array[16]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
странно выводит каналы , а значения нормальныеОтправлено спустя 1 минуту 38 секунд:
Задержка 500 не меняет дело
Задержка 500 не меняет дело
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Понял, попробую
Отправлено спустя 9 часов 2 минуты 3 секунды:
Нормально работает при delay(8)

Спасибо ,Александр. Если нужна лицензия для HMI-KaScada , обращайтесь.

Отправлено спустя 18 минут 11 секунд:
Вывел флаг - получил 36мс на 4 канала . Или 9мс на канал (с учетом вывода в уарт).Или 1000 измерений за 9сек- это укладывается в задание

Отправлено спустя 19 минут 16 секунд:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Осталось сделать блок 
[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)

[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)
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Получается ,что данный чип имеет скорость преобразования 128 ГЦ (умолч).
, потому и вел себя так...

Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 5710
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 67 раз
- Поблагодарили: 212 раз
- Контактная информация:
ADS1115
Если запустить штатный блок ads1115 с внешним стробированием по EN, то данные на выходах не перепутываются, работает нормально.
Электронщик до мозга костей и не только
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
ADS1115
Блок на основе выложенного выше скетча, убран delay.
Внес изменение по замечанию Naladchik .У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Рядовой
- Сообщения: 93
- Зарегистрирован: 17 дек 2021, 13:41
- Откуда: Владивосток
- Имя: Павел
- Благодарил (а): 3 раза
- Поблагодарили: 14 раз
Re: ADS1115
Как правильно подключить 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
Нужен ли делитель напряжения для подключения датчика?
Планирую следующим образом:
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
Нужен ли делитель напряжения для подключения датчика?
- montirovka
- Капитан
- Сообщения: 730
- Зарегистрирован: 15 фев 2021, 16:16
- Откуда: Геленджик
- Имя: Сергей
- Благодарил (а): 42 раза
- Поблагодарили: 173 раза
Re: ADS1115
Делитель на входе нужен при питании ADS1115 от 3.3 вольта.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость