ADS1115_ATMEGA8 Не работают последовательно каналы измерений
ADS1115_ATMEGA8 Не работают последовательно каналы измерений
Добрый день.
Уважаемые КОТы, помогите разобраться. Необходимо последовательно снять с сигнал с 2-х каналов микросхемки. если запускаешь один канал измернений (к примеру А0), то все четко снимает, точность поражает...а вот если снимаешь последовательно с нескольких каналов (например А0 потом А1) относительно GND, то показания выводит с последнего съема причем на оба канала... какой вторым поставишь , такой и будет... уже голову сломал, вроде все делаю по даташнику ... во вложении помещаю свой код. что я делаю неверно? Прикладные библиотеки управления индикаторами и I2C выкладывать нет смысла, они написаны по стандартному протоколу...
Уважаемые КОТы, помогите разобраться. Необходимо последовательно снять с сигнал с 2-х каналов микросхемки. если запускаешь один канал измернений (к примеру А0), то все четко снимает, точность поражает...а вот если снимаешь последовательно с нескольких каналов (например А0 потом А1) относительно GND, то показания выводит с последнего съема причем на оба канала... какой вторым поставишь , такой и будет... уже голову сломал, вроде все делаю по даташнику ... во вложении помещаю свой код. что я делаю неверно? Прикладные библиотеки управления индикаторами и I2C выкладывать нет смысла, они написаны по стандартному протоколу...
- Реклама
- Starichok51
- Модератор
- Сообщения: 19054
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
а подождать, пока закончится преобразование - это тебя не касается?
только запустил преобразование, и тут же пытаешься прочитать результат.
только запустил преобразование, и тут же пытаешься прочитать результат.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Вводил и ожидание до 100 млСек... Безрезультатно. Снял осцилограмы с даталинии, 3-й байт отличается от 12, значит конфигурационный байт отправляется корректно. К тому же ответка тоже отличается 8-9 байты отличаются от 17-18. если закомментировать одну из этих строчек
AMPERAGE = ADS1115(0) * 10;
VOLTAGE = ADS1115(1) * 2;
то все как и должно быть, преобразования происходят. Все отображается но только один параметр, а вот 2 последовательно не хотят... отображения последнего происходят...
Я тут внимательно просмотрел даташник, я совсем забыл за тайминг свичей мультиплексора... хотя там не сказано какой тайминг конкретно, но его то я не учел, вероятно поэтому последнее измерение и работает, так как после последнего обращения идет большая пауза и у мультиплексора есть время переключится а вот на первое обращение в стеке для переключения времени как раз и не хватает...на измерение нужно всего 8 мкСек они там есть(смотрел осликом... даже больше). Спасибо что намекнули на тайминги.
AMPERAGE = ADS1115(0) * 10;
VOLTAGE = ADS1115(1) * 2;
то все как и должно быть, преобразования происходят. Все отображается но только один параметр, а вот 2 последовательно не хотят... отображения последнего происходят...
Я тут внимательно просмотрел даташник, я совсем забыл за тайминг свичей мультиплексора... хотя там не сказано какой тайминг конкретно, но его то я не учел, вероятно поэтому последнее измерение и работает, так как после последнего обращения идет большая пауза и у мультиплексора есть время переключится а вот на первое обращение в стеке для переключения времени как раз и не хватает...на измерение нужно всего 8 мкСек они там есть(смотрел осликом... даже больше). Спасибо что намекнули на тайминги.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Не прерывайте I2c (I2C_Stop();) между командами.
Попробуйте. Фрагмент кода ниже: из вашего кода. Не искал каких-либо несоответствий в данных.
Однако добавьте и время на преобразование.
Ссылка: https://www.ccsinfo.com/forum/viewtopic.php?t=56983
Код: Выделить всё
...
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();
}Код: Выделить всё
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 Не работают последовательно каналы измер
где ты такое нашел?Витаха писал(а):на измерение нужно всего 8 мкСек
без ожидания окончания преобразования точно будет безрезультатно.Витаха писал(а):Вводил и ожидание до 100 млСек... Безрезультатно.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Реклама
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Да, и время относительно велико.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 Не работают последовательно каналы измер
Даташник стр 19veso74 писал(а):где ты такое нашел?
Добавлено after 5 minutes 35 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4547162#p4547162"]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[/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 Не работают последовательно каналы измер
это длительность сигнала ALERT/RDY, а не время преобразования.Витаха писал(а):Даташник стр 19
для твоих 64 измерений в секунду время преобразования равно 1 / 64 = 0,015625 сек, или 15,625 мсек.veso74 писал(а):the conversion time is equal to 1 / DR.
Добавлено after 11 minutes 18 seconds:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измерений
да, и я в твоем тексте вижу 128 SPS, а не 64.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Да, спасибо, уже прочитал. а "в моем случае" то я экспериментировал. Вообще я использую 64. Значит поставлю 20 млСек. Надеюсь не очень сильно отобразится на скорости... Либо увеличу скорость...
- Starichok51
- Модератор
- Сообщения: 19054
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
у тебя прерывание таймера по переполнению происходит гораздо чаще, чем длится одно измерение. а в прерывании должно пройти 2 измерения.
если на одно измерение сделать задержку 20 мс, то, с запасом, нужно прерывание таймера сделать через 50 мс.
если на одно измерение сделать задержку 20 мс, то, с запасом, нужно прерывание таймера сделать через 50 мс.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Парни, всем спасибо за участие, все получилось... Правда почему-то заработало при 64 Гц опросе задержка 80 млСек, глянул на осциллограмму и прослезился. Там сплошные пропуски. Видимо прерывания семисегментника накладываются на прерывания по 16-ти битному таймеру плюс задержки , и таймера срывают I2c передачу. видимо придется ставить 2 МК один чтоб рулил семисегментниками в режиме слейва, и по I2C принимал циферки, которые нужно выводить и тогда все будет гуд.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Вариант: подключите семисегментные индикаторы к TM1637, MAX7219 и т.п.
- Starichok51
- Модератор
- Сообщения: 19054
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
[uquote="Starichok51",url="/forum/viewtopic.php?p=4547582#p4547582"]Витаха, у тебя пока не закончит работу прерывание по TIMER1_OVF, никакое прерывание для семисегментника не начнется. вот и имеешь большие пропуски.
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.[/uquote]
Я это понимаю, я только начал освоение микроконтроллеров, это , можно сказать, мое четвертое устройство. Но я научусь. Разберусь обязательно. До этого я 30 лет не писал программы, и с Си столкнулся впервые. еще год назад для меня микроконтроллер это была магия... сейчас я погряз по уши в ЮАРТ СПАЙ, И2С, таймеры, прерывания и т д... Это очень мне интересно))))
На Счет ТМ1637, и МAXIM, хорошие микросхемы, но их нужно покупать, ТМ1637 не подходит, она максимум для 6 разрядов, проще подключить к отдельному МК, коих у меня лежат сейчас в загашнике(Закупился при случае подешевке). И по тойже И2С передавать. теперь вопрос , как сделать чтоб вторая мега была слейвом? Буду разбираться. Спасибо всем, теперь я знаю немного больше...
не в обиду будет сказано, но твой код называется говнокод.
и от себя добавлю - не просто, а в квадрате.[/uquote]
Я это понимаю, я только начал освоение микроконтроллеров, это , можно сказать, мое четвертое устройство. Но я научусь. Разберусь обязательно. До этого я 30 лет не писал программы, и с Си столкнулся впервые. еще год назад для меня микроконтроллер это была магия... сейчас я погряз по уши в ЮАРТ СПАЙ, И2С, таймеры, прерывания и т д... Это очень мне интересно))))
На Счет ТМ1637, и МAXIM, хорошие микросхемы, но их нужно покупать, ТМ1637 не подходит, она максимум для 6 разрядов, проще подключить к отдельному МК, коих у меня лежат сейчас в загашнике(Закупился при случае подешевке). И по тойже И2С передавать. теперь вопрос , как сделать чтоб вторая мега была слейвом? Буду разбираться. Спасибо всем, теперь я знаю немного больше...
- Starichok51
- Модератор
- Сообщения: 19054
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Витаха, чтобы МК мог делать другую работу (например, обрабатывать индикацию), нельзя в прерывании таймера ждать окончания всех преобразований по АЦП.
в моих изделиях в прерывании таймера сначала читается результат преобразования по одному каналу и потом запускается преобразование по другому каналу.
понятно, что интервал таймера должен превышать время преобразования, чтобы к следующему прерыванию преобразование гарантированно закончилось.
но для этого нужна переменная, которая определяет очередность каналов, и нужно в main после всей инициализации запустить преобразование первого канала.
в прерывании после чтения результата изменяем переменную, определяющую номер канала, результат которого нужно считывать, и запускаем преобразование с другим номером канала.
таким образом, прерывание от таймера работает короткое время, и не мешает другой работе, в том числе такой, как своевременное обслуживание индикации.
в моих изделиях в прерывании таймера сначала читается результат преобразования по одному каналу и потом запускается преобразование по другому каналу.
понятно, что интервал таймера должен превышать время преобразования, чтобы к следующему прерыванию преобразование гарантированно закончилось.
но для этого нужна переменная, которая определяет очередность каналов, и нужно в main после всей инициализации запустить преобразование первого канала.
в прерывании после чтения результата изменяем переменную, определяющую номер канала, результат которого нужно считывать, и запускаем преобразование с другим номером канала.
таким образом, прерывание от таймера работает короткое время, и не мешает другой работе, в том числе такой, как своевременное обслуживание индикации.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
ещё добавлю, если не хочется, чтобы прерывание индикации помешали критичному процессу (например передаче данных) - можно этот процесс начинать сразу за переключением индикатора - тогда на передачу будет гарантированный кусок свободного от прерываний таймера времени...
если время передачи больше времени между сменой разрядов индикации - можно процесс притормозить в некритичном для передачи месте
можно, конечно и прерывания отключать, но мигающий экран - зрелище неэстетичное
сам когда делаю устройства с дин. индикацией - эту самую индикацию и использую как арбитр процессов
если время передачи больше времени между сменой разрядов индикации - можно процесс притормозить в некритичном для передачи месте
можно, конечно и прерывания отключать, но мигающий экран - зрелище неэстетичное
сам когда делаю устройства с дин. индикацией - эту самую индикацию и использую как арбитр процессов
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Все сделал. За динамическую индикацию отвечает один камушек(закупился на али по дешевке), за ацп другой. все нормально работает, все успевает... Всем спасибо за участие. Ребята, вы очень помогли. я только в начале пути освоения микроконтроллеров....
- Starichok51
- Модератор
- Сообщения: 19054
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
понятно, моя подсказка впрок не пошла.
а это всё легко делается на одном камушке...
а это всё легко делается на одном камушке...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: ADS1115_ATMEGA8 Не работают последовательно каналы измер
Вообще любая программа для МК без ос включает обычно минимум две части: источники событий и цикл обработки событий.
Источники событий это обычно то, что делается в прерываниях, а обработчики - в фоновом цикле.
Это позволяет очень сильно разгрузить прерывания.
И уж точно делать обмен по i2c или spi с ожиданием в прерывании не стоит.
Источники событий это обычно то, что делается в прерываниях, а обработчики - в фоновом цикле.
Это позволяет очень сильно разгрузить прерывания.
И уж точно делать обмен по i2c или spi с ожиданием в прерывании не стоит.


