|
|
  |
atmega16, четырехканальный usart осциллограф |
|
|
|
Feb 2 2013, 23:06
|
Частый гость
 
Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091

|
Для анализа работы четырех датчиков потребовался многоканальный осциллограф. Не более 5кГц на канал. Этого будет вполне достаточно. Даже можно до 1кГц. Кварц на 7.3728МГц. Информацию требуется передавать по usart (скорость usart до 115200). Думаю передавать так: заголовок начала пакета, 4 байта по 1 байту на канал. Но для этого придется часто переключать каналы АЦП, следовательно придется пропускать от 1 до 3 выборок АЦП. Так я буду терять информацию.
Можно и другой вариант попробовать: 10 байт на 1 канал, 10 на 2 канал... Но за полный период передачи я очень много потеряю информации с первого датчика.
Вопрос: как лучше организовать передачу? Байты потом будут приниматься на компьютере в гипертерминале, или в подобном софте, который может делать лог с ком-порта в файл. Файл этот потом будет обрабатываться либо в excel, либо в матлаб, либо в вольфрам математика. Будут вычленяться каналы, будут строиться графики по этим данным.
Пока что можно даже с двумя датчиками работать. То есть с двумя каналами ацп. Но все же - как лучше организовать передачу?
Сообщение отредактировал Lost_Viking - Feb 2 2013, 23:07
|
|
|
|
|
Feb 3 2013, 05:16
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767

|
Какая разница как передавать и причем здесь компьютер, если вопрос в АЦП. Не хочется терять выборки, ставьте 4 АЦП, и собирайте полную информацию, либо чаще переключайте АЦП. На частоте 5КГц Вас не хватит времени передать данных в течение одной выборки, поэтому будем говорить об 1кГц. Итак время 1ms, за это время надо успеть собрать данные с 4 каналов и передать пакет, заголовок и 4 байта. Пускай заголовок 4 байта. Итого пакет 8 байт или 64 бит. На скорость 115200 ширина бита примерно 9мкс. Передача пакета длиной 64 бит займет 9*64= 576мкс, грубо. То есть за 1ms Вы успеваете отгрузить пакет. Теперь по сбору данных. Кто мешает переключать АЦП 4 раза за 1ms и собирать отсчеты на частоте скажем 5кГц. Никто похоже не мешает. В этом случае 1 отсчет будем занимать 200мкс. 4 канала отстреляются за 800мкс и останется еще 200мкс на переключение между каналами и переходные процессы. В результате Вы получаете реальную скорость снятия данных 1кГц по каждому каналу и отгружаете все каналы одним пакетом непрерывно.
--------------------
улыбаемся ...
|
|
|
|
|
Feb 3 2013, 08:43
|
Частый гость
 
Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091

|
Цитата(adnega @ Feb 3 2013, 11:20)  Если АЦП реально более 8 бит, то можно применить компандирование для расширения динамического диапазона. АЦП 8 бит Цитата(telix @ Feb 3 2013, 09:16)  Кто мешает переключать АЦП 4 раза за 1ms и собирать отсчеты на частоте скажем 5кГц. Никто похоже не мешает. В этом случае 1 отсчет будем занимать 200мкс. 4 канала отстреляются за 800мкс и останется еще 200мкс на переключение между каналами и переходные процессы. В результате Вы получаете реальную скорость снятия данных 1кГц по каждому каналу и отгружаете все каналы одним пакетом непрерывно. Да, вы меня правильно поняли. Я думаю о переходных процессах. А по поводу расчета частоты семплирования - это мне понятно. По даташиту меги при переключении канала стоит пропускать от 1 до 3 выборок. То есть вы хотите сказать, что мне на 1кгц не стоит волноваться о переходных процессах, и пропускать выборки?
|
|
|
|
|
Feb 3 2013, 10:35
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767

|
Цитата(Lost_Viking @ Feb 3 2013, 13:21)  Кстати, стоит ли использовать прерывания от ацп в данном случае? Для отправки и приема данных использую такую конструкцию: while ( !(UCSRA & (1<<RXC)) while ( !(UCSRA & (1<<UDRE))
Соответственно, пока условия истинны программа стоит и ничего не делает. Если использовать прерывание от АЦП, то в это время можно считывать результаты от АЦП. Но часто, чаще чем передаются данные, считывать нет смысла. Если не использовать прерывания, то что-то не пойму... Что же получится... Как правильней? Правильно работать по прерываниям, и использовать аппаратный USART. Программа крутится в пустом цикле, пришло прерывание от АЦП, процессор принял данные сложил в память. А вот дальше начинается самое интересное. Откуда USART узнает где брать пакет или следующий байт? Вот и пускай не сидит в пустом цикле, а отслеживает указатели на массивы. Если данных нет, тогда пустой цикл, если данные есть, тогда процессор запихивает байт в регистр передатчика. Короче основная программа должна выполнять две функции, принимать данные от АЦП, заполнять этими данными массив данных, в простонародье FIFO, и отправлять данные по USART из этого же массива. Заполнение массива идет по прерываниям от АЦП, отгрузка данных тоже по прерываниям от USART по мере готовности передатчика. Ну вот и получаем целую программу. Отработка двух типов прерываний и работа с указателями FIFO. На слух это все воспринять безусловно трудно. Поэтому начните, Вам предстоит долгий гемор, но оно того стоит
--------------------
улыбаемся ...
|
|
|
|
|
Feb 3 2013, 11:44
|
Частый гость
 
Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091

|
Цитата(telix @ Feb 3 2013, 14:35)  На слух это все воспринять безусловно трудно. Поэтому начните, Вам предстоит долгий гемор, но оно того стоит  Едрён-батон! Вы так любезны! Ам.. а есть какие-нибудь примеры, исходники? Ткните меня мордой в... интернет, плиз =)) Хотя я сам сейчас поищу, но может быть есть что-то более перевариваемое. http://mainloop.ru/avr-atmega/avr-uart-fifo-irq.html вроде бы подходит
Сообщение отредактировал Lost_Viking - Feb 3 2013, 12:03
|
|
|
|
|
Feb 3 2013, 11:49
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767

|
Цитата(Lost_Viking @ Feb 3 2013, 15:44)  Ам.. а есть какие-нибудь примеры, исходники? Ткните меня мордой в... интернет, плиз =)) Начните впервую очередь с референс дизайнов на самом сайте Atmel, там куча исходников и примеров. Еще я б поискал на Microchip, там тоже на C полно неплохих исходников.
--------------------
улыбаемся ...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|