Кодовый замок на микроконтроллере AVR (BASCOM AVR) - Защита и контроль - Микроконтроллеры - Каталог статей - Собери свою радиосхему! Сайт радиолюбителей.
Вторник, 22.11.2016, 14:05 Приветствую Вас Гость

Чебоксары

Главная | Регистрация | Вход | RSS

Каталог статей

Главная » Статьи » Микроконтроллеры » Защита и контроль

Кодовый замок на микроконтроллере AVR (BASCOM AVR)


Решил поиграться с давно заказанной с китая мембранной клавиатурой 3x4. Есть много видов и разновидностей данной клавиатуры, есть в пластмассовых корпусах, а есть пленочные. У моего вариант 3x4 7 контактов, распиновка клавиатуры 4x4 показана на схеме ниже, схема один к одному. Схема почти идентична с клавиатурой 3x4 за исключением того что отсутствует правый ряд клавиш "A,B,С,D". 

Схема подключения клавиатуры 3x4 :

Клавиатура 4x4 подключается аналогично, четвертый ряд "A,B,С,D" подключается к порту PD7 микроконтроллера. 

Исходный код программы:

$regfile = "m8def.dat"
$crystal = 1000000

'конфигурация дисплея
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls

'конфигурация клавиатуры
Config Kbd = Portd , Debounce = 40 , Delay = 100

 

'переменные
Dim Key_char As Byte                                        'номер нажатой клавиши
Dim Key_str As String * 1                                   'символ нажатой клавиши на клаивиатуре
Dim Result As String * 20                                   'результат нажатий на клавиатуру
Deflcdchar 1 , 32 , 14 , 10 , 31 , 27 , 27 , 14 , 32        '

Locate 1 , 4
Lcd Chr(1)

Result = ""

'Главный цикл программы
Do

Key_char = Getkbd()                                         'когда клавиша не нажата функция возвращает переменной значение 16

If Key_char <> 16 Then                                      'если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data)               'вытаскиваем из массива символ нажатой клавиши
Result = Result + Key_str
End If

Locate 2 , 3
Lcd Result                                                  'выводим на дисплей результат нажатий

Waitms 100

If Result = "123" Then
Locate 2 , 2
Lcd "UNLOCK"
Wait 1
Goto Pizdec
Else
End If


If Key_str = "5" Then
Locate 2 , 2
Lcd "RETURN"
Wait 1
Goto Pizdec
Else
End If

Loop

End

Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"

Pizdec:
Return

При удержании клавиши символы начинают повторяться, программу можно слегка доработать если добавить в конец первого в примере строки:


 Key_char = Getkbd() 
 If Key_char <> 16 Then 
 Goto 1 
 End If 

 то мы избегаем повторения символов при удержании клавиши. Можем хоть минуту давить на кнопку, а символ будет один.

 

При включении прибора на верхней строке высвечивается иконка "замок", на нижней строке отображаются вводимые символы.

 


По умолчанию в исходнике код "123", как только мы введем этот код (как только нажмем третью правильную кнопку) на нижней строке выйдет надпись "UNLOCK". 

 

Если при вводе мы ошиблись цифрой, т.е. ввели не ту цифру - нажимаете кнопку 5 чтобы стереть все и начать ввод кода заного, при нажатии на кнопку 5 программа перезапускается. Статья дана лишь в ознакомительных целях и естественно клавишу 5 (клавишу которая стирает цифры) в идеале нужно перенести например на знак "решетка". Из за нехватки времени не стал переделывать, перепроверил все в железе и решил поделиться с вами.

 

Думаю принцип работы программы вам понятен, остается программу чуть дописать, указать порты на срабатывание при вводе правильного кода.

 

Видео работы кодового замка:

 файлы проекта с исходным кодом (~15кб.)

 

Готовая версия кодового замка:

Ниже представлена готовая рабочая схема кодового замка с настроенными портами для подключения электропривода и светодиодов. Электропривод можно подключить автомобильный, так называемый привод замка дверей. 

При верном вводе PIN кода привод сработает на 1 секунду, этого времени достаточно для работы механизма замка (открывания двери)? привод подключается через транзистор к порту PORTB.4. Если же при попытке ввести PIN код ошиблись цифрой, нажимаете кнопку "решетка" и можно начать ввод кода заново...

При правильном вводе PIN кода открывается замок, а на дисплее выводится надпись "UNLOCK".

Проект в Proteus и прошивка лежат ниже в архиве, PIN код замка указан в архиве в названии файла прошивки. 

 

...по материалам сайта avrproject.ru

проект Proteus и файл прошивки (~16кб.)



Категория: Защита и контроль | Добавил: (06.12.2014)
Просмотров: 4608 | Комментарии: 16 | Теги: ATmega8, LCD, 1602 | Рейтинг: 5.0/1
Всего комментариев: 16
9  
Дисплей снял с металлоискателя и он однозначно исправлен и потом его подключение крайне простое, что там можно перепутать? Есть сомнения касательно работоспособности кода. Приложенное видео ниочем-так как на нем ничего кроме клавиатуры и дисплея не видно! Так можно любую начинку закрыть и ничего ты не поймёшь - тот ли ты замок делаешь. Есть фото а лучше видео где ВСЕ видно? Одни пустышки попадаются в сети. А если и рабочие так нужно ещё и дописывать код.

10  
ни разу пустышек в сети не видел, если у вас не работает это не значит что схема не рабочая. скачайте проект в протеусе, просимулируйте - все работает

11  
Вот как раз симуляция и не запускается, Вы лично делали это устройство? Где можно увидеть его работу? Вы не даете фактов! Только косвенные выводы. А нужно лишь фото или ролик с обзором всей начинки а не клавиатуры и дисплея. Схема простая, как она может не работать если шьется код без ошибок!?

12  
Только что скачал и перепроверил, все работает. Скорее всего кто то не умеет пользоваться протеусом)

13  
Скорее всего кто то избегает ПРЯМОГО вопроса! Вы его собирали в железе?

14  
да, я автор статьи. около года назад, может чуть больше, проектировал на макете. Могу повторить и ДОКАЗАТЬ вам что все работает, но мне лень. Потому что в протеусе проверил, все работает, а значит и в железе будет работать. Смотрите видео которое между картинками, видно, что проект рабочий.

15  
Последняя схема включения является полной или нужно еще что то устанавливать? 
И что кроме Вас никто не собирал??? Я не в праве требовать от Вас траты времени на прошивку и пайку. Но я уже достаточно времени спустил в никуда и это весьма расточительно. Единственное что может прояснить ситуацию так это просмотр моей печатки. Есть желание посмотреть?

16  
Отчасти Вы правы, проект рабочий но только для корпуса PU. В TQFP корпусе камень прошился и умер. Заказал другой камень для проверки. Запускал пока без клавиатуры так что дальше за работоспособность не уверен. Пока жду камень - сделаю мембранную клавиатуру. Позже если все заработает дам ссылку на ютуб с ПОЛНЫМ обзором ВСЕХ элементов.

5  
Есть пару вопросов:
Можно ли использовать ATMega8A-AU в TQFP корпусе без изменения прошивки?
И какие фьюзы???

6  
да можно, только вывода смотрите, у разных корпусов вывода разные. ,фьюзы стандартные, 1 мгц как у нового микроконтроллера.

7  
Тогда странное дело, ибо не заводится камень. Маркировку выводов учел.

8  
дисплей правильно подключен? резистор стоит на контраст? масса на rw - где то ваш косяк, ищите))

3  
жалко что нельзя менять код без смены прошивки

4  
тоже об этом подумал, для смены кода придется перепрограммировать схему. Хотя, если на плате сделать разъем для программирования, не так уж и тяжело будет сменить прошивку

2  
Pic, Там урок в bascom, а тут другое устройство.

1  
интересная статья, видел эту статью когда то на avrproject.ru, хотел собрать кодовый замок но клавиатуры не было...

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Наш опрос
Из скольких диодов состоит диодный мост?
Всего ответов: 77

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
у нас тут все на bascom)

Подавляющее количество часов на Atmega8 выполнены с использо...

В чем тогда может быть причина, что у меня показывает лишь в...