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

 
 
> Ну совсем детский вопрос по АЦП, запрет-разрешение прерывания
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 19 2010, 07:22
Сообщение #2


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

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



Цитата
Что бы обработать какое либо вложенное прерывание надо дать команду SEI- разрешить прерывания.

.... и получить обработку всех разрешенных на тот момент прерываний. С учетом того, что длительность обработки некоторых прерываний достаточно велика (больше одного символа по SPI), ошибка приема данных в SPI гарантирована.
Мне надо разрешать не все прерывания, а только одно конкретное!
Цитата
если Вы таки попадёте, то ёк , преобразования не будет.

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

Период тактовой АЦП - 8 мкс. При основной 0,125 мкс (8МГц) это 64 исполненные команды. Если учесть, что преобразование запускается по окончании прерывания АЦП, умудриться - запросто!
Цитата
А ADSC сбрасывается сам , в конце преобразования , максимум на 14-й период АЦП.

Понятно, что сам сбрасывается. Но что будет если его сбросить вручную командой?
ADSRA=10000ххх
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 19 2010, 07:52
Сообщение #3


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

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



Цитата(ArtemKAD @ Apr 19 2010, 11:37) *
.... и получить обработку всех разрешенных на тот момент прерываний. С учетом того, что длительность обработки некоторых прерываний достаточно велика (больше одного символа по SPI), ошибка приема данных в SPI гарантирована.
Мне надо разрешать не все прерывания, а только одно конкретное!


Ну эта проблема решаема . Без глобального разрешения прерываний Вам всё равно не куда дется , так уж устроен процессор. Но он предоставляет выбор , с какими прерываниями Вы хотите работать , не нужные можно отключить , просто запретив их в регистрах и оставить разрешения для USART и SPI. Кстати , приоритет обработки тоже существует , может и не придётся отключать лишние.

Цитата(ArtemKAD @ Apr 19 2010, 11:37) *
Не только преобразования, но и прерывания. А по сути - цикл опроса АЦП остановится, что намного хуже простого отсутствия преобразования. sad.gif !


Ну это понятно , не будет преобразования , не будет и прерывания.

Цитата(ArtemKAD @ Apr 19 2010, 11:37) *
Период тактовой АЦП - 8 мкс. При основной 0,125 мкс (8МГц) это 64 исполненные команды. Если учесть, что преобразование запускается по окончании прерывания АЦП, умудриться - запросто! !


Так давайте разберём последовательность 1. Вкл. преобразование 2. Оно само по себе идёт 3. Закончилось -выставляется ADIF. 4. Запускается обработчик прерывания , который элементарно состоит из 4 команд , считать данные с регистров ADC и запихнуть ( например в память SRAM) , + увеличить адрес SRAM ну и команды сохранения в стеке и выталкивания из стека. Всё вы снова в основной программе , хотите запустите снова преобразование , не хотите подождите. Это если в одиночном режиме. Будет время посмотрите SRAM ,что он у Вас там на преобразовал и примите решение.

Цитата(ArtemKAD @ Apr 19 2010, 11:37) *
Понятно, что сам сбрасывается. Но что будет если его сбросить вручную командой?
ADSRA=10000ххх

Честно , говоря я не нашёл инфы по этому поводу , но скорее всего ничего не будет. Если преобразование началось т.е. Вы дали на это добро , то дядьки из Atmel думаю просто фронтом тактового сигнала защёлкнули это разрешение , что бы по окончанию преобразования его самим и сбросить. Не логично было бы оставлять возможность сброса , и что бы мы тогда бы получили в конце - 2, 3 , 4.. разряда АЦП т.е. вместо 1024 измерений , как бог на душу положит. Нет логики .


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
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 17 2010, 19:51
|- - ILYAUL   Цитата(ArtemKAD @ Apr 18 2010, 00:06) ......   Apr 17 2010, 21:41
- - 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 Текстовая версия Сейчас: 29th July 2025 - 23:33
Рейтинг@Mail.ru


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