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

 
 
> Много вопросов накопилось... Сильно не глумитесь, ATMega16 & etc
Screw
сообщение Nov 29 2006, 22:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 149
Регистрация: 29-11-06
Из: Барнаул
Пользователь №: 22 916



Здравствуйте, господа хорошие.
Перечитал я весь форум и охватило меня дикое желание узнать что-то новое в сфере AVR у профи, а не у таких же "знатоков" как я unsure.gif

Итак, от слов к делу:

1) Прерывания.... Знаю, тема больная, перечитал все, что тут есть..... Но.... либо опыта маловато, либо голова моя садовая - не принимает информацию wink.gif
Объясните на пальцах, что произойдет, если... (везде имеется ввиду Mega16)
Произошло прерывание Int1, в нем стоит задержка (ну или какая-то работа выполняется), во время которой происходит событие на порту INT0 (больший приоритет по документации). Далее во время этой же задержки срабатывает прерывание по таймеру-счетчику.

Распишите, если не трудно, в каком порядке это все будет отработано....

Возможно как-либо изменить приоритет прерываний ? Какие существуют решения?

2) Каким образом можно посчитать количество времени, затраченного на выполнение определенного куска кода (подпрограммы обработки прерывания допустим) в CVAVR?

3) У Атмела существует такой AppNote - Zero-Detector. Суть (если кто не видел) - соединяем ч/з 1Мом фазу и int0, а так же ноль и землю питания контроллера. Далее через прерывание идет обработка...
Дак вот - собрал сначало я со стабилитроном (на всякий пожарный) на 2,5 В. Все бы ничего - но контроллер в прерывание не уходил. На осциллографе все красиво, но видимо Меге мои красоты до..... Стабилитрон убрал - работает. Объясните, почему так оно происходит? При длительной работе без стабилитрона выход контроллера из строя как скоро произойдет?
За одно про int0 и тп.... в настройке этого прерывания можно выставлять передний и задний фронты сигналов (выставлял есс-но не я, а CVAVR). У меня есть подозрение, что что-то я делаю не так, ибо на осциллограмме смотрю фазу - ушла вниз, а прерывание на передний фронт сработало. (фазу и ноль не перепутал.... единственное - может меандр уплывает, но двухлучевика нет).

4) Граждане, привидите пример опроса клавиатуры 4x4 матрица... Самый простой, чтобы в глобальную переменную (назовем её key) выводилось значение нажатой клавиши.
Делал сам по 2-м алгоритмам.... сначало бегающим нулем с pullup, затем код клавиши вычислял через значения pinX.... Но то ли лыжи не едут.....


Надеюсь на Вашу помощь. Извините за сумбурность, писалось это все в 1-27 ночи wacko.gif

Сообщение отредактировал Screw - Nov 29 2006, 22:38
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Wild007
сообщение Nov 30 2006, 09:59
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



По первому пункту:
При входе в пп обработки прерывания снимается флаг I регистра SREG (глобальное разрешение прерываний) и, естественно, если во время обработки прерывания произойдет любое другое прерывание его обработка начнется только после команды RETI в соответстви с его приорететом. В прерывании конечно можно программно разрешить обработку других прерываний (SEI), но вы запутаетесь в разрешениях и нарушится баланс стека, что не есть хорошо. Корректней в пп обработке прерывания надо просто устанавливать какой-то флаг прошедшего преравания и обрабатывать его в главном цикле. Тогда не запутаетесь со стеком и приоретет обработки прерываний вас не будет волновать. Приоритет прерываний установлен жестко логикой работы мс и изменить его програмно не возможно.

По второму пункту:
Я пишу програмы на ASM в AVR Studio и она позволяет измерить время выполнения любого куска програмы и не было случая что бы время выполнения реальной програмы на реальном железе отличалось от измеренного в STUDIO.


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 30 2006, 16:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Wild007 @ Nov 30 2006, 09:59) *
По первому пункту:
При входе в пп обработки прерывания снимается флаг I регистра SREG (глобальное разрешение прерываний) и, естественно, если во время обработки прерывания произойдет любое другое прерывание его обработка начнется только после команды RETI в соответстви с его приорететом. В прерывании конечно можно программно разрешить обработку других прерываний (SEI), но вы запутаетесь в разрешениях и нарушится баланс стека, что не есть хорошо. Корректней в пп обработке прерывания надо просто устанавливать какой-то флаг прошедшего преравания и обрабатывать его в главном цикле. Тогда не запутаетесь со стеком и приоретет обработки прерываний вас не будет волновать. Приоритет прерываний установлен жестко логикой работы мс и изменить его програмно не возможно.


Вы своим ответом вводите в заблуждение. "Но вы запутаетесь в разрешениях и нарушится баланс стека" - это непереводимая игра слов. Если всё рассчитано правильно, то ничего страшного произойти не может. Вы не запутаетесь потому что Вы не обрабатываете прерывания, а МК не запутается потому что он МК. Его запутать сложно. Если у Вас придёт разрешённое прерывание ещё раз, то это нехорошо smile.gif но это недопустимо при любой обработке. Теоритически, наверное, обработать можно если учитывать такую вероятность. Но если такое происходит регулярно, то такая прога не будет работать как при разрешённых, так и при запрещённых прерываниях. То есть здесь надо следовать Dog Pawlowa и чётко расчитывать производительность контроллера.

Цитата(Screw @ Nov 30 2006, 09:59) *
Из Вашей статьи следует, что возможно сделать только одно прерывание с максимальным приоритетом... Т.е. получится, такая же цепочка из допустимых прерываний, но уже возможен вызов из самих прерываний. Т.о. необходимо разрешить прерывания во всех обработчиках, кроме самого приоритетного - я правильно Вас понял?

Для двух уровней - да. Для трёх - перечитайте - там нет примера, но разжёвано. Как понимать фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

Цитата(Screw @ Nov 30 2006, 09:59) *
Все еще непонятно, будет ли после обработки более высокооуровнего прерывания обработано более низкое по приоритетам...


Естественно. Оно (или они) будет обработано сразу же после завершения обработки высокоуровневого прерывания, в порядке аппаратных приоритетов. М/у этими прерываниями будет выполнятся по одной операции головы. Глубина стека при этом должна быть увеличена и предусматривать возможность вложенных прерываний.
Рассмотрим например вариант когда у Вас три прерывания. Int1, UART, OCR0. Int1 - высокоприоритетное, остальные равные. Тогда в OCR0 и UART необходимо разрешить прерывание. Во всех трёх не должны быть использованы общие переменные или за этим необходимо следить, не должно быть использованы общие ресурсы. Например приходит прерывание от UART (не завершилось) потом Int1 (прервана UART) и во время Int1 - OCR. После завершения Int1 будет выполнена одна команда UART и вызвано OCR, по завершению - завершится UART. Поскольку возможен вариант вложенных вызовов OCR-UART-Int1, то стек должен быть увеличен на сумму стеков этих прерываний. Время реакции самого высокоприоритетного прерывания составит в худшем случае - 4+1+4 если команда sei идёт первой командой низкоприоритетного прерывания (так бывает не всегда). Это для ассемблера. Для Си надо смотреть реальный код.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 1 2006, 01:35
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Nov 30 2006, 16:38) *
фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

С тем же успехом можно заявить - одного уровня достаточно для 99% случаев. Вот и появляется вопрос:

зачем ломать, естественным образом полученный, простой механизм синхронизации?
Ведь, добавляя второй уровень, добвляется также и ряд проблем связанных с синхронизацией данных.

этот вопрос, чуть выше Вы назвали:
Цитата
это непереводимая игра слов.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 1 2006, 12:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(defunct @ Dec 1 2006, 01:35) *
Цитата(SasaVitebsk @ Nov 30 2006, 16:38) *

фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

С тем же успехом можно заявить - одного уровня достаточно для 99% случаев. Вот и появляется вопрос:

зачем ломать, естественным образом полученный, простой механизм синхронизации?
Ведь, добавляя второй уровень, добвляется также и ряд проблем связанных с синхронизацией данных.

этот вопрос, чуть выше Вы назвали:
Цитата
это непереводимая игра слов.



Возможно, отвечая другому, я подумал бы что у Вас мало опыта. Но анализируя другие Ваши топики, понимаю что это не так. Из этого я делаю такой вывод - или область Ваших работ абсолютно не перекрывается с моей (иными словами Вам действительно не требуется то, что мне необходимо ежедневно) либо Вы выработали какой-то свой стиль и подход мне неведомый.

1) Непереводимая игра слов я ответил потому, что она там была. Поясните мне что значит фраза "запутаться" или "нарушить баланс стэка" и какие у Вас проблемы "связанные с синхронизацией данных"?
Ещё раз Вам повторяю. Я с этим работаю постоянно. Никаких проблем нет. По крайней мере у меня.
2) На счёт "второго уровня", давайте банально обратимся к оборудованию. Если бы это было не нужно, то этого нигде или почти негде небылобы. Но это есть аппаратно в x51 (2 уровня) в ARM (8) в других просто не интересовался.

Приведу простой и по моему доступный пример, - приведите своё решение. У меня идёт сигнал со станции 32 кГц(31.25мкс) (АТС С32) где "0" импульс длительностью 2мкс, "1" - длительностью 4мкс. Ч/з 2мкс от среза мне необходимо выдать ответный импульс длительностью 2мкс. Есть прерывание от таймера и USART. Частота 7.3728.

Всё это на уровне ощущений, как и везде в программировании. Я лишнее никогда не добавляю. Я сразу чуствую что можно, а что лишнее. И если получается как-то не так, то чуствую какой-то дискомфорт. Я понимаю что скорее всего уважаемый defunct чувствует что-то вроде этого. То есть ему просто не нравится данное решение. Кажется ему некрасивым. Но это не так! Надо просто попробовать. Там всё Ok. И проблем не больше чем везде. Кстати всё прекрасно работает и из под Си. Это видно из моего примера.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Screw   Много вопросов накопилось... Сильно не глумитесь   Nov 29 2006, 22:35
- - SasaVitebsk   Цитата(Screw @ Nov 29 2006, 22:35) Здравс...   Nov 29 2006, 22:49
|- - Screw   Цитата(SasaVitebsk @ Nov 29 2006, 22:49) ...   Nov 30 2006, 07:08
- - aesok   Цитата3) У Атмела существует такой AppNote - Zero-...   Nov 29 2006, 23:30
- - demaven   И самое главное - обработчик прерываний не должен ...   Nov 30 2006, 07:06
- - otrog   По поводу второго вопроса: Определить время выполн...   Nov 30 2006, 08:50
|- - defunct   Цитата(SasaVitebsk @ Dec 1 2006, 12:37) 1...   Dec 2 2006, 02:03
|- - SasaVitebsk   Цитата(defunct @ Dec 2 2006, 02:03) как м...   Dec 2 2006, 23:58
||- - defunct   Цитата(SasaVitebsk @ Dec 2 2006, 23:58) А...   Dec 3 2006, 02:09
||- - SasaVitebsk   Цитата(defunct @ Dec 3 2006, 02:09) Гм.. ...   Dec 3 2006, 16:02
||- - defunct   Цитата(SasaVitebsk @ Dec 3 2006, 16:02) М...   Dec 4 2006, 17:49
||- - SasaVitebsk   Цитата(defunct @ Dec 4 2006, 17:49) Цит...   Dec 4 2006, 21:39
|- - Сергей Борщ   Пожалуй я тоже вставлю слова, т.к. вложенные преры...   Dec 3 2006, 01:08
- - Dog Pawlowa   Цитата(Screw @ Nov 29 2006, 22:35) Надеюс...   Nov 30 2006, 10:07
- - Screw   Цитата(demaven @ Nov 30 2006, 07:06) И са...   Nov 30 2006, 17:34
|- - Dog Pawlowa   Цитата(Screw @ Nov 30 2006, 17:34) Т.е. и...   Dec 1 2006, 17:26
- - Screw   Вообще что-то сильно я вглубь полез.... Есть у мен...   Nov 30 2006, 17:49
|- - SasaVitebsk   Цитата(Screw @ Nov 30 2006, 17:49) Вообще...   Nov 30 2006, 22:15
|- - IgorKossak   Цитата(Screw @ Nov 30 2006, 16:49) P.S. Д...   Dec 1 2006, 11:51
||- - Dog Pawlowa   Цитата(IgorKossak @ Dec 1 2006, 11:51) Ес...   Dec 1 2006, 16:52
|- - bodja74   Цитата(Screw @ Nov 30 2006, 17:49) Вообще...   Dec 1 2006, 17:28
|- - Screw   Спасибо всем за советы - как чего-нибудь надумаю -...   Dec 1 2006, 19:52
- - Dopler   Если у вас два прерывания, одно по возрастающему ф...   Nov 30 2006, 23:44
- - archi2000   Я думаю, что стабилитрон как ограничитель работать...   Dec 3 2006, 11:56
|- - bodja74   Цитата(archi2000 @ Dec 3 2006, 11:56) Я д...   Dec 3 2006, 14:54
- - Alex_Pol   В сети 310 вольт. Амплитудное значение.   Dec 3 2006, 13:37
- - xemul   И стабилитроны бывают разные. Есть с нормированием...   Dec 3 2006, 14:05
- - Alex_Pol   2 xemul Точно. Были такие 2С133В. Ток стабилизизац...   Dec 3 2006, 14:55
- - archi2000   Автор топика не говорит какой у него стабилитрон. ...   Dec 3 2006, 15:05
|- - xemul   Цитата(archi2000 @ Dec 3 2006, 15:05) Авт...   Dec 3 2006, 16:14
- - demaven   и будем греть плату и все вокруг. Прикинтье кол-во...   Dec 3 2006, 15:24
- - archi2000   Поставим 100 кОм. Но пока не сказано какая точнос...   Dec 3 2006, 15:38
- - archi2000   Итак есть ФАЗА и НОЛЬ. Ноль на вывод земли процесс...   Dec 3 2006, 16:38
|- - xemul   Цитата(archi2000 @ Dec 3 2006, 16:38) Ита...   Dec 3 2006, 16:54
- - archi2000   Да, спасибо за ответы. Я вообще не знаю зачем авто...   Dec 3 2006, 16:59
|- - xemul   Цитата(archi2000 @ Dec 3 2006, 16:59) Да,...   Dec 3 2006, 17:24
- - archi2000   Я бы такое устройство побоялся покупать без гальва...   Dec 3 2006, 19:18
|- - xemul   Цитата(archi2000 @ Dec 3 2006, 19:18) Я б...   Dec 3 2006, 19:36
- - Screw   А тема как оказалось очень живая Спасибо всем за...   Dec 3 2006, 20:33
- - archi2000   Про оптроны и тиристоры можно тут посмотреть. http...   Dec 3 2006, 20:52
- - Screw   Да общий принцип-то понятен.... интересует вся обв...   Dec 3 2006, 22:24
|- - xemul   Цитата(Screw @ Dec 3 2006, 22:24) Да общи...   Dec 3 2006, 22:41
|- - Screw   Цитата(xemul @ Dec 3 2006, 22:41) Цитата(...   Dec 3 2006, 22:57
- - demaven   Последние в списке МОСов переключаются ТОЛЬКО при ...   Dec 4 2006, 06:26
- - xemul   Цитата(demaven @ Dec 4 2006, 06:26) После...   Dec 4 2006, 14:44
- - Screw   Цитата(demaven @ Dec 4 2006, 06:26) После...   Dec 5 2006, 20:57


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:39
Рейтинг@Mail.ru


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