Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 57 99

Splav56: Сколько времени займет обработка прерывания? Где гарантия, что по другому входу в это время не придет запрос, который будет проигнорирован, т.к. у нас на время обработки этого прерывания все другие прерывания запрещены
Да не будет он проигнорирован! Если в процессе обработки одного прерывания происходит изменение уровня на входе, то немедленно установится флаг RBIF (аппаратно!!!), и после выхода по retfie произойдет повторный вызов обработчика, где и будет обработано это "отложенное" прерывание.

Zandy: Допустим мы вошли в прерывание по положительному фронту RB6. Находясь в прерывании мы не знаем, по какому сигналу оно произошло. При опросе портов выясняется, что в данный момент и RB4 и RB5 и RB6 находятся в состоянии 1. Так от какого же сигнала произошло прерывание? От RB6, т.к. мы сравним текущее состояние порта и состояние, которое было в предыдущем прерывании (прерывании, которое было непосредственно перед текущим), и выявим, что состояние RB4 и RB5 с тех пор не изменилось. А следовательно, изменилось состояние только RB6 - значит RB6 и есть источник прерывания.

И ещё замечание. Пусть даже обработчик состоит из 100 инструкций и отрабатывает примерно за 100 мкс. Это может внести погрешность из-за "отложенных" прерываний около (0,1*100%)/40 = 0,25 %, что я считаю допустимо. На самый крайний случай у нас есть приличный запас по тактовой частоте - до 20 МГц.

 

picmaniac: и после выхода по retfie произойдет повторный вызов обработчика, где и будет обработано это "отложенное" прерывание.

picmaniac: И ещё замечание. Пусть даже обработчик состоит из 100 инструкций и отрабатывает примерно за 100 мкс. Это может внести погрешность из-за "отложенных" прерываний около (0,1*100%)/40 = 0,25 %, что я считаю допустимо.

ОК! Согласен. Четверть процента допустимо.

 

Камень с души

 

picmaniac: Камень с души

Я не хотел!

 

Всё нормально

 

Принципиальная схема устройства:

 

Наконец-то я догадался. Мы в прерывании не торчим до конца периода, дожидаясь его конца, а выходим из него сразу после считывания таймера и анализа его состояния. Так? Тогда все становится на свой места.
Осталось определиться по скольким периодам будем делать усреднение и можно составлять граф. Вот только граф чего? Мигалки? Для всего остального вроде граф не требуется. И так ясно?

 

Zandy: после считывания таймера и анализа его состояния После считывания уровней на входах, сравнения их с предыдущими, считывания числа из таймера, и вычисления периода для тех входов, на которых засекли фронт импульса.

Zandy: граф не требуется Лишь бы поотлынивать!
Для начала предлагаю нарисовать граф для одного канала. Без особых подробностей пока, таких как организация мигания. Просто изобразить например:
1. входные сигналы - на входе лог.0, на входе лог.1, на входе произошло изменение уровня (и, соответственно, произошло прерывание), переполнение таймера тайм-аута (это внутренний сигнал).
2. выходные сигналы - сброс таймера тайм-аута (это внутренний сигнал), на выходе установить лог.0, на выходе установить лог.1, светодиод не горит, светодиод горит, светодиод мигает с частотой 0,5 Гц, светодиод мигает с частотой 2 Гц.
Тогда мы сможем чётко увидеть, при каких условиях должны происходить переходы из одного состояния в другое, и какие действия при этом должны выполняться.

Организацию мигания предлагаю разобрать позже.

Для того, чтоб двигаться дальше не ощупью, а осмысленно, рекомендую всем распечатать и внимательно изучить Приложение 12 к книге А.А. Шалыто "Switch-технология". http://is.ifmo.ru/books/switch_djvu2/Pr12.djvu

 

picmaniac: рекомендую всем распечатать и внимательно изучить Приложение 12 к книге А.А. Шалыто "Switch-технология". http://is.ifmo.ru/books/switch_djvu2/Pr12.djvu

Распечатал, просмотрел, БОльшую половину не усек. Стал изучать досконально, завис на п.6. Не могу понять по какому принципу строятся конъюнкции: для входящей дуги -z1z2 вершины 1 и исходящей z1-z2 той же вершины, а также для входящей дуги z1-z2 вершины 3 и исходящей -z1z2 той же вершины. (Минус в конъюнкции надо интерпретировать как "инверсия", иначе не напечатать).
В начале примера говорится о разделе 4.4.9 книги, похоже надо распечатывать и читать, а картридж в принтере как назло закончился.

 

picmaniac: переполнение таймера тайм-аута (это внутренний сигнал).
А это еще что такое?
Ну, входные - выходные сигналы понятно. А внутри-то что должно быть? Или прямо стрелочки нарисовать с входного сигнала на выходной?
Приложение я прочитал, но для того, чтобы понять, что там изображено, надо всю книгу читать и изучать. А это, ну как минимум несколько месяцев. Вот так, прямо сходу я разбираться не умею.
picmaniac: Zandy: граф не требуется Лишь бы поотлынивать!
Да не лентяй я, просто не могу я ничего родить, не понимая досконально всей этой "чертовой" теории графов! Вот по готовой программе можно попытаться какие-то процедуры укрупнить и кружочками обвести. А так, насухую...? Или вы предлагаете бросить все и заняться изучением графов? Тогда уж точно "прощай ликбез".