При нажатии на кнопку звонка микроконтроллер проигрывает мелодию или выдает звуковой сигнал, напоминающий звонок телефонного аппарата. Первый вариант выбирается в случае, если первая цифра секретного кода четная, а второй — если нечетная.
При проигрывании мелодии останавливается вывод данных во внешний компьютер, поэтому, если шел прием данных и был нажат звонок, потребуется дополнительное время на исправление возникшей ошибки. При проигрывании простого сигнала такого не происходит. Кроме того, для правильного воспроизведения мелодии желательно использовать внешний кварц вместо внутреннего RC-генератора микросхемы.
Микроконтроллер имеет 64 байта энергонезависимой памяти (EEPROM), которая используется для записи происходящих событий. Есть 3 типа событий: включение питания, правильный набор кода и неправильный набор кода. Одновременно с событием записывается время, прошедшее после предыдущей записи. Точность записи времени около 8 минут. Если время между записями превысило 50 суток, дальнейший счет времени останавливается. Естественно, что для точного счета времени надо использовать кварцевый, а не встроенный RC-генератор.
Содержимое энергонезависимой памяти постоянно побитно, с частотой 3815 Гц выводится на один из выводов микроконтроллера и может быть считано для контроля внешним компьютером. Объем памяти позволяет хранить 30 записей по 2 байта. Число циклов записи в EEPROM ограничено, поэтому для увеличения срока службы используется специальный формат записи, разобраться в нем можно по исходному коду программы. После включения питания секретный код равен числу 23232. Для его изменения надо: 1) набрать старый код, при этом сработает соленоид, открывающий замок; 2) в момент отключения соленоида должна быть нажата кнопка 2 — это переведет устройство в режим ввода нового пароля; 3) ввести новый пароль, при ошибке можно пользоваться клавишей сброса.
Все нажатия на клавиши и некоторые другие действия озвучиваются короткими звуковыми сигналами.
2. Схема
Рис. 6.12. Электрическая принципиальная схема кодового замка
3. Комментарии к схеме
Питание на микроконтроллер подается постоянно, поэтому желательно использовать сетевой блок питания, а не батарейки.
В качестве исполнительного устройства проще всего использовать подходящий электромагнит. Но можно и электродвигатель, тогда надо добавить небольшую схему на основе выключателей, которая должна обеспечивать открытие замка при единице на соответствующем выводе микроконтроллера и закрытие при нуле.
4. План
Управляющую программу для чтения информации из EEPROM автор не написал, но возможность чтения заложена в программе микроконтроллера, так что, если найдутся желающие, автор будет только рад.
5. Программа
Программа относительно сложная, и автор не рекомендовал бы использовать ее для изучения ассемблера AVR, но тем не менее разобраться можно.
Текст программы:
.INCLUDE "1200def.inc"; AT90S1200 @ 1 МГц
.CSEG
.EQU evReset=1
.EQU evPassed=3
.EQU evDenied=5
.EQU KeyRing=1; Код клавиши звонка
.EQU KeyEnter=9; Код клавиши сброса
.EQU NewPassKey=2; Код клавиши, нажимаемой для ввода нового пароля
.EQU KeyLen=5; Длина секретного кода не должна быть больше 5 цифр
.EQU FreqKeyPressed=50; Константа частоты для выдачи писка при нажатии кнопок
.EQU Note_1=227; Константы частот и длительности нот
.EQU Note_la0 = Note_1
.EQU Note_2=202
.EQU Note_ci0 = Note_2
.EQU Note_3=191
.EQU Note_do1 = Note_3
.EQU Note_4=170
.EQU Note_re1 = Note_4
.EQU Note_5=152
.EQU Notejni.1 = Note_5
.EQU Note_6=143
.EQU Note_fa1 = Note_6
.EQU Note_7=128
.EOU Note_sol1 = Note_7
.EOU Note_8=114
.EOU Note_la1=Note_8
.EOU Note9=101
.EOU Sote_ci1=Note_9
.EOU Note_10=96
.EOU Note_do2 = Note_10
.EGU Note_11=85
.EOU Note_re2 = Note_11
.EOU Note_12=76
.EOU Note_mi2 = Note_12
.EOU Note_13=72
.EOU Note_fa2 = Note_13
.EOU Note_14=64
.EOU Note_sol2 = Note_14
.EOU DURATION = 350