Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC AT91SAM7S
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Alexey K
Помогите пожалуйста с таким вопросом.
Если АЦП AT91SAM7S настроен на работу с PDC (3-и канала). имею ли я право считывать отсчеты во время работы PDC.
То есть у меня есть канал A который надо опрашивать с частотой 40 кгц. И есть канал B который надо просто сосчитать раз в 150 ms .
Насколько я понял настроить в режим PDC придется оба канала.
Если обсчитывать канал B произвольно это нарушит работу PDC?
Genadi Zawidowski
Цитата(Alexey K @ May 23 2012, 19:51) *
То есть у меня есть канал A который надо опрашивать с частотой 40 кгц. И есть канал B который надо просто сосчитать раз в 150 ms .

если опрос канала A допускает приостановки раз в 150 мс - понятно - останавливаем, перепрограммируем.
Если требуется непрерывность потока - я бы в таком случае настроил работу по двум каналам - и использовал для медленного канала раз в 150 мс. Ещё и оверсэмплинг можно было бы привернуть.
Alexey K
К сожалению не допускает приостановки во время сбора. То есть 50 мс собирает потом отсылает обработанные данные.
Но дело в том что в других режимам сбор данных менее быстрый, но более длительный. f = 100 Гц и 10 секунд длительность другой крайний случай. И удобно работать по одному отсчету. Так и сделал , но при быстром сборе данных и одновременном приеме УАРТ, возникают моменты когда один отсчет теряется(бит OVERRUN в АЦП) так как операция установки события в RTX довольно длинная. Поэтому придется перейти на PDC.

То есть создаем буффер типа

CODE
typedef adc_sample struct {
unsigned char sampleA;
unsigned char sampleB;
};


adc_sample adc_buf[BUFF_SIZE];


И такой вопрос при настроике PDC BUFF_SIZE указывать в байтах или прямо BUFF_SIZE?
Alexey K
из документации
When a conversion is completed, the resulting 10-bit digital value is stored in the Channel Data
Register (ADC_CDR) of the current channel and in the ADC Last Converted Data Register
(ADC_LCDR).
The channel EOC bit in the Status Register (ADC_SR) is set and the DRDY is set. In the case of
a connected PDC channel, DRDY rising triggers a data transfer request
. In any case, either
EOC and DRDY can trigger an interrupt.
Reading one of the ADC_CDR registers clears the corresponding EOC bit. Reading ADC_LCDR
clears the DRDY bit and the EOC bit corresponding to the last converted channel.


То есть если читать регистр ADC_CDR бит DRDY вызывающий трансфер не очищается, что по идее
не должно приводить к сбою PDC. ( теоретически sm.gif )
Genadi Zawidowski
Сойдёт
Код
sizeof (adc_buf)
Alexey K
Для того чтобы не городить новых тем задам еще один вопрос в этой.
Есть МК AT91SAM7S256 и работаю со встроенным ацп.
Работа строится циклически. То есть оцифровал определенный промежуток времени выдал по UART,
подождал пока все данные не переданы, начал новый цикл.
Заметил такую особенность при первом включении АЦП(старте нового цикла) появляются ложные значения, сильно отличающиеся от реального значения сигнала, следующие отсчеты в порядке (от 1 до 3 отсчетов).

Если кто нибудь сталкивался с такой ситуацией отпишитесь.
hd44780
На этом камне не сталкивался (мало с ним ещё работал), а для мег иногда рекомендуют прямым текстом делать 3 холостых чтения.
Правда это относится к случаю, если Вы канал переключили.
Сергей Борщ
QUOTE (Alexey K @ Oct 9 2012, 08:49) *
при первом включении АЦП(старте нового цикла) появляются ложные значения,
Какое выходное сопротивление у вашего источника сигнала?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.