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

 
 
> Ну совсем детский вопрос по АЦП, запрет-разрешение прерывания
ArtemKAD
сообщение Apr 16 2010, 19:47
Сообщение #1


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Не подскажет ли кто такую мелочь. Надо в процессе работы сперва запретить прерывание АЦП, а затем его разрешить. Естественно не трогая биты флага и не перезапуская преобразование. Не подскажет ли кто как это совсем правильно сделать.
Проц - AtMega48 . Смущает - все биты в перемешку в ADCSRA и просто устанавливая/сбрасывая бит можно там цеплять в т.ч. и соседние...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ArtemKAD
сообщение Apr 17 2010, 19:51
Сообщение #2


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



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

Запрет прерывания понадобился в другом прерывании. Точнее в прерывании SPI работающим в Slave-режиме и принимающем длинную колбасу данных. Во время приема проц не может надолго отвлекаться (иначе потеряет байты). Но за время приема всей колбасы он может терять несколько символов принимаемых по USART-у.
В результате в прерывании SPI понадобилось временно запретить все прерывания кроме USART-а, а затем в не критичных местах глобально разрешить прерывания (по сути только USART).

По поводу "зачем вообще по прерыванию" - еще проще. АЦП меряет некоторые величины влияющие на работу всей, достаточно разветвленной программы. Устанавливать в каждом цикле еще и процедуру обработки АЦП - лишний код и тормоза в цикле.
Цитата
ADCSRA=10000xxx; - запрет прерывания
ADCSRA=10001xxx;- разрешение прерывний.
И ничего нигде не испортится.

Вот хорошо-бы кабы так... Смущает бит ADSC . В режиме одиночного преобразование преобразование начинается по первому наростающему фронту тактовой АЦП при установленном ADSC . По моему если вдруг нечаянно сбросить бит ADSC между его установкой и первым фронтом (тактовая проца в несколько раз выше тактовой АЦП), то преобразование может вообще не начаться. А если установить после его прекращения, то оно начнется заново (а с учетом уже стоящего флага - результат может быть весьма хреновый)... К тому-же тут еще и вопрос - а что станется с текущим преобразованием если во время его сбросить ADSC ?

ЗЫ. Зря тему перенесли в раздел "для начинающих". Несмотря на кажущуюся простоту вопрос ДАЛЕКО не так прост...
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 17 2010, 21:41
Сообщение #3


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(ArtemKAD @ Apr 18 2010, 00:06) *
.... По моему если вдруг нечаянно сбросить бит ADSC между его установкой и первым фронтом (тактовая проца в несколько раз выше тактовой АЦП), то преобразование может вообще не начаться.

Ну , это надо ещё умудриться попасть , максимально такой промежуток - один период тактовой частоты АЦП. Но судя по диаграммам, если Вы таки попадёте, то ёк , преобразования не будет. Так как этот бит должен "стоять" всё время преобразования.

Цитата(ArtemKAD @ Apr 18 2010, 00:06) *
А если установить после его прекращения, то оно начнется заново (а с учетом уже стоящего флага - результат может быть весьма хреновый)... К тому-же тут еще и вопрос - а что станется с текущим преобразованием если во время его сбросить ADSC ?

Ну тут , уж как напишите обработку, После преобразования у Вас опять есть, максимум, всё тот же период , когда начнётся новое преобразование , но и + 13 периодов всё той же частоты АЦП. А ADSC сбрасывается сам , в конце преобразования , максимум на 14-й период АЦП.

На P.S. ответить сможет только тот кто перенёс тему blush.gif

З.Ы
Цитата(ArtemKAD @ Apr 18 2010, 00:06) *
Запрет прерывания понадобился в другом прерывании.


Не понадобится , при входе в любое прерывание флаг I регистра SREG сбрасывается, все прерывания запрещены. Что бы обработать какое либо вложенное прерывание надо дать команду SEI- разрешить прерывания. Но судя по всему Вам это как раз и нужно что бы не потерять USART.

Сообщение отредактировал ILYAUL - Apr 17 2010, 22:05


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ArtemKAD   Ну совсем детский вопрос по АЦП   Apr 16 2010, 19:47
- - ILYAUL   Цитата(ArtemKAD @ Apr 17 2010, 00:02) Не ...   Apr 16 2010, 21:08
- - V_G   Скорее всего, ADSC=ADIF=0, остальные флаги считать...   Apr 16 2010, 23:36
- - DpInRock   Цитатаросто устанавливая/сбрасывая бит можно там ц...   Apr 16 2010, 23:37
|- - ILYAUL   Цитата(DpInRock @ Apr 17 2010, 03:52) А в...   Apr 17 2010, 11:14
- - DpInRock   ЦитатаCкорее не совсем так, вот что по этому повод...   Apr 17 2010, 11:21
|- - ILYAUL   Цитата(DpInRock @ Apr 17 2010, 15:36) А в...   Apr 17 2010, 11:52
- - DpInRock   Значит так. Выбросьте это на помойку. И пользуйтес...   Apr 17 2010, 13:21
|- - ILYAUL   Цитата(DpInRock @ Apr 17 2010, 17:36) Зна...   Apr 17 2010, 13:39
- - ArtemKAD   ЦитатаЧто бы обработать какое либо вложенное преры...   Apr 19 2010, 07:22
|- - ILYAUL   Цитата(ArtemKAD @ Apr 19 2010, 11:37) ......   Apr 19 2010, 07:52
- - ArtemKAD   ЦитатаНо он предоставляет выбор , с какими прерыва...   Apr 19 2010, 08:40
- - ILYAUL   Цитата(ArtemKAD @ Apr 19 2010, 12:55) ЗЫ....   Apr 19 2010, 09:59


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

 


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


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