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

 
 
> Как инициализировать АЦП в режиме непрерывного преобразования
Sirko
сообщение Jan 31 2013, 15:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Чип Mega48
Инициализирую вот так:
Код
ADCSRA =
    _BV(ADEN)      // Разрешить работу АЦП
  | _BV(ADIE)     // Разрешить прерывания
  | _BV(ADSC)     // Запустить преобразование (первое, дальше автоматом)
  | _BV(ADATE)    // Непрерывные последовательные преобразования, одно за другим.
  | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);     // Делитель частоты на 128
    
ADMUX =
    _BV(REFS0)     // Опорное напряжение AVCC 5V
  | _BV(ADLAR)     // Выравнивание по левому краю
  |  5;            //   Сигнал на вход идет с пятого канала АЦП

ISR(ADC_vect){//-------------------------------------------------------------------------------------
   u16 q = ADCW;
//  ADCSRA &=~_BV(ADIE);
}


Судя по поведению, при попадании в прерывание - выхода от туда нет.
Если в инициализации закоментировать разрешение прерывания АЦП или в обработчике его запретить, то остальной софт функционирует

В чем косяк?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sirko
сообщение Feb 1 2013, 07:36
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Дык вопрос то о том, как "это" ему дать.
Понятное дело, что я что то делаю не так.

Судя из строк "ADIF is cleared by hardware when executing the corresponding interrupt handling vector. " флаг должен сброситься при входе в прерывание, но что-то, где-то не стыкуется.
Go to the top of the page
 
+Quote Post
xemul
сообщение Feb 1 2013, 08:00
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Sirko @ Feb 1 2013, 11:36) *
Понятное дело, что я что то делаю не так.

Угу - включив непрерывное преобразование, пытаетесь работать по прерываниям АЦП. Если Ваша программа в обработчике прерывания проводит время, соизмеримое или большее времени преобразования (программисты иногда вставляют в ISR что-нить вроде delay_ms() или printf()), то ...
Такая комбинация может иметь смысл, н-р, при низкой скорости тактирования АЦП и считывании результата преобразования по ещё более редкому прерыванию таймера, если время запуска преобразования не важно.
Цитата
Судя из строк "ADIF is cleared by hardware when executing the corresponding interrupt handling vector. " флаг должен сброситься при входе в прерывание, но что-то, где-то не стыкуется.

А где написано, что ADIF не может быть установлен, пока программа ковыряется внутри ISR(ADC_vect)? Вот и получается песня про Сусанина "он из лесу вышел, и снова вошёл".

Ещё вариант - разрешено более другое прерывание.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sirko   Как инициализировать АЦП в режиме непрерывного преобразования   Jan 31 2013, 15:35
- - arttab   есть бит в регистре управления ацп включающий авто...   Feb 1 2013, 01:12
- - Sirko   Бит то есть, но при его задействовании нет выхода ...   Feb 1 2013, 06:32
|- - ILYAUL   Цитата(Sirko @ Feb 1 2013, 10:32) нет вых...   Feb 1 2013, 07:11
- - ILYAUL   Так всё и происходит , только при выходе он успева...   Feb 1 2013, 08:04
- - Sirko   Цитатапока программа ковыряется внутри У меня в на...   Feb 1 2013, 09:01
- - doublekey   В даташите на странице 247 написано: КодWhen Auto ...   Feb 1 2013, 19:00
- - ILYAUL   ЦитатаПопробуйте сбрасывать запрос прерывания в об...   Feb 1 2013, 22:05
- - doublekey   Хм, но вот проверил у себя на плате, инициализирую...   Feb 2 2013, 07:39
- - ILYAUL   КодADCSRA = _BV(ADEN); ADCSRA |= _BV(A...   Feb 2 2013, 09:53
- - doublekey   Код e: 80 e8 ldi r24, 0x80; 128 10...   Feb 2 2013, 10:22
- - ILYAUL   А должно быть -2   Feb 2 2013, 11:06
- - doublekey   ILYAUL, так тема про то, что человек написал иници...   Feb 2 2013, 11:45
- - ILYAUL   КодADCSRA = (1<<ADEN)|(1<...   Feb 2 2013, 11:58
- - Sirko   ЦитатаУ него дело не в инициализации. Как оказало...   Feb 4 2013, 13:08


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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 09:52
Рейтинг@Mail.ru


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