Nikkolaj 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Добрый день. У меня такой вопрос. Работаю с АЦП MCP3301. Управляю им с помощью программного SPI на частоте 400кГц. Аппаратный SPI занят другими задачами. Во время измерения может поступить прерывание, на которое я обязан ответить, и соответственно прервать посылки на MCP3301. Спрашивается, на какое время можно прервать посылки на MCP3301 без потери точности измерения ? В документации сказано, что минимальная частота = 85кГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Вы на мой взгляд уже сами себе и ответили: В документации сказано, что минимальная частота = 85кГц. Вообще идеологически SPI - это синхронный интерфейс и ему пофиг до того какой его частотой тактируют. Диапазон частоты тактирования определяются только возможностями ведомого устройства. Логично предположить что если в документации на ваше АЦП имеется некое ограничение снизу, то его стоит придерживаться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Спрашивается, на какое время можно прервать посылки на MCP3301 без потери точности измерения ? В документации сказано, что минимальная частота = 85кГц. Там же сказано, и чем определяется это ограничение - разрядом конденсаторов УВХ за время измерения. Если уложитесь с преобразованием в 182 мкс, можете считать, что с этой стороны требования ДШ Вы не нарушили. А про возможные дополнительные погрешности от неравномерного тактирования, думаю, даже разработчики этого АЦП без пол-банки ничего не скажут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Предполагаю, что ограничение частоты снизу вызвано не возможностью SPI порта АЦП, а процессом разряда во времени входного конденсатора Сsample, на котором хранится измеряемое напряжение. При минимальной частоте 85кГц цикл измерения будет примерно 150мкс. Думаю что это и есть то время, которое конденсатор держит измеряемое напряжение с достаточной точностью. Я работаю на частоте 400кГц, соответственно цикл измерения у меня будет примерно 30мкс. Получается, что я могу прервать свой цикл измерения в любом месте примерно на 150-30= 120мкс. Но полной уверенности в этом у меня нет, поэтому и спрашиваю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба Во время измерения может поступить прерывание, на которое я обязан ответить, и соответственно прервать посылки на MCP3301. Если запихнуть обработчик программного SPI в таймер (сделать что-то на подобие диспетчера задач), то проблемма уйдет сама собой и ничего прерывать не нужно будет.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 17 мая, 2012 Опубликовано 17 мая, 2012 · Жалоба . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Если запихнуть обработчик программного SPI в таймер (сделать что-то на подобие диспетчера задач), то проблемма уйдет сама собой и ничего прерывать не нужно будет.... Спасибо за ответ, идея действительно красивая и неожиданная для меня. Сейчас просчитывал как её реализовать. К сожалению для этой задачи она не подойдёт по скорости. Сейчас у меня время ожидания между действиями составляет 10-12 машинных тактов. Вставить в это время диспетчер задач не получается. Наверное диспетчер задач применяется для более медленных задач. А вообще предложение интересное, возможно применю его в других задачах. Ещё раз благодарю. to xemul. Спасибо за ответ. Свой предыдущий пост я начал писать до того, как увидел Ваше сообщение, поэтому получилось такое несколько несуразное смещение ответов. Извините. Наши расчёты допустимого прерывания практически совпадают. Это внушает оптимизм. Попробую делать с прерыванием, тем более что его удалось уменьшить, и он будет не больше 10мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 18 мая, 2012 Опубликовано 18 мая, 2012 · Жалоба Спасибо за ответ, идея действительно красивая и неожиданная для меня. Сейчас просчитывал как её реализовать. К сожалению для этой задачи она не подойдёт по скорости. Сейчас у меня время ожидания между действиями составляет 10-12 машинных тактов. Вставить в это время диспетчер задач не получается. Наверное диспетчер задач применяется для более медленных задач. Для программного SPI без ограничений по частоте сверху такое решение избыточно - таймер генерит прерывания в несколько мкс, соизмеримые задержки на обслуживание прерывания, кучка дополнительного кода. Подобное решение в виде конечного автомата (на двух прерываниях - таймера и внешнего входа) удобно использовать, н-р, для ванварного мастера (или слэйва, если частота контроллера позволяет). "Диспетчер задач" звучит гордо, но сводится он в этом случае к таблицам переходов в соответствии с графом автомата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться