реклама на сайте
подробности

 
 
> ADC AT91SAM7S
Alexey K
сообщение May 23 2012, 15:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



Помогите пожалуйста с таким вопросом.
Если АЦП AT91SAM7S настроен на работу с PDC (3-и канала). имею ли я право считывать отсчеты во время работы PDC.
То есть у меня есть канал A который надо опрашивать с частотой 40 кгц. И есть канал B который надо просто сосчитать раз в 150 ms .
Насколько я понял настроить в режим PDC придется оба канала.
Если обсчитывать канал B произвольно это нарушит работу PDC?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Genadi Zawidowsk...
сообщение May 23 2012, 21:49
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(Alexey K @ May 23 2012, 19:51) *
То есть у меня есть канал A который надо опрашивать с частотой 40 кгц. И есть канал B который надо просто сосчитать раз в 150 ms .

если опрос канала A допускает приостановки раз в 150 мс - понятно - останавливаем, перепрограммируем.
Если требуется непрерывность потока - я бы в таком случае настроил работу по двум каналам - и использовал для медленного канала раз в 150 мс. Ещё и оверсэмплинг можно было бы привернуть.
Go to the top of the page
 
+Quote Post
Alexey K
сообщение May 24 2012, 05:39
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



К сожалению не допускает приостановки во время сбора. То есть 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 - May 24 2012, 05:53
Go to the top of the page
 
+Quote Post
Alexey K
сообщение May 24 2012, 12:43
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



из документации
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 )
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 24 2012, 14:51
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Сойдёт
Код
sizeof (adc_buf)
Go to the top of the page
 
+Quote Post
Alexey K
сообщение Oct 9 2012, 05:49
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



Для того чтобы не городить новых тем задам еще один вопрос в этой.
Есть МК AT91SAM7S256 и работаю со встроенным ацп.
Работа строится циклически. То есть оцифровал определенный промежуток времени выдал по UART,
подождал пока все данные не переданы, начал новый цикл.
Заметил такую особенность при первом включении АЦП(старте нового цикла) появляются ложные значения, сильно отличающиеся от реального значения сигнала, следующие отсчеты в порядке (от 1 до 3 отсчетов).

Если кто нибудь сталкивался с такой ситуацией отпишитесь.

Сообщение отредактировал Alexey K - Oct 9 2012, 05:50
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 9 2012, 09:07
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



На этом камне не сталкивался (мало с ним ещё работал), а для мег иногда рекомендуют прямым текстом делать 3 холостых чтения.
Правда это относится к случаю, если Вы канал переключили.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 9 2012, 11:21
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Alexey K @ Oct 9 2012, 08:49) *
при первом включении АЦП(старте нового цикла) появляются ложные значения,
Какое выходное сопротивление у вашего источника сигнала?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016