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

 
 
> Вопрос по АЦП, 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
Ответов
alux
сообщение Apr 15 2008, 08:02
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Имею проблему с выводом по UART результата измерения АЦП (Mega48, 20Мгц), работающего в free running mode. Настроен только на измерение с одного канала. Синхронизация передачи значения АЦП в BCD формате по UART осуществляется в главном цикле по флагу DISPLAY. UART работает с использованием прерывания (avr306 - interrupt controlled UART). В программе еще используется прерывание от таймера1 (вызывается через 10 мсек), в котором осуществляется динамическая индикация и обработка кнопок.
Код
void Initialise(void)
{
.................
  //ADC initialisation:
  ADMUX=(1<<REFS1)|(1<<REFS0);//Установка Photo_Channel (ADC0),  
                     //Internal 1.1V Voltage Reference with external capacitor at AREF pin
  //Старт непрерывного преобразования с частотой 156,25 кГц, Предделитель = 128,
  //Разрешить прерывание АЦП
  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}

////////////////////////////////////////////////
void main(void)
{
  Initialise();          
  __enable_interrupt();
  for(;;)
  {
    if(Flags&DISPLAY)
    {
      itoa(tmp, buf2);
      TransmitByte(*(buf2+0)+'0');
      TransmitByte(*(buf2+1)+'0');
      TransmitByte(*(buf2+2)+'0');
      TransmitByte(*(buf2+3)+'0');
      TransmitByte(13);   //CR
      TransmitByte(10);   //LF
//     delay_ms(250);
      Flags &= ~DISPLAY;
    }
   __sleep();   //Idle mode
  }
}

//////////////////////////////
#pragma vector=ADC_vect
__interrupt void ADC_ISR(void)
{
  acum += ADC;

  if(++SampleCounter == max)
  {
    value = acum/max;
    SampleCounter=0;
    acum=0;
    
      if(!(Flags&DISPLAY))
      {
        tmp = value;
        Flags |= DISPLAY;
      }
  }
....
}

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

0031
0031
0030
0000
0000
0000
0031
0031
0030
0000
0000
0000

Если остановить таймер1, то выводит то, что положено - без нулей. Если запустить таймер1 и после очередной отправки результата по UART вставить задержку 250ms (в приведенном коде закомментирована), то выводит также без нулей. При уменьшении задержки до 100ms начинают вылазить нули.
Почему так происходит?

PS. Выводить результат на UART нужно максимально быстро. Single Mode не предлагать.
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
- - GDI   Ну может не в даташитах но на форуме эта тема под...   Jan 15 2008, 10:04
|- - Сергей Борщ   Цитата(GDI @ Jan 15 2008, 12:04) "ну...   Jan 15 2008, 10:48
|- - singlskv   Цитата(Сергей Борщ @ Jan 15 2008, 13:48) ...   Jan 15 2008, 20:56
|- - SasaVitebsk   Цитата(singlskv @ Jan 16 2008, 00:56) Он ...   Jan 15 2008, 23:54
||- - 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   Цитата(SasaVitebsk @ Jan 16 2008, 02:54) ...   Jan 18 2008, 09:36
||- - _Pasha   Цитата(singlskv @ Jan 18 2008, 13:36) ......   Jan 18 2008, 14:26
||- - 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
- - 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 - 23:37
Рейтинг@Mail.ru


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