Четверг, 25.04.2024, 22:48 Приветствую Вас Гость

Автозапуск за 1500р. на ЛЮБОЙ сигнализации?! -> at13.ru

Главная | Регистрация | Вход | 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кб.)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта