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

 
 
> ADC Mega168. Измерение напряжения "наоборот".
Буратино
сообщение Jun 29 2009, 10:53
Сообщение #1


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

Группа: Свой
Сообщений: 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


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jun 29 2009, 12:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Буратино @ Jun 29 2009, 16:53) *
Я не использую никакой обвязки. То есть, на ногах проца имеющих отношение к преобразованию ничего не "висит". Может быть в этом проблема?
AVСС тоже в воздухе. Если измерять напряжение на этом выводе, то там меньше, чем на питании проца.
Все неиспользуемые пины должны быть настроены как GPIO с функцией вывода лог.0. AVCC нельзя отставлять неподключенным ни в коем случае! Либо напрямую к питанию подключить, либо через LC или RC-фильтр.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jun 29 2009, 13:49
Сообщение #3


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

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



Цитата(rezident @ Jun 29 2009, 16:14) *
Все неиспользуемые пины должны быть настроены как GPIO с функцией вывода лог.0. AVCC нельзя отставлять неподключенным ни в коем случае! Либо напрямую к питанию подключить, либо через LC или RC-фильтр.


Присоединил AVCC напрямую к батарее. ADC стал завышать напряжение (что в принципе можно и устранить вычитанием константы), но временами, проскакивают ошибки. laughing.gif

Вот еще что:
если делать несколько циклов "ацепирования", ну например через одну секунду десять раз, то ошибка появляется на первом, втором измерении, а все последующие - ок.

Сообщение отредактировал Буратино - Jun 29 2009, 14:14


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 29 2009, 15:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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"). Про конденсатор в первом посте нет ни слова...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 30 2009, 00:41
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 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.").
Как надоело читать эту глупость... sad.gif
Вам перевести "в предпоследний раз" что там написано ?
Перевод почти дословный:
"Если между преобразованиями сменилось опорное напряжение, то следующее измерение после такого изменения может быть не точным,
и пользователь должен это иметь в виду."

Хде Вы тут увидели смену опоры ? wassat.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 30 2009, 14:18
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 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; <-- пользовать этот результат второго преобразования
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Буратино   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


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 20:05
Рейтинг@Mail.ru


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