|
Вопрос по АЦП, Free running mode |
|
|
|
Jan 14 2008, 22:53
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
При работе с АЦП делаю заранее заданное демпфирование по каналам. То есть порядок выборки каналов у меня постоянно скачет. Это поменять нельзя. АЦП запущено в "Free running mode" и проверяется по таймеру. Время с момента переключения канала и до выборки значения АЦП вдвое превышает означенные 25 тактов (пробовал и увеличивать). По каким-то, для меня непонятным причинам, иногда (достаточно редко) с АЦП в память попадает не текущее значение АЦП (точнее не то, что должно быть), а с предыдущего канала. Причём если я в данной точке останавливаюсь по JTAG, то в АЦП микросхемы вижу правильное значение. Например: Код 127 default: 128 x0=Adc[TekChan].X1=ADCH; // Прочитать значение АЦП \ ??pvPWWLvl1_7: \ 000000B8 91300079 LDS R19, 121 \ ??pvPWWLvl1_9: \ 000000BC 8334 STD Z+4, R19 \ 000000BE 2E23 MOV R2, R19 То есть по databreakpoint останавливаюсь в последней строчке и вижу в АЦП значение FF к примеру, а в ячейку уже занесено 83. Каналы и всё прочее выставляется верно. Создаётся впечатление, что АЦП не успевает завершить операцию. Но, как я уже писал, при увеличении времени в разы сама ошибка остаётся. Может я чего не знаю. Может необходимо как то обновить значение. Типа прочитать два раза или что-то ещё. Я в непонятках.
|
|
|
|
|
 |
Ответов
|
Jan 15 2008, 10:48
|

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

|
Цитата(GDI @ Jan 15 2008, 12:04)  "ну его ф топку этот фри ран..."  Вот и я при чтении даташита пришел к тому же выводу - в режиме FreeRunning, если канал переключается не в прерывании АЦП первое измерение после переключения канала может относится как к старому, так и к новому каналу, поэтому его нужно отбросить. Это логически вытекает из описания и понятно. Но именно в режиме FreeRunning, если канал переключается не в прерывании АЦП, а не просто "При переключении мультиплексора". Поэтому я и уточнил - может есть еще какие-то тонкости.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 15 2008, 20:56
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Сергей Борщ @ Jan 15 2008, 13:48)  Вот и я при чтении даташита пришел к тому же выводу - в режиме FreeRunning, если канал переключается не в прерывании АЦП первое измерение после переключения канала может относится как к старому, так и к новому каналу, поэтому его нужно отбросить. Это логически вытекает из описания и понятно. Ну и где Вы такое прочитали в даташите ? Читаем внимательно: In Free Running mode, always select the channel before starting the first conversion. The channel selection may be changed one ADC clock cycle after writing one to ADSC.Правда это относится только к старту первого преобразования... Еще раз читаем внимательно, разговор о Free Running и выставление флага ADSC касается только первого преобразования... Для подтверждения этой мысли читаем даташит еще чуть подробнее: Note that the conversion starts on the following rising ADC clock edge after ADSC is written.А вот это нам указывает на то что преобразование будет запущенно не в момент когда мы скажем ADSC, а когда наступит этот самый "rising ADC clock edge", тока не нужно расказывать что он придет абсолютно в произвольный момент времени.... Он придет абсолютно синхронно через считаемое количество тактов после ADEN и ADSC, тока нужно научится считать эти такты...
|
|
|
|
|
Jan 15 2008, 23:54
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(singlskv @ Jan 16 2008, 00:56)  Он придет абсолютно синхронно через считаемое количество тактов после ADEN и ADSC, тока нужно научится считать эти такты... Ещё раз обращаю Ваше внимание на то, что ADSC, ADEN, ADIF я вообще не трогал. И согласно даташиту это не требуется (только ADSC и ADEN при инициализации АЦП). И так я работал без особых проблем в других проектах. Я предложил мой расчёт для получения результата. Тем не менее при съёме с периодом 75 тактов АЦП примерно 1 раз в 15 - 20 секунд и более (иногда до нескольких минут) АЦП запущенное на частоте 16М/128=125кГц каким то образом ловило предыдущий канал. Это я установил абсолютно точно. При одиночном запуске я сейчас считываю значение через 50 тактов. Всё работает отлично. Может быть при смене канала требуется дополнительное время? Это, в общем то логично, но я не нашёл такого упоминания в даташите. Может данный режим используется без смены канала? ЗЫ: Кристалл at90can128. Там возможна такая фишка, как задание источника перезапуска АЦП в этом самом FRM. Этим источником может являться к примеру таймер.
|
|
|
|
|
Jan 18 2008, 09:36
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Jan 16 2008, 02:54)  Тем не менее при съёме с периодом 75 тактов АЦП примерно 1 раз в 15 - 20 секунд и более (иногда до нескольких минут) АЦП запущенное на частоте 16М/128=125кГц каким то образом ловило предыдущий канал. Это я установил абсолютно точно. Кстати, тут еще вспомнил один нюансик в работе АЦП. Судя по частоте появления ошибки, возможно Вы натыкаетесь на то, что преобразование заканчивается сразу же после считывания ADCL и до считывания ADCH. В этой ситуации запись со стороны ADC к ADCL и ADCH заблокированна и очередное преобразование просто теряется.
|
|
|
|
|
Jan 18 2008, 14:26
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(singlskv @ Jan 18 2008, 13:36)  ...сразу же после считывания ADCL и до считывания ADCH. В этой ситуации запись со стороны ADC к ADCL и ADCH заблокированна и очередное преобразование просто теряется. Вообще-то в момент чтения ADCL содержимое ADCH записывается во временный регистр, извините за банальность  , и таким образом за раз читаются все 16(10) бит. Было бы нелогично запрещать операции записи результата АЦП до завершения чтения временного регистра. Вы ничего не путаете?
|
|
|
|
|
Jan 18 2008, 14:35
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Jan 18 2008, 17:26)  Вообще-то в момент чтения ADCL содержимое ADCH записывается во временный регистр, извините за банальность  , и таким образом за раз читаются все 16(10) бит. Было бы нелогично запрещать операции записи результата АЦП до завершения чтения временного регистра. Вы ничего не путаете? А где это вы нашли временный регистр для хранения ADCH ? Вы случайно с таймерными 16бит регистрами не путаете ?  Читаем внимательно даташит: Otherwise, ADCL must be read first, then ADCH, to ensure that the content of the data registers belongs to the same conversion. Once ADCL is read, ADC access to data registers is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is read, neither register is updated and the result from the conversion is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is re-enabled.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Вопрос по АЦП Jan 14 2008, 22:53 Baser Может быть там присутствуют наложения циклов АЦП и... Jan 15 2008, 08:38 GDI При переключении мультиплексора, вроде, рекомендую... Jan 15 2008, 08:52 Сергей Борщ Я тоже склоняюсь к мысли, что это биения от несовп... Jan 15 2008, 08:58 xemul Цитата(Сергей Борщ @ Jan 15 2008, 11:58) ... Jan 15 2008, 12:04    pokos Цитата(SasaVitebsk @ Jan 16 2008, 02:54) ... Jan 16 2008, 08:24     SasaVitebsk Цитата(pokos @ Jan 16 2008, 12:24) Ну, во... Jan 16 2008, 11:36   Сергей Борщ Цитата(singlskv @ Jan 15 2008, 22:56) Ну ... Jan 16 2008, 15:19    singlskv Цитата(Сергей Борщ @ Jan 16 2008, 18:19) ... Jan 16 2008, 20:16 pokos Насколько я понимаю процесс жизнедеятельности этог... Jan 15 2008, 14:01 xemul Цитата(pokos @ Jan 15 2008, 17:01) Наскол... Jan 15 2008, 14:32 Сергей Борщ Цитата(pokos @ Jan 15 2008, 16:01) Наскол... Jan 15 2008, 14:36 Anjey_N Хочу тоже задать вопрос!
МК ATmega8, задейств... Jan 15 2008, 17:03 Baser Цитата(Anjey_N @ Jan 15 2008, 19:03) При ... Jan 15 2008, 17:24  Anjey_N Цитата(Baser @ Jan 15 2008, 21:24) Можно ... Jan 15 2008, 17:40 SasaVitebsk Не буду утверждать, так как для каких либо утвержд... Jan 15 2008, 17:46 pokos "ADMUX can be safely updated in the following... Jan 16 2008, 11:49 oran-be Я отжимался со свободным режимом - отлично работае... Jan 16 2008, 18:26 _Pasha В самом первом посте увидел инструкцию STD. У меня... Jan 16 2008, 21:18 _Diman_ Разьясните пожалуйста пару моментов.
13 - 260 ... Jan 16 2008, 21:42 _Pasha Цитата(_Diman_ @ Jan 17 2008, 01:42) По э... Jan 16 2008, 22:09 _Diman_ Небольшоё, аккумулятор-> 510 ом и 0,2uF на земл... Jan 16 2008, 23:20 SasaVitebsk Ещё раз поясняю младший бит не может "отличат... Jan 16 2008, 23:33 IGK Цитата(SasaVitebsk @ Jan 17 2008, 01:33) ... Jan 17 2008, 15:38 SasaVitebsk Сейчас изделие отправили на натурные испытания на ... Jan 17 2008, 17:08 _Pasha Цитата(IGK @ Jan 17 2008, 19:38) Но есть ... Jan 17 2008, 20:14 IGK Цитата(_Pasha @ Jan 17 2008, 22:14) Чушь... Jan 17 2008, 22:47 _Pasha Цитата(singlskv @ Jan 18 2008, 18:35) А г... Jan 19 2008, 04:54 SasaVitebsk Ну это не мой вариант. Я работаю с 8-ми битным реж... Jan 19 2008, 14:18 singlskv Цитата(SasaVitebsk @ Jan 19 2008, 17:18) ... Jan 19 2008, 15:55  _Pasha Цитата(singlskv @ Jan 19 2008, 19:55) Ну ... Jan 19 2008, 19:43   singlskv Цитата(_Pasha @ Jan 19 2008, 22:43) Вы, с... Jan 19 2008, 20:04    _Pasha Цитата(singlskv @ Jan 20 2008, 00:04) Вы ... Jan 19 2008, 20:45 defunct 2 SashaVitebsk.
IMHO считывать АЦП по таймеру нем... Jan 20 2008, 01:56 alux Имею проблему с выводом по UART результата измерен... Apr 15 2008, 08:02 SasaVitebsk А Flags у вас объявлен как volatile?
Просто похоже... Apr 15 2008, 09:19 alux Цитата(SasaVitebsk @ Apr 15 2008, 12:19) ... Apr 15 2008, 12:38  Сергей Борщ Цитата(alux @ Apr 15 2008, 15:38) volatil... Apr 15 2008, 14:07   alux Цитата(Сергей Борщ @ Apr 15 2008, 17:07) ... Apr 15 2008, 16:12 SasaVitebsk Предложу вам другой вариант работы с флагами. Комп... Apr 15 2008, 20:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|