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

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

1 54 99

AHTOXA: для изменения периода таймерных прерываний
Так у нас же прерывания по сигналу, а не по таймеру.

 

Zandy: Так у нас же прерывания по сигналу, а не по таймеру.

А тайм-аут? Ну или мало ли ещё зачем можно использовать таймер
И потом, заносить 0 в TMR - это ведь сработает только для одного канала. Четырёх TMR нету
Так что без математики никак...

(*шепчет в сторонку*: а вот на Си математика не страшна )

 

Да, написать программу для такого девайса на асме - достаточно трудоёмкая задача.
Поскольку обсуждение устройства, которое предложил Splav56 , уже идёт полным ходом, я всё же решил тоже написать соответствующее техзадание.

Техзадание № 4 (вариант от picmaniac'a)

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

В устройстве применить микроконтроллер PIC16F628(A). Тактовый генератор - с кварцевым резонатором, частота 4 МГц.
Количество входов - 4, количество элементов индикации (светодиодов) - 4, количество выходов - 1. Светодиоды подключить к шине питания. Форма входного сигнала: импульсная последовательность положительной полярности уровня ТТЛ. Скважность от 2 до 12. Дребезг фронтов сигнала считать отсутствующим.

Номинальная частота 25 Гц. Устройство должно срабатывать на сигнал при отклонении частоты от номинала более чем на 4 % как в сторону понижения, так и в сторону повышения (уставки срабатывания на сигнал 24 и 26 Гц). Устройство должно срабатывать на отключение при отклонении частоты от номинала более чем на 10 % как в сторону понижения, так и в сторону повышения (уставки срабатывания на отключение 22,5 и 27,5 Гц). Точность выдерживания уставок по частоте не хуже 0,1 Гц.

Требования к быстродействию: срабатывание должно происходить не ранее чем через 0,1 сек и не позднее чем через 1 сек после первого периода, не укладывающегося в установленные рамки. Возврат - аналогично.

Допустимый диапазон частот на входе, в котором необходимо обеспечить правильную работу устройства: от 10 до 40 Гц.

Обеспечить функционирование устройства следующим образом.

При нормально-допустимом отклонении от номинальной частоты сигнала на входе (не более +-4%) соответствующий индикатор должен светиться непрерывно (нормальный режим).
При аварийно-допустимом отклонении от номинальной частоты сигнала на входе (свыше +-4%, но не более +-10%) соответствующий индикатор должен мигать с частотой 0,5 Гц и скважностью 1,5 (срабатывание на сигнал). Во всех этих случаях на выходе должен сохраняться лог.0

При недопустимом отклонении от номинальной частоты сигнала на входе (свыше +-10%) соответствующий индикатор должен мигать с частотой 2 Гц и скважностью 2 (срабатывание на отключение). Кроме того, в этом случае должна появляться лог.1 на выходе, на всё то время, пока недопустимое отклонение сохраняется. При возвращении частоты сигналов на всех входах в нормально-допустимые рамки - на выходе должен снова появляться лог.0. (требования к быстродействию см. выше)

В случае выхода частоты сигнала на входе за допустимый диапазон работы устройства (ниже 10 Гц или выше 40 Гц) соответствующий светодиод должен быть погашен. Остальные требования в этом случае - как при недопустимом отклонении от номинальной частоты сигнала на входе.

Вмешательство пользователя (оператора) в работу устройства не требуется.

 

picmaniac, вы с одной стороны пишете:

picmaniac: Да, написать программу для такого девайса на асме - достаточно трудоёмкая задача.

а с другой:

picmaniac: В случае выхода частоты сигнала на входе за допустимый диапазон работы устройства (ниже 10 Гц или выше 40 Гц) соответствующий светодиод должен быть погашен. Остальные требования в этом случае - как при недопустимом отклонении от номинальной частоты сигнала на входе.

Т. е. предлагаете добавить еще один диапазон. Зачем же еще-то усложнять?
А чем мой вариант ТЗ не понравился?

Splav56: Единственный вопрос может возникнуть при многоканальной работе в случае синфазности сигналов.
Я тоже не пойму, как обрабатывать 4 канала, если прерывания по входу делать, но picmaniac говорит, что у него "в рукаве какой-то кролик" на этот счет имеется.

 

Понравился, я просто подробно написал, "расширил и углубил".
Добавление допустимого диапазона я считаю необходимостью. Мало ли - остановился двигатель. Или забыли датчик подключить. Или "пошёл вразнос". Окончательное решение по этому вопросу принимать буду не я. Как скажет Splav56, так и будем делать. Я лишь обозначил один из "подводных камней".
Насчёт частоты и скважности мигания. Ну посудите сами, какой вариант наиболее привлекает внимание:

 

Думаю что этот пункт все-таки лишний:
picmaniac: Допустимый диапазон частот на входе, в котором необходимо обеспечить правильную работу устройства: от 10 до 40 Гц.

Эти частоты лежат за границей допустимых значений и устройство и так будет адекватно реагировать на это, отключив исп. мех-м при частотах более Fном + 10% и менее Fном - 10% при помощи управляющего выхода. Для повторного включения должно произойти вмешательство оператора.
Я бы может быть добавил звуковую сигнализацию (двухтональную сирену) к быстрому миганию.
Но если у-во будет работать в автоматическом режиме, то этот пункт нужен.
Решайте. В принципе я не против автономии, если мы не запутаемся в АСМЕ. Если бы писали на mb, то однозначно ЗА.

PS: а почему вместо 5% появились 4%?

 

Это удобней, т.к. 4% = 1 Гц. В принципе, можно и 5% задать.
Предлагаю вопрос о допустимом диапазоне решить в рабочем порядке. Будет несложно сделать - сделаем, будут большие трудности - откажемся. Хотя лично я за то, чтоб учесть допустимый диапазон.
Сирену тоже можно будет добавить позже.
Вмешательство оператора для повторного включения должно произойти в исполнительный механизм, а не в устройство контроля, так?

 

picmaniac: Вмешательство оператора для повторного включения должно произойти в исполнительный механизм, а не в устройство контроля, так?

Естественно.

picmaniac: Это удобней, т.к. 4% = 1 Гц.

Мы же не ищем себе легких путей

 

Хорошая книга: http://is.ifmo.ru/books/switch/6
Респект АНТОХЕ за ссылку.
Думаю, очень пригодится нам вот этот пример: http://is.ifmo.ru/books/switch_djvu2/Pr12.djvu
Распечатаю на работе, почитаю внимательно.

P.S. КРАСОТИЩА!!! Почитайте диалог автора и разработчика на стр.484-485:
http://is.ifmo.ru/books/switch_djvu2/Ch19.djvu
Я уже заинтересован идеей автоматного программирования, причём очень!

 

picmaniac: Я уже заинтересован идеей автоматного программирования, причём очень!
Все это очень здорово, но вы уж нас "сирых и убогих" не бросайте!
Я вот до сих пор не понимаю, как обрабатывать 4 канала, кроме как не по очереди в принудительном порядке. Ну а между обработками со светодиодами валандаться. Каким образом сюда прерывания приплести? Вот если бы мы могли разрешать прерывания отдельно по каждому из входов, тогда бы все было предельно просто.