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

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

|
Здравствуйте, господа хорошие. Перечитал я весь форум и охватило меня дикое желание узнать что-то новое в сфере AVR у профи, а не у таких же "знатоков" как я  Итак, от слов к делу: 1) Прерывания.... Знаю, тема больная, перечитал все, что тут есть..... Но.... либо опыта маловато, либо голова моя садовая - не принимает информацию  Объясните на пальцах, что произойдет, если... (везде имеется ввиду Mega16) Произошло прерывание Int1, в нем стоит задержка (ну или какая-то работа выполняется), во время которой происходит событие на порту INT0 (больший приоритет по документации). Далее во время этой же задержки срабатывает прерывание по таймеру-счетчику. Распишите, если не трудно, в каком порядке это все будет отработано.... Возможно как-либо изменить приоритет прерываний ? Какие существуют решения? 2) Каким образом можно посчитать количество времени, затраченного на выполнение определенного куска кода (подпрограммы обработки прерывания допустим) в CVAVR? 3) У Атмела существует такой AppNote - Zero-Detector. Суть (если кто не видел) - соединяем ч/з 1Мом фазу и int0, а так же ноль и землю питания контроллера. Далее через прерывание идет обработка... Дак вот - собрал сначало я со стабилитроном (на всякий пожарный) на 2,5 В. Все бы ничего - но контроллер в прерывание не уходил. На осциллографе все красиво, но видимо Меге мои красоты до..... Стабилитрон убрал - работает. Объясните, почему так оно происходит? При длительной работе без стабилитрона выход контроллера из строя как скоро произойдет? За одно про int0 и тп.... в настройке этого прерывания можно выставлять передний и задний фронты сигналов (выставлял есс-но не я, а CVAVR). У меня есть подозрение, что что-то я делаю не так, ибо на осциллограмме смотрю фазу - ушла вниз, а прерывание на передний фронт сработало. (фазу и ноль не перепутал.... единственное - может меандр уплывает, но двухлучевика нет). 4) Граждане, привидите пример опроса клавиатуры 4x4 матрица... Самый простой, чтобы в глобальную переменную (назовем её key) выводилось значение нажатой клавиши. Делал сам по 2-м алгоритмам.... сначало бегающим нулем с pullup, затем код клавиши вычислял через значения pinX.... Но то ли лыжи не едут..... Надеюсь на Вашу помощь. Извините за сумбурность, писалось это все в 1-27 ночи
Сообщение отредактировал Screw - Nov 29 2006, 22:38
|
|
|
|
|
 |
Ответов
|
Nov 30 2006, 16:38
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Wild007 @ Nov 30 2006, 09:59)  По первому пункту: При входе в пп обработки прерывания снимается флаг I регистра SREG (глобальное разрешение прерываний) и, естественно, если во время обработки прерывания произойдет любое другое прерывание его обработка начнется только после команды RETI в соответстви с его приорететом. В прерывании конечно можно программно разрешить обработку других прерываний (SEI), но вы запутаетесь в разрешениях и нарушится баланс стека, что не есть хорошо. Корректней в пп обработке прерывания надо просто устанавливать какой-то флаг прошедшего преравания и обрабатывать его в главном цикле. Тогда не запутаетесь со стеком и приоретет обработки прерываний вас не будет волновать. Приоритет прерываний установлен жестко логикой работы мс и изменить его програмно не возможно. Вы своим ответом вводите в заблуждение. "Но вы запутаетесь в разрешениях и нарушится баланс стека" - это непереводимая игра слов. Если всё рассчитано правильно, то ничего страшного произойти не может. Вы не запутаетесь потому что Вы не обрабатываете прерывания, а МК не запутается потому что он МК. Его запутать сложно. Если у Вас придёт разрешённое прерывание ещё раз, то это нехорошо  но это недопустимо при любой обработке. Теоритически, наверное, обработать можно если учитывать такую вероятность. Но если такое происходит регулярно, то такая прога не будет работать как при разрешённых, так и при запрещённых прерываниях. То есть здесь надо следовать 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 идёт первой командой низкоприоритетного прерывания (так бывает не всегда). Это для ассемблера. Для Си надо смотреть реальный код.
|
|
|
|
|
Dec 1 2006, 01:35
|

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

|
Цитата(SasaVitebsk @ Nov 30 2006, 16:38)  фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM. С тем же успехом можно заявить - одного уровня достаточно для 99% случаев. Вот и появляется вопрос: зачем ломать, естественным образом полученный, простой механизм синхронизации? Ведь, добавляя второй уровень, добвляется также и ряд проблем связанных с синхронизацией данных. этот вопрос, чуть выше Вы назвали: Цитата это непереводимая игра слов.
|
|
|
|
|
Dec 1 2006, 12:37
|
Гуру
     
Группа: Свой
Сообщений: 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. И проблем не больше чем везде. Кстати всё прекрасно работает и из под Си. Это видно из моего примера.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|