АЦП в AVR (Atmega8)

Обсуждаем контроллеры компании Atmel.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск

Сообщение Volgol_555 »

Мастер Ломастер писал(а):
Volgol_555 писал(а):НО...если я включу АЦП от внутр. источника, то я не смогу делать замер напряжения выше 2.56 В, верно? Если да - мне это не подходит, т.к. мне нужны некоторые выводы АЦП для замера до 5В.
а про делитель напряжения слыхали? можно с его помощью с опорным 2.56 вольт измерять даже до 100 вольт :)))
На счет делителя слыхал и знаю :) . Я имел ввиду напрямую). А вообще за последнюю идею спасибо. Она хороша)
Самое гениальное - всегда самое простое
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

Volgol_555 писал(а):А вообще за последнюю идею спасибо. Она хороша)
вы на счет BANDGAP? так это была первая идея, которую я ТРИЖДЫ пытался донести.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск

Сообщение Volgol_555 »

Мастер Ломастер писал(а):
Volgol_555 писал(а):А вообще за последнюю идею спасибо. Она хороша)
вы на счет BANDGAP? так это была первая идея, которую я ТРИЖДЫ пытался донести.
Прошу прощения за невнимательность - я загружен сильно (устаю)...сразу не понял
Тут возник в разговоре с одним человеком вопрос. Существуют несколько вариантов запуска преобразования. Несколько вот они:
По дефолту ADTS2..0 = 000 и это значит, что преобразование идет в непрерывном режиме. Ну или по ручному запуску.
ADTS2..0 = 001 — запуск АЦП от аналогового компаратора. Удобно блин. Например, чтобы не замерять постоянно входную величину, а запрограммировать компаратор на то, что как только у него вылезет что-либо выше порога, так тут же захватывать это дело на АЦП.
ADTS2..0 = 010 — запуск от внешнего прерывания INT0
ADTS2..0 = 011 — по совпадению таймера T0
ADTS2..0 = 100 — по переполнению таймера Т0
ADTS2..0 = 101 — по совпадению с таймера Т1
ADTS2..0 = 110 — По переполнению таймера Т1
ADTS2..0 = 111 — По событию «захват» таймера Т1
Когда после созданной проги в CVAVR я пишу read_adc(0) - это запуск ручной?
а когда пишу

interrupt [TIM1_COMPA] void timer1_compa_isr(void) // Timer1 output compare A interrupt service routine
{read_adc(0)}

Это запуск по переполнению таймера Т1! Я правильно все понимаю?
Самое гениальное - всегда самое простое
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

Volgol_555 писал(а):Я правильно все понимаю?
нет - все перечисленные способы запуска АЦП, кроме ручного, полностью автоматические и не требующие никаких действий программиста для ЗАПУСКА АЦП. вы же написали ручной запуск по прерыванию таймера.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск

Сообщение Volgol_555 »

Мастер Ломастер писал(а):
Volgol_555 писал(а):Я правильно все понимаю?
нет - все перечисленные способы запуска АЦП, кроме ручного, полностью автоматические и не требующие никаких действий программиста для ЗАПУСКА АЦП. вы же написали ручной запуск по прерыванию таймера.
Просто последний вопрос вытек вот из этих слов:

"Для уменьшения потребляемого тока АЦП, модуль АЦП можно активировать на время измерения передав настройки в соответствующие регистры, а после измерения выключить АЦП записав 0x00 в регистры (это нужно уточнить по datasheet-у верно ли отключать АЦП записью "0" в соответствующие регистры).
Если же преобразование АЦП необходимо выполнять постоянно, то советую задействовать прерывание от АЦП, хочу напомнить что архитектура AVR очень богата всевозможными прерываниями, и неиспользовать их, мягко говоря грех. Если замер АЦП делается стандартной функцией CVAVR то в этой функции 98% ядро МК "тупит" ожидая флага готовности результата, а могло бы позаниматься полезной работой, или уйти в режим ADC reduce noise (вроде так пишется). Тем самым сэкономив драгоценные мВт батареи или аккумулятора."

Так вот. Есть ли какой-то способ уменьшить потребление АЦП, скажем "режим ADC reduce noise". Я для замера АЦП использую стандартную функцию: read_adc(0). Замеряю каждую минуту.
Если я замер не делаю АЦП кушает энергию???
Самое гениальное - всегда самое простое
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

Volgol_555 писал(а):Я для замера АЦП использую стандартную функцию: read_adc(0). Замеряю каждую минуту.
Если я замер не делаю АЦП кушает энергию???
вы процитировали кусок текста и тут же задали вопрос... может, надо повнимательнее прочитать цитируемое? АЦП не кушает энергию, если ВЫКЛЮЧЕН. делаете вы замеры или не делаете - все равно: если АЦП включен, то он кушает.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск

Сообщение Volgol_555 »

Мастер Ломастер писал(а):
Volgol_555 писал(а):Я для замера АЦП использую стандартную функцию: read_adc(0). Замеряю каждую минуту.
Если я замер не делаю АЦП кушает энергию???
вы процитировали кусок текста и тут же задали вопрос... может, надо повнимательнее прочитать цитируемое? АЦП не кушает энергию, если ВЫКЛЮЧЕН. делаете вы замеры или не делаете - все равно: если АЦП включен, то он кушает.
Я наверное не точно поставил вопрос: АЦП я настраиваю CV, АЦП будет всегда включен? Если да, то как его периодически выключать/включать? обычной инициализацией типа
ADMUX=ADC_VREF_TYPE & 0xff; // ADC Voltage Reference: AVCC pin
ADCSRA=0x86; // ADC Clock frequency: 125,000 kHz -
это АЦП включен
ADCSRA=0x00; это АЦП выключен, наверное))
Самое гениальное - всегда самое простое
Контактная информация:
Ответить

Вернуться в «AVR»