|
Конфигурация ADC, at91sam7 |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 17)
|
Mar 21 2009, 15:11
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Mar 21 2009, 05:53)  ...Показывает только то, что Вы этот код никогда не использовали и вероятно даже не видели. Мне бы и в голову не пришло сверяться с этим кодом. Для начинающих же я его считаю абсолютно вредным, хуже только книжки Редькина. Цитата(Т.Достоевский @ Mar 21 2009, 15:58)  Ниасилил. В DS есть параметр Track and Hold Acquisition Time >= 600ns, при частоте тактирования АЦП 1.24MHz будет достаточно одного такта на Sample & Hold, т.е. SHTIM можно установить равным нулю.
|
|
|
|
|
Mar 21 2009, 17:26
|

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

|
Цитата(aaarrr @ Mar 21 2009, 17:11)  В DS есть параметр Track and Hold Acquisition Time >= 600ns, при частоте тактирования АЦП 1.24MHz будет достаточно одного такта на Sample & Hold, Стоп. Sample - время выборкки. Т.е. время зарада накопительного конденсатора АЦП до входного напряжения с точностью до 0.5 единицы младшего разряда. Hold - время хранения этого заряда, т.е. время его преобразования в цифру. Атмел, конечно, несколько погорячился объединив эти времена: Цитата Converting a single analog value to a 10-bit digital data requires Sample and Hold Clock cycles [...] and 10 ADC Clock cycles. Время выборки определяется входной емкостью АЦП и сопротивлением источника сигнала плюс проходное сопротивление ключа УВХ. Не зная выходного сопротивления источника сигнала рассчитать время выборки невозможно. Автору вопроса можно посоветовать поставить максимально возможное время. Цитата(Т.Достоевский @ Mar 21 2009, 14:58)  Если у меня частота тактирования АДЦ 1,24 Мгц что соответствует частоте семплирования 102,4кгц. Вы не учитываете время выборки. Частота семплирования будет миниум в 11/10 раз ниже (при одном такте на выборку), т.е. 93КГц.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 21 2009, 17:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Mar 21 2009, 17:11)  Мне бы и в голову не пришло сверяться с этим кодом. Для начинающих же я его считаю абсолютно вредным, хуже только книжки Редькина. Не сверяться с этим кодом, а сверить его с даташитом - проверить его правильность. Вы же пишете что код сомнительный и даже вредный, тем самым автоматически причисляете мой совет - к сомнительным и вредным. Даже не взглянув на код. Так вот такая ни на чем не основанная характеристика, IMHO - сомнительная и вредная. И с ней я не согласен. Уж будьте добры потрудитесь посмотреть на код этой функции и объяснить в чем заключается вред.
|
|
|
|
|
Mar 22 2009, 01:45
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Mar 21 2009, 20:54)  Почему это? Тут ходи, а тут не ходи? Потому что либу пишет не один человек. Следовательно, в ней есть места где можно поучиться, а есть и такие о которых Вы пишете. Цитата Вред не в конкретной функции, а в подходе к освоению процессора. Нельзя это делать "через либу" - не научит ничему. А что мешает сказать то же самое про освоение IP стека? Нельзя это делать через готовую либу - ничему не научит. Тем не менее что-то я мало народу встречал, кто собственноручно с нуля по RFC написал TCP/IP. Как правило большинство пользует либы, многие учатся на uIP, который бесспорно кривой по самые не могу, но это же не значит что он вреден. Сценарий как можно было воспользоваться либой, чтобы чему-то научиться мог бы быть таким. Открываем указанную функцию: Код //*---------------------------------------------------------------------------- //* \fn AT91F_ADC_CfgTimings //* \brief Configure the different necessary timings of the ADC controller //*---------------------------------------------------------------------------- __inline void AT91F_ADC_CfgTimings ( AT91PS_ADC pADC, // pointer to a ADC controller unsigned int mck_clock, // in MHz unsigned int adc_clock, // in MHz unsigned int startup_time, // in us unsigned int sample_and_hold_time) // in ns { unsigned int prescal,startup,shtim; prescal = mck_clock/(2*adc_clock) - 1; startup = adc_clock*startup_time/8 - 1; shtim = adc_clock*sample_and_hold_time/1000 - 1; //* Write to the MR register pADC->ADC_MR = ( (prescal<<8) & AT91C_ADC_PRESCAL) | ( (startup<<16) & AT91C_ADC_STARTUP) | ( (shtim<<24) & AT91C_ADC_SHTIM); } Находим, что SHTIM считается как shtim = adc_clock * sample_and_hold_time / 1000 - 1; Что такое adc_clock понятно без вопросов. sample_and_hold_time в ns дает порядок величины. Из формулы где округление adc_clock идет до единиц Mhz практически сразу ясно что этот параметр не особо важен и м.б. +/- километр. Далее идем в ДШ и делаем поиск по ключевой фразе Sample and Hold Time и попадаем вот сюда: Цитата The user can drive ADC input with impedance up to: • ZOUT ≤ (SHTIM -470) x 10 in 8-bit resolution mode • ZOUT ≤ (SHTIM -589) x 7.69 in 10-bit resolution mode with SHTIM (Sample and Hold Time register) expressed in ns and ZOUT expressed in ohms. Все, вопрос по SHTIM решен. Пользовать функцию или написать свою становится уже делом автора.
|
|
|
|
|
Mar 22 2009, 01:57
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Mar 22 2009, 04:45)  ...в ней есть места где можно поучиться Нет таких, чесслово. Цитата(defunct @ Mar 22 2009, 04:45)  А что мешает сказать то же самое про освоение IP стека? Не надо путать IP стек и дерганье PIO. AT91lib - это набор примитивнейших функций, написать которые самостоятельно не составляет труда (если, конечно, кому-то вообще может понадобиться столь плинтусный уровень абстракции). Даже "сложная" периферия типа USB и EMAC'а в ней обойдена стороной.
|
|
|
|
|
Mar 22 2009, 02:14
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Mar 22 2009, 03:57)  Нет таких, чесслово. Deja vu  AT91F_PDC_ReceiveFrame(). Цитата Не надо путать IP стек и дерганье PIO. Всякая либа создается главным образом для того чтобы экономить время разработчика и ни к чему не обязывает. С такой позиции разницы между либой IP стека и либой для дергания PIO - нет.
|
|
|
|
|
Mar 22 2009, 02:43
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Mar 22 2009, 05:14)  Deja vu  AT91F_PDC_ReceiveFrame(). Ничего умного в ней нет. Работа с PDC очень сильно зависит от типа периферии, пытаться работать с USART, SPI и SSC одним и тем же способом - глупость. Других функций не вспомните? Цитата(defunct @ Mar 22 2009, 05:14)  Всякая либа создается главным образом для того чтобы экономить время разработчика и ни к чему не обязывает. Ну не поможет данная "либа" сэкономить время по причине крайней своей примитивности.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|