|
|
|
|
Я предлагаю 7-сегментный индикатор не для мегазамка , а для того, чтобы научиться работать с клавиатурой. Для второго учебного проекта. Насчет алгоритма для замка вообще по-моему еще рано говорить. У нас еще кирпичики не готовы, а уже порываемся дом строить. Не из чего пока. Мегазамок ИМХО может быть проектом № 5, не раньше. Когда будем иметь готовые отлаженные программные модули для работы с клавиатурой, для работы с индикатором, для работы с энергонезависимой EEPROM, и т.п. Модель индикатора для Протеуса была бы очень полезной при отладке программы. Гораздо оперативнее, чем на макете. И к тому же всем доступно - даже тем, у кого реального индикатора нет |
|
|
У меня есть некие вспомогательные схемы.. Пару лет тому назад в Митино была палатка с громкой надписью:"PIC & AVR" ("старожилы" вспомнят... ) В палатке стояли 2 добродушных парня - Саша Шипов и Алексей Савостьянов (если не ошибаюсь..). Я вот иногда у них "затоваривался", задавал им разные вопросы... Они охотно отвечали. Сейчас их там давно уже нет, у них теперь своя серьёзная фирма. Так вот, хочу поделиться информацией по i2c индикаторам, которую они мне в своё время любезно предоставили! http://www.paguo.newmail.ru/shema2.jpg - "монитор" - схема подключения индикатора к PIC-y. http://www.paguo.newmail.ru/shema1.jpg - то же, упрощённый вариант. http://www.paguo.newmail.ru/MONITOR.C - программа для этой схемы (на языке "С") http://www.paguo.newmail.ru/DEMODISP.C - программа, пример индикации фамилии и тлф. создателя бегущей строкой. Две последние ссылки лучше просматривать в кодировке DOS. |
|
|
Что-то совсем тихо тут стало... Предлагаю для начала сделать клавиатуру по простой схеме: http://www.pic16.nm.ru/likbez2/ButtonMatrix5.gif
Программа также получится несложной. RB1,RB2,RB3 - выходы; RB4,RB5,RB6,RB7 - входы. Поочередно выставляем лог.0 на выходах (столбцах) и проверяем состояние входов. RB0 предлагаю пока оставить свободным - он может пригодиться как вход внешнего прерывания INT. Информацию о состоянии кнопок можем обработать и поместить в один байт. Например, так: младшие 4 бита (0-3) соответствуют нажатой цифре, биты 4 и 5 соответствуют состояниям кнопок "*" и "#", два старших бита могут использоваться для информации о том, что нажато более 1 кнопки. Таким образом, появится возможность использовать кнопки "*" и "#" совместно с цифровыми, подобно клавишам "Shift" и "Ctrl" на компьютере. |
|
|
Не сдержался и забросил все дела! Вот моя идея в реализации. Пока без обработки нажатия двух клавиш. Токльо, я так понял, наоборот - RB1,RB2,RB3 - входы; RB4,RB5,RB6,RB7 - выходы В связи с отсуствием макета и Протеуса, не смог нормально протестировать 39346.asm |
|
|
Сергей К: наоборот - RB1,RB2,RB3 - входы; RB4,RB5,RB6,RB7 - выходы Нет, всё написано правильно. Если все кнопки отпущены - то на всех четырех входах будут лог.1 благодаря подтягивающим резисторам. При нажатой кнопке ток пойдет по цепи "плюс - подтягивающий резистор - вход - внешний резистор - нажатая кнопка - диод - выход (лог.0) - минус (он же общий)". И на соответствующем входе появится лог.0. Не стОит спешить с написанием кода. "Ведь дуги гнут с уменьем и не вдруг". Лучше начать с алгоритма - хотя бы для себя, на листке, упрощенно. Когда станет совершенно ясно, что контроллер должен делать в любой ситуации (а для этого полезен граф) - вот тогда правильный код ваять будет легко и приятно.
|
|
|
Allex: adc876proteus.gif - даже из названия рисунка видно, что это сделано в Proteus-е. Причем, это не просто схема, а действующая модель Спасибо.Просто с Proteus'ом не работал, не было пока острой необходимости. Хотя... меня заинтересовали его возможности. Какую версию посоветуете? Интересует не самая свежая, а распространенная, надежная. |
|
|
А в чем преимущество в использовании подтягивающих резисторов в этом варианте? Ведь нажимая на кнопку, мы практически делаем КЗ и весь ток идет через этот резистор. А почему бы не сделать на оборот? RB1,RB2,RB3 - входы; RB4,RB5,RB6,RB7 - выходы. Тогда выставляя "1" поочередно на каждой строке, проверяем состояние колонки. При этом ток через МК будет минимальный (экономим киловатт*часы picmaniac: Не стОит спешить с написанием кода Поспешил |
|
|
Преимущества внутренних подтягивающих резисторов: 1. Не требуются внешние резисторы, а ведь входы всё равно должны быть подтянуты либо к плюсу, либо к минусу. 2. Ток через них очень мал, так что расточительства киловатт не будет. Если сделать наоборот, к чему подтянем 3 входа? И чем? К тому же программа усложнится. Надо будет 4 раза состояние выходов менять, а так только 3. А считываем всё равно одной инструкцией состояние всех 8 разрядов порта, лишние потом замаскируем. В принципе, сделать можем как угодно. Я предлагаю вариант, который считаю оптимальным для начала. |
|
|
picmaniac: будет 4 раза состояние выходов менять, а так только 3 тогда, почему бы не просто поочередно выдавать по линии с1, с2, с3 логическую "1" и считывать, на каких r1, r2, r3, r4 она появилась? В этом случае можно исключить диоды и разделительные резисторы (220 Ом), т.е. оставить только саму матрицу кнопок. |
|
|
...а потом нажать две кнопки и выжечь пару линий порта |
|
|
|
|