Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

ADS1115_ATMEGA8 Не работают последовательно каналы измерений

Сб фев 24, 2024 15:22:13

Добрый день.
Уважаемые КОТы, помогите разобраться. Необходимо последовательно снять с сигнал с 2-х каналов микросхемки. если запускаешь один канал измернений (к примеру А0), то все четко снимает, точность поражает...а вот если снимаешь последовательно с нескольких каналов (например А0 потом А1) относительно GND, то показания выводит с последнего съема причем на оба канала... какой вторым поставишь , такой и будет... уже голову сломал, вроде все делаю по даташнику ... во вложении помещаю свой код. что я делаю неверно? Прикладные библиотеки управления индикаторами и I2C выкладывать нет смысла, они написаны по стандартному протоколу...
Вложения
main.c
(1.64 KiB) Скачиваний: 14
main.c
(1.64 KiB) Скачиваний: 11

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 19:04:02

а подождать, пока закончится преобразование - это тебя не касается?
только запустил преобразование, и тут же пытаешься прочитать результат.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 19:26:08

Вводил и ожидание до 100 млСек... Безрезультатно. Снял осцилограмы с даталинии, 3-й байт отличается от 12, значит конфигурационный байт отправляется корректно. К тому же ответка тоже отличается 8-9 байты отличаются от 17-18. если закомментировать одну из этих строчек

AMPERAGE = ADS1115(0) * 10;

VOLTAGE = ADS1115(1) * 2;
то все как и должно быть, преобразования происходят. Все отображается но только один параметр, а вот 2 последовательно не хотят... отображения последнего происходят...
Я тут внимательно просмотрел даташник, я совсем забыл за тайминг свичей мультиплексора... хотя там не сказано какой тайминг конкретно, но его то я не учел, вероятно поэтому последнее измерение и работает, так как после последнего обращения идет большая пауза и у мультиплексора есть время переключится а вот на первое обращение в стеке для переключения времени как раз и не хватает...на измерение нужно всего 8 мкСек они там есть(смотрел осликом... даже больше). Спасибо что намекнули на тайминги.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 20:15:55

Не прерывайте I2c (I2C_Stop();) между командами.
Код:
    ...
    I2C_SendByte(0b10000011); //младший конфигурационный байт
->  I2C_Stop();

    I2C_Start();
    I2C_SendByte(0b10010000);
    I2C_SendByte(0b00000000);
    I2C_Stop();
    ...

Попробуйте. Фрагмент кода ниже: из вашего кода. Не искал каких-либо несоответствий в данных.
Однако добавьте и время на преобразование.
Код:
if (adress == 1)
   {
      I2C_Start();
      I2C_SendByte(0b10010000);// передаем адрес устройства и бит записи
      I2C_SendByte(0b00000001);// address pointer register определяем передачу конфигурационных регистров.
      I2C_SendByte(0b11010101);//старший конфиг байт
      I2C_SendByte(0b10000011); //младший конфигурационный байт
      I2C_Stop();

      I2C_Start();
      I2C_SendByte(0b10010000);
      I2C_SendByte(0b00000000);
      I2C_Start();
      I2C_SendByte(0b10010001);
      x1 = I2C_ReadByte();//считывание старщего байта с АЦП
      x2 = I2C_ReadLastByte();
      I2C_Stop();
   }

Ссылка: https://www.ccsinfo.com/forum/viewtopic.php?t=56983
Код:
   i2c_start();   // Configuration of registers
   i2c_write(address);//address of device last bit R/W read=1 write=0
   i2c_write(0x01);//address point Register 0x1
   i2c_write(0x80);//Config register MSB 3rd bit 0- 0x80
   i2c_write(0x83);//Config register LSB - 0x83
   i2c_stop();
   delay_ms(130);

   i2c_start();
   i2c_write(address);//address of device R/W
   i2c_write(0x00);// 0x00
   i2c_start();
   i2c_write(address | 1); //0x91
   msb=i2c_read();
   lsb=i2c_read(0);
   i2c_stop();

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 20:41:05

Витаха писал(а):на измерение нужно всего 8 мкСек
где ты такое нашел?
Витаха писал(а):Вводил и ожидание до 100 млСек... Безрезультатно.
без ожидания окончания преобразования точно будет безрезультатно.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 20:48:10

The ADS111x offer programmable output data rates. Use the DR[2:0] bits in the Config register to select output
data rates of 8 SPS, 16 SPS, 32 SPS, 64 SPS, 128 SPS, 250 SPS, 475 SPS, or 860 SPS.
Conversions in the ADS111x settle within a single cycle; thus, the conversion time is equal to 1 / DR.

Да, и время относительно велико.
SPS - samples per second

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 21:00:48

veso74 писал(а):где ты такое нашел?

Даташник стр 19

Добавлено after 5 minutes 35 seconds:
veso74 писал(а):Да, и время относительно велико.
SPS - samples per second
The ADS111x offer programmable output data rates. Use the DR[2:0] bits in the Config register to select output
data rates of 8 SPS, 16 SPS, 32 SPS, 64 SPS, 128 SPS, 250 SPS, 475 SPS, or 860 SPS.
Conversions in the ADS111x settle within a single cycle; thus, the conversion time is equal to 1 / DR.

Да, и время относительно велико.
SPS - samples per second

Я использую 64 измерения в секунду, это и визуально комфортно, и точность на приемлемом уровне

Добавлено after 2 minutes 16 seconds:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измерений
Парни, спасибо, что откликнулись. Я тут человек новый, еще не сориентировался с интерфейсом форума. Попробую тайминги проставить. Надеюсь поможет.

Добавлено after 2 minutes 2 seconds:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измерений
Кстати, прерывания в даташнике опять же, я все делаю по даташиту(во всяком случае стараюсь) Там есть диаграммы чтения и записи, я по ним писал.
Вложения
Безымянный.jpg
(42.08 KiB) Скачиваний: 17

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 21:18:55

Витаха писал(а):Даташник стр 19
это длительность сигнала ALERT/RDY, а не время преобразования.
veso74 писал(а):the conversion time is equal to 1 / DR.
для твоих 64 измерений в секунду время преобразования равно 1 / 64 = 0,015625 сек, или 15,625 мсек.

Добавлено after 11 minutes 18 seconds:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измерений
да, и я в твоем тексте вижу 128 SPS, а не 64.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб фев 24, 2024 21:22:33

Да, спасибо, уже прочитал. а "в моем случае" то я экспериментировал. Вообще я использую 64. Значит поставлю 20 млСек. Надеюсь не очень сильно отобразится на скорости... Либо увеличу скорость...

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вс фев 25, 2024 08:01:35

у тебя прерывание таймера по переполнению происходит гораздо чаще, чем длится одно измерение. а в прерывании должно пройти 2 измерения.
если на одно измерение сделать задержку 20 мс, то, с запасом, нужно прерывание таймера сделать через 50 мс.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вс фев 25, 2024 13:44:01

Парни, всем спасибо за участие, все получилось... Правда почему-то заработало при 64 Гц опросе задержка 80 млСек, глянул на осциллограмму и прослезился. Там сплошные пропуски. Видимо прерывания семисегментника накладываются на прерывания по 16-ти битному таймеру плюс задержки , и таймера срывают I2c передачу. видимо придется ставить 2 МК один чтоб рулил семисегментниками в режиме слейва, и по I2C принимал циферки, которые нужно выводить и тогда все будет гуд.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вс фев 25, 2024 14:04:22

Вариант: подключите семисегментные индикаторы к TM1637, MAX7219 и т.п.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вс фев 25, 2024 14:44:27

Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Пн фев 26, 2024 08:59:25

Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.

Я это понимаю, я только начал освоение микроконтроллеров, это , можно сказать, мое четвертое устройство. Но я научусь. Разберусь обязательно. До этого я 30 лет не писал программы, и с Си столкнулся впервые. еще год назад для меня микроконтроллер это была магия... сейчас я погряз по уши в ЮАРТ СПАЙ, И2С, таймеры, прерывания и т д... Это очень мне интересно))))

На Счет ТМ1637, и МAXIM, хорошие микросхемы, но их нужно покупать, ТМ1637 не подходит, она максимум для 6 разрядов, проще подключить к отдельному МК, коих у меня лежат сейчас в загашнике(Закупился при случае подешевке). И по тойже И2С передавать. теперь вопрос , как сделать чтоб вторая мега была слейвом? Буду разбираться. Спасибо всем, теперь я знаю немного больше...

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вт фев 27, 2024 11:29:33

Витаха, чтобы МК мог делать другую работу (например, обрабатывать индикацию), нельзя в прерывании таймера ждать окончания всех преобразований по АЦП.
в моих изделиях в прерывании таймера сначала читается результат преобразования по одному каналу и потом запускается преобразование по другому каналу.
понятно, что интервал таймера должен превышать время преобразования, чтобы к следующему прерыванию преобразование гарантированно закончилось.
но для этого нужна переменная, которая определяет очередность каналов, и нужно в main после всей инициализации запустить преобразование первого канала.
в прерывании после чтения результата изменяем переменную, определяющую номер канала, результат которого нужно считывать, и запускаем преобразование с другим номером канала.
таким образом, прерывание от таймера работает короткое время, и не мешает другой работе, в том числе такой, как своевременное обслуживание индикации.

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Ср фев 28, 2024 12:21:41

ещё добавлю, если не хочется, чтобы прерывание индикации помешали критичному процессу (например передаче данных) - можно этот процесс начинать сразу за переключением индикатора - тогда на передачу будет гарантированный кусок свободного от прерываний таймера времени...

если время передачи больше времени между сменой разрядов индикации - можно процесс притормозить в некритичном для передачи месте


можно, конечно и прерывания отключать, но мигающий экран - зрелище неэстетичное

сам когда делаю устройства с дин. индикацией - эту самую индикацию и использую как арбитр процессов

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Вт мар 12, 2024 12:28:21

Все сделал. За динамическую индикацию отвечает один камушек(закупился на али по дешевке), за ацп другой. все нормально работает, все успевает... Всем спасибо за участие. Ребята, вы очень помогли. я только в начале пути освоения микроконтроллеров....

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Ср мар 13, 2024 09:25:01

понятно, моя подсказка впрок не пошла.
а это всё легко делается на одном камушке...

Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер

Сб мар 30, 2024 07:48:03

Вообще любая программа для МК без ос включает обычно минимум две части: источники событий и цикл обработки событий.

Источники событий это обычно то, что делается в прерываниях, а обработчики - в фоновом цикле.

Это позволяет очень сильно разгрузить прерывания.

И уж точно делать обмен по i2c или spi с ожиданием в прерывании не стоит.
Ответить