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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

Добрый день.
Уважаемые КОТы, помогите разобраться. Необходимо последовательно снять с сигнал с 2-х каналов микросхемки. если запускаешь один канал измернений (к примеру А0), то все четко снимает, точность поражает...а вот если снимаешь последовательно с нескольких каналов (например А0 потом А1) относительно GND, то показания выводит с последнего съема причем на оба канала... какой вторым поставишь , такой и будет... уже голову сломал, вроде все делаю по даташнику ... во вложении помещаю свой код. что я делаю неверно? Прикладные библиотеки управления индикаторами и I2C выкладывать нет смысла, они написаны по стандартному протоколу...
Вложения
main.c
(1.64 КБ) 87 скачиваний
main.c
(1.64 КБ) 86 скачиваний
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

а подождать, пока закончится преобразование - это тебя не касается?
только запустил преобразование, и тут же пытаешься прочитать результат.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

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

AMPERAGE = ADS1115(0) * 10;

VOLTAGE = ADS1115(1) * 2;
то все как и должно быть, преобразования происходят. Все отображается но только один параметр, а вот 2 последовательно не хотят... отображения последнего происходят...
Я тут внимательно просмотрел даташник, я совсем забыл за тайминг свичей мультиплексора... хотя там не сказано какой тайминг конкретно, но его то я не учел, вероятно поэтому последнее измерение и работает, так как после последнего обращения идет большая пауза и у мультиплексора есть время переключится а вот на первое обращение в стеке для переключения времени как раз и не хватает...на измерение нужно всего 8 мкСек они там есть(смотрел осликом... даже больше). Спасибо что намекнули на тайминги.
veso74
Поставщик валерьянки для Кота
Сообщения: 1915
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Не прерывайте 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();
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

Витаха писал(а):на измерение нужно всего 8 мкСек
где ты такое нашел?
Витаха писал(а):Вводил и ожидание до 100 млСек... Безрезультатно.
без ожидания окончания преобразования точно будет безрезультатно.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1915
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

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
Реклама
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

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

Добавлено after 5 minutes 35 seconds:
veso74 писал(а):Да, и время относительно велико.
SPS - samples per second
[uquote="veso74",url="/forum/viewtopic.php?p=4547162#p4547162"]
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[/uquote]
Я использую 64 измерения в секунду, это и визуально комфортно, и точность на приемлемом уровне

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

Добавлено after 2 minutes 2 seconds:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измерений
Кстати, прерывания в даташнике опять же, я все делаю по даташиту(во всяком случае стараюсь) Там есть диаграммы чтения и записи, я по ним писал.
Вложения
Безымянный.jpg
(42.08 КБ) 85 скачиваний
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

Витаха писал(а):Даташник стр 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.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

Да, спасибо, уже прочитал. а "в моем случае" то я экспериментировал. Вообще я использую 64. Значит поставлю 20 млСек. Надеюсь не очень сильно отобразится на скорости... Либо увеличу скорость...
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

у тебя прерывание таймера по переполнению происходит гораздо чаще, чем длится одно измерение. а в прерывании должно пройти 2 измерения.
если на одно измерение сделать задержку 20 мс, то, с запасом, нужно прерывание таймера сделать через 50 мс.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

Парни, всем спасибо за участие, все получилось... Правда почему-то заработало при 64 Гц опросе задержка 80 млСек, глянул на осциллограмму и прослезился. Там сплошные пропуски. Видимо прерывания семисегментника накладываются на прерывания по 16-ти битному таймеру плюс задержки , и таймера срывают I2c передачу. видимо придется ставить 2 МК один чтоб рулил семисегментниками в режиме слейва, и по I2C принимал циферки, которые нужно выводить и тогда все будет гуд.
veso74
Поставщик валерьянки для Кота
Сообщения: 1915
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Вариант: подключите семисегментные индикаторы к TM1637, MAX7219 и т.п.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4547582#p4547582"]Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.[/uquote]
Я это понимаю, я только начал освоение микроконтроллеров, это , можно сказать, мое четвертое устройство. Но я научусь. Разберусь обязательно. До этого я 30 лет не писал программы, и с Си столкнулся впервые. еще год назад для меня микроконтроллер это была магия... сейчас я погряз по уши в ЮАРТ СПАЙ, И2С, таймеры, прерывания и т д... Это очень мне интересно))))

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

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

Сообщение Starichok51 »

Витаха, чтобы МК мог делать другую работу (например, обрабатывать индикацию), нельзя в прерывании таймера ждать окончания всех преобразований по АЦП.
в моих изделиях в прерывании таймера сначала читается результат преобразования по одному каналу и потом запускается преобразование по другому каналу.
понятно, что интервал таймера должен превышать время преобразования, чтобы к следующему прерыванию преобразование гарантированно закончилось.
но для этого нужна переменная, которая определяет очередность каналов, и нужно в main после всей инициализации запустить преобразование первого канала.
в прерывании после чтения результата изменяем переменную, определяющую номер канала, результат которого нужно считывать, и запускаем преобразование с другим номером канала.
таким образом, прерывание от таймера работает короткое время, и не мешает другой работе, в том числе такой, как своевременное обслуживание индикации.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

Сообщение Ivanoff-iv »

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

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


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

сам когда делаю устройства с дин. индикацией - эту самую индикацию и использую как арбитр процессов
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Витаха
Родился
Сообщения: 7
Зарегистрирован: Сб фев 24, 2024 15:03:17

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

Сообщение Витаха »

Все сделал. За динамическую индикацию отвечает один камушек(закупился на али по дешевке), за ацп другой. все нормально работает, все успевает... Всем спасибо за участие. Ребята, вы очень помогли. я только в начале пути освоения микроконтроллеров....
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

понятно, моя подсказка впрок не пошла.
а это всё легко делается на одном камушке...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
SfS
Друг Кота
Сообщения: 19426
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

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

Сообщение SfS »

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

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

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

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

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