Технический форум по робототехнике.
Goofy » 09 янв 2007, 18:27
Суть проблемы в том, что на выходе со всех задействованых каналов АЦП получаю 0x03FF, то есть максмальные 1023 10 разрядного АЦП...
Мерил напряжения на ножках, оно находиться в пределах соотносимого напряжения (внутренние 2,56В) В VMLAB всё работает корректно. В чём может заключаться этот баг? Быть может дух АЦП покину грешное тело контроллера ? предпосылки к этому вероятны

)
KiCom » 09 янв 2007, 19:28
Какое напряжение на вход АЦП подаешь?
Goofy » 09 янв 2007, 20:48
KiCom писал(а):Какое напряжение на вход АЦП подаешь?
На входе в момент тестов напряжение в пределах 0,5В, вольтметром проверено.
-= Александр =- » 09 янв 2007, 20:57
Какое устанавливаешь ADMUX для каждого из каналов и к чему припаяны AVCC и AREF? Какая на них обвязка?
Goofy » 09 янв 2007, 21:46
-= Александр =- писал(а):Какое устанавливаешь ADMUX для каждого из каналов и к чему припаяны AVCC и AREF? Какая на них обвязка?
ADMUX в соответствие внутреннему соотносимому 2,56 В и биты в соответсвие каналу, говорю же в эмуляторе работает.
AVCC тоже что и Vcc AREF не подключён. AVCC через индуктивность, с конденсатором на землю. AREF оставлен без кондёра, вроде как не "по уставу", но работало на меге128.
код не совсем наглядный, тк преобразование начинается с ADC6, а потом последовательно от ADC3 к ADC0
- Код: Выделить всё • Развернуть
// запускаем последовательность так
ADCdone=0;
i=0;
ADMUX=_BV(REFS1)|_BV(REFS0)|0x06; // starting from battary voltage
sbi(ADCSRA,ADSC);
далльше анализируем по прерыванию
SIGNAL(SIG_ADC)
{
if (i==0)
{ADCData[0]=(ADCH<<8) + ADCL;
ADMUX=_BV(REFS1)|_BV(REFS0)|0x03; // next will be ADC3
sbi(ADCSRA,ADSC);
i++;
} else
{
ADCData[i]=(ADCH<<8) + ADCL;
i++;
if (i>4) {ADCdone=1;} else {ADMUX=_BV(REFS1)|_BV(REFS0)|(0x04 - i);sbi(ADCSRA,ADSC); }
}
}
Последний раз редактировалось
Goofy 09 янв 2007, 21:59, всего редактировалось 2 раз(а).
D-M » 09 янв 2007, 21:52
Goofy писал(а):AVCC тоже что и Vcc AREF не подключён. AVCC через индуктивность, с конденсатором на землю. AREF оставлен без кондёра.

:shock: :shock:
вы не чего непутаете?
AVCC через индуктивность к +5 обычно
и какже без опорного напряжения
или я что-то не так понял
Goofy » 09 янв 2007, 22:27
D-M писал(а):Goofy писал(а):AVCC тоже что и Vcc AREF не подключён. AVCC через индуктивность, с конденсатором на землю. AREF оставлен без кондёра.

:shock: :shock:
вы не чего непутаете?
AVCC через индуктивность к +5 обычно
и какже без опорного напряжения
или я что-то не так понял
всё правильно к +5 но через индуктивность. Устав твердит что так будет меньше шуму. Опорное напряжения подключается внутреннее, то есть 2,56В
-= Александр =- » 09 янв 2007, 23:06
При внутреннем опорном требуется заземлить AREF кондером, желательно даже электролитом...
Читай даташит про ADCSRA - точно где-то в нем ошибка. Или прерывание не разрешил или вообще АЦП не включил...
Кстати могло и сгореть АЦП - у меня уже было такое, что один из каналов сгорел...
D-M » 10 янв 2007, 01:52
Goofy писал(а):D-M писал(а):Goofy писал(а):AVCC тоже что и Vcc AREF не подключён. AVCC через индуктивность, с конденсатором на землю. AREF оставлен без кондёра.

:shock: :shock:
вы не чего непутаете?
AVCC через индуктивность к +5 обычно
и какже без опорного напряжения
или я что-то не так понял
всё правильно к +5 но через индуктивность. Устав твердит что так будет меньше шуму. Опорное напряжения подключается внутреннее, то есть 2,56В
я так и не понял вы AREF куда присоединили к земле или +5 ? :oops:
Goofy » 10 янв 2007, 07:28
D-M писал(а):я так и не понял вы AREF куда присоединили к земле или +5 ? :oops:
Никуда! Для того чтобы воспользоваться опорным напряжением внутри микрухи в 2.56, AREF не подключается или подключается к кер. конденсатору который висит на "земле" для лучшей помехозащиты.
Goofy » 10 янв 2007, 07:38
-= Александр =- писал(а):При внутреннем опорном требуется заземлить AREF кондером, желательно даже электролитом...
Читай даташит про ADCSRA - точно где-то в нем ошибка. Или прерывание не разрешил или вообще АЦП не включил...
Кстати могло и сгореть АЦП - у меня уже было такое, что один из каналов сгорел...
Говорю же в ЭМУЛЯТОРОЕ РАБОТАЕТ, причём как нада (движками в ВМЛАБ меняется напряжение на каналах). К тому же в пустом инициализированном массиве откуда взятся 0x03FF с моим алгоритмом. Уж работают прерыватья чтобы записать то 0x03FF с регистров на выходе с АЦП. А это уже резуальтат в реале, который лезет в мир через терминалку!
- Код: Выделить всё • Развернуть
void InitADC ()
{
sbi(ADCSRA,ADEN); // ADC Enable
sbi(ADCSRA,ADIE); // Interrupt Enable
sbi(ADCSRA,ADPS2); // 4 vmlab
sbi(ADCSRA,ADPS1);
sbi(ADCSRA,ADPS0);
}
А все каналы сразу то почему отказали ?

по всем идёт 1023
avr123.nm.ru » 10 янв 2007, 10:17
пока уберите переключение каналов и разберитесь с одним - так проще.
Goofy » 10 янв 2007, 19:37
Суть косяка была в том, что сначала должно читаться ADCL, а потом тока ADCH.
То есть теперь запись в массив выглядит так:
- Код: Выделить всё • Развернуть
ADCData[i]=ADCL + (ADCH<<8);
Две строчки в датащите и столько гимора без ведения о них

Хоть восклицания поставили бы...
avr123.nm.ru » 13 янв 2007, 11:59
Goofy писал(а):Суть косяка была в том, что сначала должно читаться ADCL, а потом тока ADCH.
а ... понятно ... т.е. задачу 11 курса
avr123.nm.ru/06.htm не читали.
И примеры C:\CVAVR\examples не смотрели.
А тобы читали бы результат из ADCW
и CVAVR автоматически прочитал
регистры в правильном порядке.
Рекомендую прочитать все же курс на будущее.
Goofy » 13 янв 2007, 17:37
avr123.nm.ru писал(а):Goofy писал(а):Суть косяка была в том, что сначала должно читаться ADCL, а потом тока ADCH.
а ... понятно ... т.е. задачу 11 курса
avr123.nm.ru/06.htm не читали.
И примеры C:\CVAVR\examples не смотрели.
А тобы читали бы результат из ADCW
и CVAVR автоматически прочитал
регистры в правильном порядке.
Рекомендую прочитать все же курс на будущее.
Предела у Вашей навязчивости, пожалуй, не существует

))
Я работаю с ВинАВР