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

 
 
> Вопрос по АЦП, Free running mode
SasaVitebsk
сообщение Jan 14 2008, 22:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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. Каналы и всё прочее выставляется верно.

Создаётся впечатление, что АЦП не успевает завершить операцию. Но, как я уже писал, при увеличении времени в разы сама ошибка остаётся.

Может я чего не знаю. Может необходимо как то обновить значение. Типа прочитать два раза или что-то ещё.

Я в непонятках.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GDI
сообщение Jan 15 2008, 10:04
Сообщение #2


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Ну может не в даташитах smile.gif но на форуме эта тема поднималась и не раз... и каждый раз все говорили - "ну его ф топку этот фри ран..." smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 15 2008, 10:48
Сообщение #3


Гуру
******

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



Цитата(GDI @ Jan 15 2008, 12:04) *
"ну его ф топку этот фри ран..." smile.gif
Вот и я при чтении даташита пришел к тому же выводу - в режиме FreeRunning, если канал переключается не в прерывании АЦП первое измерение после переключения канала может относится как к старому, так и к новому каналу, поэтому его нужно отбросить. Это логически вытекает из описания и понятно. Но именно в режиме FreeRunning, если канал переключается не в прерывании АЦП, а не просто "При переключении мультиплексора". Поэтому я и уточнил - может есть еще какие-то тонкости.


--------------------
На любой вопрос даю любой ответ
"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
singlskv
сообщение Jan 15 2008, 20:56
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 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, тока нужно научится считать эти такты...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 15 2008, 23:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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. Этим источником может являться к примеру таймер.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 18 2008, 09:36
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 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 заблокированна и очередное
преобразование просто теряется.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 18 2008, 14:26
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(singlskv @ Jan 18 2008, 13:36) *
...сразу же после считывания ADCL и до считывания ADCH.
В этой ситуации запись со стороны ADC к ADCL и ADCH заблокированна и очередное
преобразование просто теряется.

Вообще-то в момент чтения ADCL содержимое ADCH записывается во временный регистр, извините за банальность smile.gif , и таким образом за раз читаются все 16(10) бит.
Было бы нелогично запрещать операции записи результата АЦП до завершения чтения временного регистра.
Вы ничего не путаете?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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   Цитата(_Pasha @ Jan 18 2008, 17:26) Вообщ...   Jan 18 2008, 14:35
|- - Сергей Борщ   Цитата(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


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:07
Рейтинг@Mail.ru


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