messenger 1 20 августа, 2015 Опубликовано 20 августа, 2015 · Жалоба Добрый день! Помогите разобраться. У ацп ads1255 максимальная скорость оцифровки 30 000 измерений в секунду. Флаг готовности ацп появляется с периодом 34 мкс. При работе на рекомендуемой производителем тактовой частоте 7,68 Мгц, время на запрос, t6, и чтение составляет порядка 23 мкс. Задача собрать максимальное количество измерений за 1 мс. Ранее я уже работал с этим ацп, блок расчетов взял старый, но там и скорости были 1-5 измерений в секунду. Сейчас ПО организовано так, запускаю таймер на 1 мс, и читаю в цикле сколько успею. Получается 1 измерение. А нужно 5-10. Вопросы) 1. На какой тактовой частоте должен работать контроллер, чтобы успеть забрать все данные на такой скорости? 2. Данные забирает компьютер. Как правильно организовать алгоритм чтения чтобы забрать максимальное количество измерений. Т.е. пересылать только значения 3-х байт данных, а обрабатывать уже в ПК? А как же переключение пределов. У меня сейчас Atmega16 разбирает данные. Пишу на Си. Так в лучшем случае 1-2 измерения получается забрать на такой скорости. Циклы for, While, и т.д. съедают от 5 до 10 мск. Если заремаркировть полные циклы вычислений, то удается проконтролировать байт готовности 23-26 раз. Как только добавляю вычисления (приведение к виду напряжения, обработку предела) все сразу сходит до 1 го измерения за 1 мс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 206 20 августа, 2015 Опубликовано 20 августа, 2015 · Жалоба Тема о нехватке квалификации в правильном выборе и последующей работе с аппаратурой и ПО, а несчастный АЦП здесь вовсе не при чём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба 1. На какой тактовой частоте должен работать контроллер, чтобы успеть забрать все данные на такой скорости? 2. Данные забирает компьютер. Как правильно организовать алгоритм чтения чтобы забрать максимальное количество измерений. Т.е. пересылать только значения 3-х байт данных, а обрабатывать уже в ПК? А как же переключение пределов. 1. Встречные вопросы. SPI реализован аппаратно или программно? Если второе, то о высокой скорости можно забыть. Далее при аппаратной реализации скорость чтения НАПРЯМУЮ определяется настройками тактовой частоты блока SPI. Достаточно просто помножить длительность такта SPI на число бит (24 или сколько там выдает АЦП) и получите время, затрачиваемое на чтение слова. 2. Опять вопросы. А что нужно обрабатывать и как? Может Вы там корреляцию считаете или БПФ, а может нужно просто взять среднее - это совершенно разные по затратам операции и план действий соответственно будет разным. Но в любом случае, если объем данных для передачи после обработки не снижается кординально, то лучше передавать в ПК "как есть", и обработку делать в нём же. Что значит переключение пределов? У Вас интерфейс какой - USB? Или COM? Что мешает передавать в одну сторону данные, а в другую команды на переключение пределов? (одновременно) Если нужно задать определенную комбинацию каналов для опроса, то это можно сделать массивом -передаете массив номеров каналов, в той последовательности, в которой нужно их опросить, и контроллер далее начинает опрос согласно этому порядку. Тем более что каналов у вас, насколько я понимаю, всего 2 :) Работа с АЦП по прерываниям -АЦП завершил преобразование -> попали в прерывание от АЦП -> запустили чтение 3байт SPI ->вышли из прерывания; чтение SPI закончено->попали в прерывание от блока SPI -> скопировали значение из SPI в программный буфер->вышли из прерывания. C портом ВВ- можно и в главном цикле работать. Если что приходит (команда) -изменяете настройки АЦП (согласно команде) между циклами заполнения буфера. Это если 1мс нужно опросить разово. Если нужно непрерывный опрос -тогда 2 буфера "качельки", один заполняется -второй в это время передается в ПК. Это удобней для USB. Если UART -удобнее один кольцевой буфер. Както так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 17 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба 1. Встречные вопросы. SPI реализован аппаратно или программно? Если второе, то о высокой скорости можно забыть. Далее при аппаратной реализации скорость чтения НАПРЯМУЮ определяется настройками тактовой частоты блока SPI. Достаточно просто помножить длительность такта SPI на число бит (24 или сколько там выдает АЦП) и получите время, затрачиваемое на чтение слова. В порядке общего трепа: программный SPI не так уж плох. Помнится, лет пять назад я его гонял на Cypress EZ FX2, получалось около 800 kbps. Писал на С, на Кайле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба В порядке общего трепа: программный SPI не так уж плох. Помнится, лет пять назад я его гонял на Cypress EZ FX2, получалось около 800 kbps. Писал на С, на Кайле. А что ж в нём плохого? Только максимальная скорость от МК ведь зависит. На Меге атора столько не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба получалось около 800 kbps. Писал на С, на Кайле. Это если хорошо представляешь как работает ядро контроллера, для этого надо немного и ассемблером владеть :) А вот если писать на С чисто алгоритмически, не задумываясь об оптимизации можно такого наворотить что ууу... Вот сегодня как раз разгребал чужой г%№*о-код: тоже запись в SPI, программная, сделано на сдвигах. На запись одного бита уходит более 100 команд (точно не считал), а всего передается 24 бита (хотя нужно 21, но кодер не стал заморачиваться такой мелочью). В итоге на весь цикл записи уходит около 1мс, рабочая частота контроллера 20МГц (сравнивая с результатами ТС -у него результат даже чуть лучше). После оптимизации весь цикл стал занимать 33мкс при том что тактовая частота была еще и снижена до 5МГц. Как говорится - почуствуй разницу А использование аппаратного SPI даст тотже результат (а то и лучше) не прикладывая особых умственных усилий. Кстати по моим прикидкам тот же цикл в аппаратной реализации у меня бы вышел за 8,5мкс, т.е в 4 раза лучше чем оптимизированный программный вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
messenger 1 22 августа, 2015 Опубликовано 22 августа, 2015 · Жалоба SPI программный. Скорость взята максимально возможная исходя из рекомендаций производителя ацп. Как я писал выше на обработку получается 10 мкс, это если хотим успеть забарать все данные. А циклы For While сьедают порядка 5 -10 мкс. Если еще добавить приведение к виду напряжения, несколько перемножений и делений числел с точкой (что бы понять на какой предел переключиться) то все сводится к одному измерению. Вот и не пойму как праильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 5 22 августа, 2015 Опубликовано 22 августа, 2015 · Жалоба Правильно - с аппаратным SPI, никаких делений и умножений, только сдвиги и сложения, и работа по прерываниям, а не парсинг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 22 августа, 2015 Опубликовано 22 августа, 2015 · Жалоба Вот и не пойму как праильно Во время работы аппаратного SPI контроллер может обрабатывать предыдущий результат, ну это так, на заметку - времени на умножение/деление с плавающей точкой все равно не хватит. Можно делать проще -есть какойто индикатор переполнения АЦП -ну например один отсчет перевалил за 0.9 шкалы -просто берете и в 2 раза уменьшаете усиление PGA АЦП. Приводить к вольтам не нужно если в самом устройстве не требуется отображать значение в вольтах - просто передаете отсчет АЦП в компьютер, снабдив его значением PGA при котором этот отсчет получен, а комп сам посчитает сколько это будет в вольтах. Задача ведь наверняка использовать по максимуму шкалу АЦП, а не подстраивать ее под какието вольты или амперы, так и меняйте шкалу -для этого достаточно оценивать сами отсчеты без перевода в физические величины. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
messenger 1 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба Ошибся. SPI аппаратный. Как я понял приводить к виду напряжения не нужно. Тогда другой вопрос, а как правильно контролировать флаг готовность, в цикле программно или аппаратно через прерывание? И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 26 августа, 2015 Опубликовано 26 августа, 2015 · Жалоба И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой? Ручками. P.S. Для прикола ради - как мы считали в 80-х ручками объемы и такты на асме i8080 - 580: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 27 августа, 2015 Опубликовано 27 августа, 2015 · Жалоба И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой? Также как и операций фиксированной точки: Делаете короткий цикл, выполняете его N раз (N большое число == тысячи или десятки или сотни тысяч), измеряете длительность цикла по таймеру. Добавляете в цикл исследуемую команду, выполняете его N раз, измеряете длительность цикла по таймеру. Вычитаете первый результат из второго, делите на N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
panther26 0 27 августа, 2015 Опубликовано 27 августа, 2015 (изменено) · Жалоба удалено Изменено 27 августа, 2015 пользователем panther26 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
messenger 1 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Возник еще вопрос. Я правильно понимаю таблицу 13 и 15. Что за 1 мс я получу только 1 измерение? Период обновления 0,21 мс и первые 5 измерений нужно выбросить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
messenger 1 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба на осциллографе DRDY идет с периодом 30 мкс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться