roboforum.ru

Технический форум по робототехнике.

АЦП в атмере 8а

Re: АЦП в атмере 8а

boez » 30 мар 2011, 12:30

к561ЛА7 писал(а):выбираем 1й канал опорное 2.56 сдвиг вправо читаем хай
выбираем 4й канал опорное 2.56 сдвиг вправо читаем хай

Право и лево не перепутаны? Если сдвиг вправо, то в high будет всего 2 полезных бита...

Re: АЦП в атмере 8а

к561ЛА7 » 30 мар 2011, 14:48

Сделал так:

Код: Выделить всёРазвернуть
выбираем 1й канал опорное 2.56 сдвиг вправо -ждем завершения АЦп прелобразования - читаем лоу ,читаем хай
выбираем 2й канал опорное питаие сдвиг влево - ждем- читаем лоу, читаем хай
выбираем 3й канал опорное питаие сдвиг влево -ждем- читаем лоу, читаем хай
выбираем 4й канал опорное 2.56 сдвиг вправо -ждем-читаем лоу ,читаем хай


но ничего не изменилось
1 канал читает правильно
2 - правильно
3- правильно
а 4й врет, причем математически неописуемо врет.
Последний раз редактировалось к561ЛА7 30 мар 2011, 15:15, всего редактировалось 1 раз.

Re: АЦП в атмере 8а

dccharacter » 30 мар 2011, 15:11

1. Поменяй местами датчики 1 и 4-й.
2. Попробую делать по два замера на каждом канале.
3. Как ты ждешь окончания ADC-преобразования?

Добавлено спустя 56 секунд:
А, ну можно не менять датчики, а замерить напряжение на них

Re: АЦП в атмере 8а

к561ЛА7 » 30 мар 2011, 15:13

датчики менял, они исправные
по 2 замера делал, правда на врущем канале
жду вот так:

Код: Выделить всёРазвернуть
ADMUX=0b11100100;   //канал 4
ADCSRA.6=1;
while(ADCSRA.4==0);

s_reg4_L=ADCL; // 
s_reg4=ADCH;

Re: АЦП в атмере 8а

dccharacter » 30 мар 2011, 15:37

1. Bits 3:0 – MUX3:0: Analog Channel Selection Bits
The value of these bits selects which analog inputs are connected to the ADC. See Table 22-3
for details. If these bits are changed during a conversion, the change will not go in effect until this
conversion is complete (ADIF in ADCSRA is set) - перед сменой канала вставь еще одну проверку окончанию преобразования
2. Замерь напряжение на датчике прямо в работающей схеме, может быть все-таки что-то коротит или еще что...
3. У тебя выравнивание по левой стороне стоит - так и задумано? (ADLAR = 1)

Добавлено спустя 3 минуты 33 секунды:
In Free Running mode, a new conversion will be started immediately after the conversion completes,
while ADSC remains high. For a summary of conversion times, see Table 22-1.
У тебя отключен Free Running Mode?

Добавлено спустя 13 минут 20 секунд:
И по всему похоже у тебя какой-то баг в коде чтения третьего канала. Из бредовых, которые замыленным глазом не ловятся. Типа ADMUX = 0x11100100;

Re: АЦП в атмере 8а

к561ЛА7 » 30 мар 2011, 15:41

1. проверку не вставил, но перенес этот кусок в конец обработчика прерывания
2. напряжение замерял- одинаковое
3. АДЛАР 1, выравнивание в регистр хай, из него читаем
4 Free Running mode как отключать не знаю, но думаю что этот режим может быть только когда один канал оцифровывается
Последний раз редактировалось к561ЛА7 30 мар 2011, 15:45, всего редактировалось 1 раз.

Re: АЦП в атмере 8а

dccharacter » 30 мар 2011, 15:44

Еще из бредового - проверь, что в третьем канале ты точно читаешь хай.

Re: АЦП в атмере 8а

к561ЛА7 » 30 мар 2011, 15:47

dccharacter писал(а):Еще из бредового - проверь, что в третьем канале ты точно читаешь хай.

в третьем канале читаю и ло и хай, канал меряет правильно.

Re: АЦП в атмере 8а

dccharacter » 30 мар 2011, 15:51

что-то у тебя происходит после третьего канала, а что - непонятно. попробуй читать четвертый канал сразу после первого - поиграйся с порядком, посмотри что и после чего вылетать начинает... переведи 4-й канал на пятный. полностью переинициализируй и промерь 4-й канал несколько раз - не просто с запуском преобразования а с ожиданием окончания преобразования, конфигурацией, запуском и чтением...

Re: АЦП в атмере 8а

к561ЛА7 » 30 мар 2011, 15:59

да вообще чудеса происходят, если его отключить (не измерять), то врать начинает 1й
, а если поменять частоту преобразования АЦП, то измерения не меняются, но начинает врать математика - (я этот канал прибавляю к другому - измеряет 37, а прибавляет 41.

Re: АЦП в атмере 8а

dccharacter » 30 мар 2011, 16:10

Если ты это делаешь в прерывании, то у тебя кто-то меняет значение переменной вне прерывания.

Re: АЦП в атмере 8а

רגוזין רומאן » 30 мар 2011, 16:14

Код: Выделить всёРазвернуть
uint16_t ADC_Value[5];
uint8_t j = 0;

//   62,5kHz
void init_adc (void)
{
   ADCSRA = 0x00;
   ADCSRA |= _BV(ADEN) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
   SFIOR = 0x00;
}

void start_computation (uint8_t channel)
{
   ADMUX = ADMUX & 0xE0;
   switch (channel)
   {
      case 0:{break;}
      case 1:{ADMUX |= _BV(MUX0);break;}
      case 2:{ADMUX |= _BV(MUX1);break;}
      case 3:{ADMUX |= _BV(MUX1) | _BV(MUX0);break;}
      case 4:{ADMUX |= _BV(MUX2);break;}
      case 5:{ADMUX |= _BV(MUX2) | _BV(MUX0);break;}
      case 6:{ADMUX |= _BV(MUX2) | _BV(MUX1);break;}
      case 7:{ADMUX |= _BV(MUX2) | _BV(MUX1) | _BV(MUX0);break;}
      default:{break;}
   }
   ADCSRA |= _BV(ADATE) | _BV(ADSC);
}

ISR (ADC_vect)
{
   if (j<5)
   {
      ADC_Value[j] = ADCL;            //Read 8 low bits first (important)
      ADC_Value[j] |= (int)ADCH << 8;   //read 2 high bits and shift into top byte
      j++;
   }
   else
   {
      ADCSRA |= !_BV(ADATE)
             |= !_BV(ADSC);
      distance_calculation ();
   }
}

Re: АЦП в атмере 8а

к561ЛА7 » 31 мар 2011, 13:34

я учился по курсу АРВ123 и такий стиль програмирования к сожалению не понимаю
ПРишел к выводу что это глюки самой микросхемы - отсоединил все, и все равно ошибка преобразования + ошибка в вичислени. да еще и программа сбивается.


Rambler\'s Top100 Mail.ru counter