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

"Выкрутасы" из-за нехватки ног

1 2

В схемотехнике на жесткой логике существует такая схема управления триггером (см прилагаемый рисунок).

Нельзя ли на микроконтроллере (ПИК) осуществить нечто подобное?

Я понимаю, можно вывод порта постоянно перенастраивать со входа на выход и ловить нажатие кнопок. Но... нужен выход постоянной 1 или 0 без просечек. Светодиод на выходе изображен условно. Вывод используется для других более серьезных целей.

Нет ли какого-то более изящного решения?
Прошу строго не судить, в МК я еще очень зелен.

 

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

 

Я тоже думаю, что поставить дополнительно регистр было бы корректнее. Например что-то из ИР22/ИР23, записал в него значение и можно делать другие дела по тем же выводам, можно даже несколько таких регистров на один порт поставить. Это, кончно, если некритично наличие дополнительных корпусов.

 

Поразмышляю...
Выявление нажатия на кнопку происходит по изменению уровня на ноге МК. Других вариантов мне не видится. Сами подумайте, если на ноге МК постоянно лог.0 или лог.1, вообще без просечек, то как тогда вообще возможно изменение состояния кнопки отслеживать, которая к этой ноге подключена? Телепатии PIC пока ещё не обучили
К примеру, выход с открытым коллектором (стоком) можно и не перенастраивать на вход. Закрыть транзистор да и всё. Квазидвунаправленный вывод получается. Но для того, чтоб МК отреагировал, изменение уровня на этой ноге всё равно должно произойти, хоть и кратковременно. Чудес не бывает.

Или задача в том, чтоб переключать вывод в то лог. состояние, которое мы на него принудительно подаём кнопкой? Как на схеме в аттаче? Тогда получается, что выход порта должен выдерживать кратковременное короткое замыкание на шину питания или "общий", так, чтоб МК успел уловить изменение уровня на ноге (которая настроена на выход) и переключить выходную защёлку в соответствии с новым уровнем. В этом случае будут дополнительные помехи из-за бросков тока в моменты коротких замыканий. Кроме того, если МК по каким-либо причинам не переключит защёлку своевременно, могут быть неприятности, вплоть до сгорания выходного транзистора порта. Еще и аппаратная защита от одновременного нажатия на 2 кнопки может потребоваться.

 

Ставить дополнительные регистры я не могу, места нет. Если бы было, поставил бы другой МК. Контроллер PIC12F629 - всего 6 активных выводов. Динамической индикации нет. Все выводы задействованы для работы. Все кнопки - принадлежат внешнему устройству, которое подключается к МК для перепрограммирования его функций и запоминания состояния в EEPROM. В штатном режиме МК работает автономно. Я понимаю, что можно было бы в "пульте" поставить еще один МК и организовать последовательную передачу данных в штатный МК по одному проводу, и, наверное, это было бы самое изящное решение. Но тут хочется обойтись "малой кровью". Все уже сделано, программа написана, все работает. Как вдруг потребовалось перепрограммировать еще одну дополнительную функцию, а остался всего один свободный вывод на МК. Всего-то управление ключом. Либо он замкнут, либо разомкнут.

Пока напрашивается такое решение (см. рис.). На короткое время (один раз в 10 мс) вывод переводится в состояние входа. Накопительный конденсатор, висящий на этом выводе устраняет просечки. Возможно ли такое решение? Грамотно ли? Возможно ли сделать проще (лучше)?

 

Задайте себе ряд простых вопросов, глядя при этом на схему.
1. Если в исходном положении на ноге МК лог.0 и пользователь нажимает на "Вкл.", то какое будет напряжение на конденсаторе в тот момент, когда на ноге МК появится лог.1? Транзистор ключа будет при этом закрыт или открыт?
2. Если в исходном положении на ноге МК лог.1 и пользователь нажимает на "Выкл.", то какое будет напряжение на конденсаторе в тот момент, когда на ноге МК появится лог.0? Транзистор ключа будет при этом закрыт или открыт?
3. Какой напрашивается вывод из ответов на предыдущие 2 вопроса?
4. Каковы должны быть соотношения постоянных времени RC-цепочек и времени переключения ноги МК на вход?

 

Хорошо, вы хотите сказать, что времени нахождения вывода в состоянии "на вход" не хватит для того, чтобы конденсатор 100 нФ успел перезарядиться через резистор 1кОм. Постоянная времени 100 мкс. Три постоянных времени 300 мкс. Что ж, действительно долго придется держать вывод в состоянии "на вход". Это вы имели в виду? Плохо - да, но ведь не криминал. Тут действительно идет "игра" на разнице постоянных времени перезаряда конденсатора от кнопок и постоянных времени перезаряда через резисторы 100 кОм в базах транзисторов.

Хорошо, рисуем схему по-другому (см. рис.). Разносим постоянные времени еще больше.

Может кто предложит, как проще все это реализовать?

 

Считаю, что конденсатор подключать прямо к выводу (выходу) микроконтроллера нельзя, опасно. Разрядный (или зарядный) ток конденсатора, в момент переключения выхода с 1 на 0 (или с 0 на 1), превысит максимально допустимый ток выхода микроконтроллера. Плюс ко в сему, в моменты переключения, будут создаваться импульсные радиопомехи.
Только через резистор, а дальше уже что угодно городить, для устранения просечек или выбросов напряжения, на моменты перевода вывода микроконтроллера в состояние входа.

 

Zandy: Это вы имели в виду?
Хорошо, отвечу сам. Поскольку конденсатор подключен в схеме прямо к выводу МК, напряжения на нём и на ноге МК одинаковы. Т.е. если нога была выходом и находилась в лог.0, транзистор ключа был закрыт, затем ногу переключили на вход и нажали кнопку "Вкл". Конденсатор зарядится до напряжения лог.1, что вполне достаточно для открывания транзистора. Открывания напрямую от кнопки, а не от сигнала МК!
Аналогичная грустная картина при лог.1 на выводе МК в первоначальный момент. Конденсатор разрядится до уровня лог.0 и ключ может закрыться. Уловили?
Устройство, наверно, не по первому же выявленному изменению уровня должно срабатывать? Отстройка от дребезга предусматривается? Т.е., допустим, если кнопка была отпущена, а затем оказалась нажатой в течение, скажем, 4 опросов подряд - это и признаётся состоявшимся нажатием? Или не так сделано?

Я бы подключил к ноге МК кнопки через резисторы небольшого сопротивления (эдак по 1 кОм) - одну кнопку на шину питания, другую на "общий". Как и нарисовано на схеме. А вот ключи подключил бы через интегрирующую RC-цепочку - резистор (эдак на 10 кОм) на тот же вывод МК и конденсатор после резистора на "общий", а потом через ещё один резистор на управление ключом. В этом случае кнопки не будут оказывать заметного влияния на напряжение на конденсаторе за те короткие промежутки времени, пока происходит опрос. И состояние ключа будет оставаться неизменным в моменты опроса кнопок.
А входное сопротивление вывода, настроенного на вход, достаточно велико. И лог. уровень на ноге в моменты опроса кнопок, если обе кнопки отпущены, будет определяться напряжением на конденсаторе. Т.е. вход не будет "болтаться в воздухе".

 

picmaniac: Открывания от кнопки, а не от сигнала МК!
picmaniac: Уловили?

Не, не уловил. Если МК в момент состояния вывода, как входа, засек 1, то и в состоянии выхода там станет 1 (ну так программа должна работать).

picmaniac: Я бы подключил к ноге МК кнопки через резисторы небольшого сопротивления (эдак по 1 кОм) - одну кнопку на шину питания, другую на "общий".
Так и есть в моей схеме.

picmaniac: А ключи подключил бы через интегрирующую RC-цепочку - резистор (эдак на 10 кОм) на тот же вывод МК и конденсатор после резистора на "общий", а потом через ещё один резистор на управление ключом.

А вот тут уже большой вопрос. В случае биполярных ключей конденсаторы при открытых тр-ах будут заряжены до 0.6В и это напряжение будет распознаваться МК как лог. 0. Т. е. при ненажатых кнопках устройство всегда будет устанавливать на выходе лог. 0. Надо, чтобы резисторы отличались значительно.

АК: Только через резистор, а дальше уже что угодно городить,

Да, тут я вижу рациональное зерно и совокупляя сказанное picmaniacом и АК переделываю схему окончательно. (см. рис.) Резисторы, последовательно с кнопками - защита "от дурака". Если кому-то вздумается нажать обе кнопки одновременно.

Ну теперь-то то хоть все корректно?