Выбрать главу

При нажатии на кнопку звонка микроконтроллер проигрывает мелодию или выдает звуковой сигнал, напоминающий звонок телефонного аппарата. Первый вариант выбирается в случае, если первая цифра секретного кода четная, а второй — если нечетная.

При проигрывании мелодии останавливается вывод данных во внешний компьютер, поэтому, если шел прием данных и был нажат звонок, потребуется дополнительное время на исправление возникшей ошибки. При проигрывании простого сигнала такого не происходит. Кроме того, для правильного воспроизведения мелодии желательно использовать внешний кварц вместо внутреннего 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