Отговори на тема  [ 33 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща
Въпрос за интеръпти на PICльовци. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Cekins написа:
Е сега малко ще те пообъркам ама : тия пикове (до 18 серия включително) имат един (1) вектор на прекъсване. С други думи така или иначе в него се проверява кое от разрешените прекъсвания е настъпило. Ако програмата ти е написана така че след обработка на прекъсване веднага да се връща към основната програма е в сила написаното от колегите, но има вариант в който се проверява флага, изпълнява се ако е необходимо, след което се проверяв следващия флаг и т.н. В този случай ако по време на изпълнение на първото в редицата ти възникне второто и се вдигне флаг, то ще се изпълни и второто след като свърши с първото и т.н. Никога не забравяй да нулираш флага след обработка на прекъсването - става увиснация.


Точно така и направих. Интеръпт процедурата проверява флаговете и на двата интеръпта. :)

Колкото до другото - винаги може да се толерира единия интеръпт за сметка на другия - просто по време на обработка на по-нисшестоящия интеръпт, още в началото (вместо в края) разрешаваш интеръптите от GIE флага. Да, за критични ще има малка грешка, но малка. Ако не - 18 ката си има 2 вектора, с приоритет на единия.

Тия неща ги съобразих, горе-долу. :)


Съб Юли 11, 2009 10:01 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
sparkybg написа:
Колкото до другото - винаги може да се толерира единия интеръпт за сметка на другия - просто по време на обработка на по-нисшестоящия интеръпт, още в началото (вместо в края) разрешаваш интеръптите от GIE флага. Да, за критични ще има малка грешка, но малка. Ако не - 18 ката си има 2 вектора, с приоритет на единия.

Тия неща ги съобразих, горе-долу. :)


не изчетох цялата тема, но ми стана интересно.
Искаш да кажеш че за пик16 в интеръпт частта разрешаваш прекъсванията, докато си в обработка на прекъсване?
и как успяваш да съхраниш важните регистри при входа на прекъсването, без да се препокриват с предходно прекъсване?


Нед Юли 12, 2009 1:25 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Не си прави експерименти да разрешаваш GIE - това е предпоставка за гювеч. Най добре въобще не го пипай на първо време. RETFIE си го прави това нещо.


Нед Юли 12, 2009 10:59 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Ники написа:
...и как успяваш да съхраниш важните регистри при входа на прекъсването, без да се препокриват с предходно прекъсване?


Е, нали си има стек. Сега, евентуалния риск е от препълване на стека, ама това е въпрос на преценка. В случая не съм го направил. Не се налага.


Нед Юли 12, 2009 10:54 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
За кое има стек ? Има стек само за адреса за връщане и то той е с 8 нива. Стека за регистрите е с едно ниво (имам предвид хардуерения) а ако ще се прави софтуерен на 16-ка - то ще отиде половината ресурс на 16-ката само за стека :?


Нед Юли 12, 2009 11:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Cekins написа:
За кое има стек ? Има стек само за адреса за връщане и то той е с 8 нива. Стека за регистрите е с едно ниво (имам предвид хардуерения) а ако ще се прави софтуерен на 16-ка - то ще отиде половината ресурс на 16-ката само за стека :?


Е, това явно ми е убягнало. :)

Ама, какво? Софтуерен ще вземе толкова памет, колкото ти е нужна. Или нещо бъркам?

...и в крайна сметка, за тия заигравки, най-лесно е да се вземе правилния порцесор, щом ще се стига чак до там.


Нед Юли 12, 2009 11:34 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Ми май има нещо такова.
Като казвам ресурс нямам предвид само памет. Още повече, че има ситуации в които трябва да се запазят 7-8 регистъра. И като ги умножиш по 8 примерно, и като добавиш софтуера дето да работи със стека и става една ... Най-често гювеч ставa с регистрите за индиректно адресиране, а те и без това не се пазят в буфер при прекъсване.


Пон Юли 13, 2009 5:07 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
Според мен приемането по серийния бит си прави с полинг, а не с прекъсване, като при приет бит просто си нулирваш таймера. а пък при прекъсване от него значи че нямаш приемане и тогава си нулирваш брояча за приетите битове. именно защото дефакто прекъсването при 16ките е с едно ниво и няма хардуерен стек за регистрите, а само за адреса на връщане, по възможност се прави всичко по силите да се избегнат приоритетни и вложени прекъсвания. иначе се пълни 8 нивовия стек и става рестарт все едно. пълна каша


Сря Юли 15, 2009 6:21 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Няма вложени прекъсвания, а по друг начин не мога са следя порта, защото в останалото време някой трябва да рефрешва дисплея. Тоест може, но трябва да го набутам докато чакам между рефреша на всяка цифра. С прекъсвания обаче е най-просто. Приемането и таймаута са ми в интеръпт процедурата, а рефреша - в най-обикновен безкраен цикъл. Няма презастъпване на интеръпти, понеже в случая не е нужно.


Сря Юли 15, 2009 10:46 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Най-добре според мен е процедурата за обслужването на прекъсванията да се оформи като цикъл, при който условието за изход е да няма повече вдигнати флагове. Извиква се процедурата, тя прави проверка на флаговете, като веднага след проверка на даден флаг, го нулира, изпълнява обслужването на конкретното прекъсване и чак тогава преминава към проверката на следващия флаг. Ако след всички проверки и изпълнения се случи така, че някой флаг е вдигнат, значи е настъпило прекъсване, докато е било обслужвано друго и тогава цикълът се завърта пак.
А ако се случи така, че настъпва прекъсване от същия вид, който се обслужва в момента, значи просто програмата или процесорът са твърде бавни за конкретното приложение. Има и изключения от това правило, разбира се. ;)
Трик: Флаговете, освен че могат да се нулират, могат и да се вдигат. Така можеш принудително да предизвикваш прекъсвания. ;)

_________________
Digitally yours: Optron


Вто Авг 11, 2009 11:49 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Да, добра идея. Това може би е максимума, който може да се извлече, без особени главоболия.

А аз конкретното приложение вече го направих, и работи безгрижно. В случая беше честотомер 0.1 - 999Hz от една страна, и LED дисплей, от друга.За LED дисплея ползвам отделен PICльо - който се грижи за приемането на данните и рефреша. Рефреша е на около 120 херца. Приемането на данните по серийна шина, с интеръпт за всеки clock импулс - интеръпт по промяна на на порт.

Работи, дори дава учудваща стабилност и точност. Пък и тръгна от първия път. Направо да не повярваш. :)


Вто Авг 11, 2009 12:12 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
sparkybg написа:
...

Е понякога се налага да се ползват няколко чипа .... ама не те ли сърби сърбела да го напишеш само за един.


Вто Авг 11, 2009 12:55 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
optron, знаеш ли какво се случва след командата retfie? Това дето си го написал е напълно безсмислено и е загуба на код. Значи след тази пуста команфда проца си вдига GIE, и ако има някой вдигнат флаг от прекъсване пак се връща на вектора за прекъсване. И със сигурност ще изпълни прекъсването по-бързо отколкото ако сканираш в обслужването на прекъсвания за настъпило ново. Модула генериращ прекъсване не е някаква магия а е чисто и просто няколко навързани един след друг AND-а


Вто Авг 11, 2009 1:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
valioman написа:
sparkybg написа:
...

Е понякога се налага да се ползват няколко чипа .... ама не те ли сърби сърбела да го напишеш само за един.


Може. Дори съм го измислил. Тогава обаче ще трябва да ползвам някакви буфери за LED дисплея, иначе ще премигва. Изчислявам честотата по периода и. Там има едно гнусно делене на 32 битови числа.

В случая използвах втори проц, понеже се получи най-компактно. Троен 7-сегментен LED дисплей, от най-малките, дето намерих - 9мм. Трябваше да сбера всичко на възможно най-малката платчица. Наложи се да ползвам 2 платки една върху друга. На едната е проца ("PIC16F627A), 11 резистора, 3 транзистора и 2 кондензатора, а на другата дисплеите, опроводени до 11 извода. Двете платки - вързани с рейка помежду си.

Ей го:
Изображение


Вто Авг 11, 2009 1:15 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Яну 31, 2006 11:11 pm
Мнения: 295
Местоположение: София
Мнение 
Машинката изглежда добре. А пък и щом работи, значи много добре :-)


Вто Авг 11, 2009 1:29 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни