ADS1115

Нумерация аналоговых входов

Использование цтфро-аналоговых и аналогово-цифровых преобразователей и пользовательских блоков к ним
Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#21

Сообщение Rovki » 03.09.2023{, 22:12}

Спасибо, проверю

Отправлено спустя 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 мс
^
Электронщик до мозга костей и не только

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

ADS1115

#22

Сообщение Александр » 04.09.2023{, 08:30}

Rovki писал(а):
04.09.2023{, 08:19}
Ругается на скобку
пишу с планшета.
Замените в числе 0,000125 запятую на точку.

Наверняка, нужно i>>2 взять в скобки. Найдите в тексте и сделайте.
(i>>2 + 1) нужно ((i>>2) + 1)

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#23

Сообщение Rovki » 04.09.2023{, 10:07}

Компиляция прошла , но работает не верно . Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор. Спасибо за примеры, но самому править сложно (не на то учился) :)
Электронщик до мозга костей и не только

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

ADS1115

#24

Сообщение Александр » 04.09.2023{, 10:27}

Rovki писал(а):
04.09.2023{, 10:07}
но работает не верно
Rovki писал(а):
04.09.2023{, 10:07}
Нужен всего один адрес ADS -#48.Скорость преобразования 860. И 4 канала в ней (А0-А3) вывести на монитор.
Rovki писал(а):
03.09.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); // реже опрос

}

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#25

Сообщение Rovki » 04.09.2023{, 14:10}

один канал выводит
1693825626324.jpg
Отправлено спустя 3 минуты 22 секунды:
А почему массив 16? int16_t data_array[16]
Электронщик до мозга костей и не только

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

ADS1115

#26

Сообщение Александр » 04.09.2023{, 15:03}

Rovki писал(а):
04.09.2023{, 14:13}
один канал выводит
Извините, поправьте сами - должно быть так:
for (int16_t i=0; i<16; i = i+4)
16 массив для данных от 16 каналов, 4х4 АЦП.

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#27

Сообщение Rovki » 04.09.2023{, 15:13}

Поправлю
Электронщик до мозга костей и не только

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

ADS1115

#28

Сообщение Александр » 04.09.2023{, 15:22}

Если будут ошибки, пробуйте увеличивать время в delay. Но это может указывать на то, что Ваша мс не тянет 860 сэмплов в секунду.

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#29

Сообщение Rovki » 04.09.2023{, 18:38}

странно выводит каналы , а значения нормальные
1693841619146.jpg
Отправлено спустя 1 минуту 38 секунд:
Задержка 500 не меняет дело
Электронщик до мозга костей и не только

Александр
Рядовой
Сообщения: 72
Зарегистрирован: 01.12.2015{, 15:49}
Репутация: 11
Откуда: Бобруйск
Имя: Александр

ADS1115

#30

Сообщение Александр » 04.09.2023{, 20:53}

Rovki писал(а):
04.09.2023{, 18:40}
Задержка 500 не меняет дело
Увеличьте задержку, которая перед сериал принт, я её имел ввиду.

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#31

Сообщение Rovki » 04.09.2023{, 21:43}

Александр писал(а):
04.09.2023{, 20:53}
Rovki писал(а):
04.09.2023{, 18:40}
Задержка 500 не меняет дело
Увеличьте задержку, которая перед сериал принт, я её имел ввиду.
Понял, попробую

Отправлено спустя 9 часов 2 минуты 3 секунды:
Нормально работает при delay(8) :smile9: и скорости uart 115200.Еще бы вывести на GPIO13 флаг 0\1 , что бы оценить быстродействие.
Спасибо ,Александр. Если нужна лицензия для HMI-KaScada , обращайтесь. :smile225:

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

Отправлено спустя 19 минут 16 секунд:
график.jpg
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#32

Сообщение Rovki » 05.09.2023{, 07:23}

Осталось сделать блок :smile37:
СпойлерПоказать
#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 мс
}


}

Убрав выдачу в Уарт . И сделать вывод на выходы блока(4шт), а в настройках сделать установку адреса ADS(#48,49,50,51)
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#33

Сообщение Rovki » 06.09.2023{, 14:21}

Получается ,что данный чип имеет скорость преобразования 128 ГЦ (умолч). :smile427: , потому и вел себя так...
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4877
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 268
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ADS1115

#34

Сообщение Rovki » 07.09.2023{, 13:24}

Если запустить штатный блок ads1115 с внешним стробированием по EN, то данные на выходах не перепутываются, работает нормально.
Электронщик до мозга костей и не только

aidar_i
Полковник
Сообщения: 3130
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

ADS1115

#35

Сообщение aidar_i » 02.10.2023{, 18:34}

Блок на основе выложенного выше скетча, убран delay.
ADS1115_millis.flp
(448.1 КБ) 37 скачиваний
Внес изменение по замечанию Naladchik .

Ответить

Вернуться в «ЦАП и АЦП»