|
ADC Mega168. Измерение напряжения "наоборот". |
|
|
|
Jun 29 2009, 10:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Есть устройство с автономным питанием. Для того ,Чтоб не использовать ключей, делителей и прочей обвязки - измеряю напряжение на аккумуляторе по сл. алгоритму:
AREF = AVCC = Vbat Данные АЦП: N = 1024*Vop/Vbat т.е. Vbat = Vop*1024/N
вот инициализация ADC: void adc_init(void) { ADMUX = (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1); ADCSRB = 0x00; ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0); }
Вот прерывание: #pragma vector= ADC_vect __interrupt void ADC_vect_isr (void) { //conversion complete, read value (int) using... value_ADC=ADCL; //Read 8 low bits first (important) value_ADC|=(int)ADCH << 8; //read 2 high bits and shift into top byte }
В тексте программы: ... __disable_interrupt();adc_init();ADCSRA |= (1<<ADEN); __enable_interrupt(); DelayMs(5); f_bat=(1.22*1024/value_ADC); V_BAT=(f_bat*100); __disable_interrupt();ADCSRA &= ~(1<<ADEN); __enable_interrupt(); ...
не могу понять, почему иногда считает ADC неверно!? Где ошибка? Я не использую никакой обвязки. То есть, на ногах проца имеющих отношение к преобразованию ничего не "висит". Может быть в этом проблема? AVСС тоже в воздухе. Если измерять напряжение на этом выводе, то там меньше, чем на питании проца. Сори за очередные глупые вопросы, но оч. нужна помощь. Спасибо.
Сообщение отредактировал Буратино - Jun 29 2009, 11:06
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
 |
Ответов
|
Jun 29 2009, 13:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(rezident @ Jun 29 2009, 16:14)  Все неиспользуемые пины должны быть настроены как GPIO с функцией вывода лог.0. AVCC нельзя отставлять неподключенным ни в коем случае! Либо напрямую к питанию подключить, либо через LC или RC-фильтр. Присоединил AVCC напрямую к батарее. ADC стал завышать напряжение (что в принципе можно и устранить вычитанием константы), но временами, проскакивают ошибки.  Вот еще что: если делать несколько циклов "ацепирования", ну например через одну секунду десять раз, то ошибка появляется на первом, втором измерении, а все последующие - ок.
Сообщение отредактировал Буратино - Jun 29 2009, 14:14
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Jun 29 2009, 15:12
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Буратино @ Jun 29 2009, 16:49)  Присоединил AVCC напрямую к батарее. ADC стал завышать напряжение (что в принципе можно и устранить вычитанием константы), но временами, проскакивают ошибки. Завышает напряжение, наверное, потому, что согласно DS при MUX3..0=1110 к АЦП подключается 1.1V (Vbg). У Вас же в формуле 1.22 Цитата(Буратино @ Jun 29 2009, 16:49)  если делать несколько циклов "ацепирования", ну например через одну секунду десять раз, то ошибка появляется на первом, втором измерении, а все последующие - ок. То, что в первом измерении неверный результат - ему верить нельзя (в DS об этом прямо сказано: "The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result."). Со вторым неверным - хуже... У Вас REFS10=01 (т.е. "AVCC with external capacitor at AREF pin"). Про конденсатор в первом посте нет ни слова...
|
|
|
|
|
Jun 30 2009, 00:41
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Палыч @ Jun 29 2009, 19:12)  То, что в первом измерении неверный результат - ему верить нельзя (в DS об этом прямо сказано: "The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result."). Как надоело читать эту глупость...  Вам перевести "в предпоследний раз" что там написано ? Перевод почти дословный: "Если между преобразованиями сменилось опорное напряжение, то следующее измерение после такого изменения может быть не точным, и пользователь должен это иметь в виду." Хде Вы тут увидели смену опоры ?
|
|
|
|
|
Jun 30 2009, 14:18
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Jun 30 2009, 03:41)  Перевод почти дословный: "Если между преобразованиями сменилось опорное напряжение, то следующее измерение после такого изменения может быть не точным, и пользователь должен это иметь в виду." Неточный у вас перевод. Не должен иметь в виду, а рекомендуется выбрасывать этот (первый после смены reference) результат измерения. Цитата(Буратино @ Jun 30 2009, 16:29)  все что понял попробовал. BOD у меня включен, после инициализации АЦП делаю паузу, потом запускаю преобразование, но на первых измерениях всегда ошибка. Блин, ну что в ADC может давать такой "фифект"? После выхода из спячки (включения АЦП) сделайте последовательно два измерения, первое выбрасывайте, второе оставляйте. Будет всегда правильно. ADCSRA = (1 < ADEN); ADCSRA |= (1 << ADSC) | (1 << ADIF); while( !(ADCSRA & ADIF)); // <-- дождаться первого результата и выбросить его ADCSRA |= (1 << ADSC) | (1 << ADIF); <<-- еще раз оцифровать while( !(ADCSRA & ADIF)); // <-- дождаться второго результата преобразования result = ADC; <-- пользовать этот результат второго преобразования
|
|
|
|
Сообщений в этой теме
Буратино ADC Mega168. Измерение напряжения "наоборот". Jun 29 2009, 10:53    Палыч Цитата(singlskv @ Jun 30 2009, 03:41) ... Jun 30 2009, 05:36     singlskv Цитата(Палыч @ Jun 30 2009, 09:36) Точнее... Jun 30 2009, 19:03 rezident А в чем заключается ошибка "ацепирования... Jun 29 2009, 15:02 Буратино Цитата(rezident @ Jun 29 2009, 19:02) А в... Jun 29 2009, 17:21  rezident Цитата(Буратино @ Jun 29 2009, 22:58) Нет... Jun 29 2009, 17:23  Палыч Цитата(Буратино @ Jun 29 2009, 20:21) Нет... Jun 30 2009, 06:44 Буратино Чувство такое, будто внутри процессора проходит пе... Jun 29 2009, 18:04 DpInRock В даташите АЦП посвещено нескольк страниц. И те не... Jun 30 2009, 00:56 singlskv Цитата(DpInRock @ Jun 30 2009, 04:56) Стр... Jun 30 2009, 01:09 DpInRock КодAREF = AVCC = Vbat
Тут уже говорилось автору, ч... Jun 30 2009, 07:31 Палыч Цитата(DpInRock @ Jun 30 2009, 10:31) Тут... Jun 30 2009, 07:54 Буратино поставил 10н на AREF, попробовал отключить вообще ... Jun 30 2009, 08:48 Палыч Цитата(Буратино @ Jun 30 2009, 11:48) Пер... Jun 30 2009, 09:18  Буратино Цитата(Палыч @ Jun 30 2009, 13:18) Вы изм... Jun 30 2009, 09:50 DpInRock Относительно чего ПЕРВЫЙ РАЗ? Например, после сбро... Jun 30 2009, 09:59 Буратино Цитата(DpInRock @ Jun 30 2009, 13:59) Отн... Jun 30 2009, 10:26  dimka76 Цитата(Буратино @ Jun 30 2009, 14:26) пер... Jun 30 2009, 10:39 rezident А может кто-то наконец внятно объяснить что и отно... Jun 30 2009, 10:10 Палыч Цитата(rezident @ Jun 30 2009, 13:10) А м... Jun 30 2009, 10:25  rezident Цитата(Палыч @ Jun 30 2009, 16:25) Измеря... Jun 30 2009, 10:35   Палыч Цитата(rezident @ Jun 30 2009, 13:35) Суд... Jun 30 2009, 10:51    Буратино Цитата(Палыч @ Jun 30 2009, 14:51) Кстати... Jun 30 2009, 13:29     Палыч Цитата(Буратино @ Jun 30 2009, 16:29) все... Jun 30 2009, 14:52 dimka76 Цитата(rezident @ Jun 30 2009, 14:10) А м... Jun 30 2009, 10:34 DpInRock Замечание по ходу. Использование ADC_isr в данном ... Jun 30 2009, 17:00 Буратино Код#pragma vector= ADC_vect
__interrupt void ADC_v... Jun 30 2009, 18:49 Палыч Цитата(Буратино @ Jun 30 2009, 21:49) Код... Jul 1 2009, 05:45 DpInRock А у кого вы научились так АЦП опрашивать? Вот отче... Jun 30 2009, 19:32 Буратино Цитата(DpInRock @ Jun 30 2009, 23:32) А у... Jun 30 2009, 20:04 DpInRock Я лично точно также измеряю абсолютное напряжение ... Jun 30 2009, 20:29 dimka76 Вот еще одна шибка.
MUXn и REFS1:0 биты имеют буфе... Jul 1 2009, 08:10 Палыч Цитата(dimka76 @ Jul 1 2009, 11:10) MUXn ... Jul 1 2009, 08:30  dimka76 Цитата(Палыч @ Jul 1 2009, 12:30) Все эти... Jul 1 2009, 08:41   Палыч Цитата(dimka76 @ Jul 1 2009, 11:41) А пос... Jul 1 2009, 08:53 DpInRock Не путайте товарища. Какие еще 70 микросекунд... Ц... Jul 1 2009, 10:13 Палыч Цитата(DpInRock @ Jul 1 2009, 13:13) Не п... Jul 1 2009, 10:30 DpInRock А вот и нет. Цитатаthe reference voltage can be ma... Jul 1 2009, 11:24 Буратино Всем спасибо. Работает
ниже приведу код:
Код...
... Jul 1 2009, 11:29 Палыч Цитата(Буратино @ Jul 1 2009, 14:29) Код.... Jul 1 2009, 12:03  Буратино вот:
Код...
static volatile unsigned int value_AD... Jul 1 2009, 12:46   Палыч Цитата(Буратино @ Jul 1 2009, 15:46) вот:... Jul 1 2009, 15:56    Буратино Цитата(Палыч @ Jul 1 2009, 19:56) А, резу... Jul 1 2009, 16:27     Палыч Цитата(Буратино @ Jul 1 2009, 19:27) Код ... Jul 2 2009, 05:14      Буратино Цитата(Палыч @ Jul 2 2009, 09:14) Плавающ... Jul 2 2009, 06:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|