Кодовый замок на ATiny13
Когда-то давно, году эдак в 1993, когда мы, приближаясь к концу нашего отрочества и постепенно утрачивая интерес к стройкам, взрывам и дворовому футболу, случилась эта история. Мама моего лучшего друга Петьки работала то ли в снабжении, то ли в сбыте одного серьезного завода, и, вкусив первые плоды рыночной экономики, она смогла приобрести сыну ZX-Spectrum аж со 128 КБ оперативной памяти и пяти дюймовым дисководом. Это было воистину чудо! И мы, три друга - дуга, оглобля и подпруга, - зависали у Петьки, внедряясь в удивительный игровой мир, созданный с помощью персонального компьютера лорда Синклера.
На картинке ниже идеальное решение, которого ни у меня, ни у моих друзей никогда не было:)))
Не знаю почему, а главное не понимаю откуда, но через пару месяцев в моей голове обнаружилась мысль: программируя ПК, можно создавать свои миры, а это куда интереснее, чем блуждать в чужих. Эта мысль не давала мне покоя, день ото дня превращаясь в навязчивую идею. Читателю могут показаться смешными и непонятными дальнейшие рассуждения, но он должен понимать, что в ту пору в моём окружении не было человека, который мог подсказать с чего начать, где добыть книги или журналы по теме. Тогда не существовало социальных сетей и интернета в свободном доступе. И даже больше, в школе, где я на тот момент учился, не было информатики.
Но дорогу осилит идущий. Уже в сентябре 1995 года у меня появился свой собственный Scorpion 256 с кнопкой дизассемблирования на корпусе. Для этого пришлось летом подрабатывать на стройке, но оно того стоило. Помню как батя подключил его к старенькому черно-белому Рекорду и я увидел меню TR-DOS. Моему счастью не было предела. Теперь можно было спокойно играть в Элиту, вживаясь в роль свободного странника, которому открыты бескрайние просторы глубокого космоса. Сегодня кажется смешным, что примитивная векторная графика могла чем-то привлекать, но тогда в поисках выгоды или загадочной планеты Раксла, сражаясь с пиратами и испытывая настоящее волнение от встречи с таргоидским перехватчиком, сознание будто покидало моё тело, я полностью погружался в мир Элиты. Да что Элита. Люди моего поколения наверняка вспомнят Quazatron, Saboteur и конечно же Dizzy.
Я отвлёкся. Очень быстро выяснилось, что написать что-то стоящее для Спектрума можно только на языке ассемблера, ибо аппаратные возможности весьма ограничены. А раз писать что-то хочется, значит надо осваивать. В этом месте своего повествования я подошёл к самому главному. Именно так я в своё время познакомился с ассемблером. Но несмотря на казалось бы некую предопределённость в выборе будущего, моя жизненная дорожка повернула в другую сторону и я стал инженером машиностроителем. Но то самое первое серьёзное увлечение никуда не ушло, а сопутствует мне всю жизнь.
Единственное, чего не хватало, так это знаний в области электроники, к освоению которой я смог подойти сознательно только после тридцати. Первое, что двигало мной, это воспоминание о том, как батя разворачивал огромную схему телевизора, чего-то там смотрел, потом дымил канифолью и что-то паял в телеке, который после этого начинал исправно работать. Второе, это прекрасный японский автомобиль Nissan Cefiro в кузове WA32 1997 года выпуска. Ни одна тачка сегодня не работает без электроники. Нам, инженерам ДВС, конечно же преподавали основы электротехники и электроники, но было это на таком уровне, что лучше не вспоминать. Что делать, если что-то не работает в системе управления двигателем? Ехать в автосервис? Наездился. Поэтому решил, что теперь точно пора осваивать эту область знания. Процесс занял почти два года, спустя которые я кое-что уже не просто знал, но и мог применить на практике.
С тех пор прошло много времени. Само собой я не обошёл стороной программирование микроконтроллеров, да просто не мог не попробовать что-то слепить. Но если знания постоянно не использовать, то, как говорит мой друг доктор, слабые нейронные связи рушатся. Может он немного и не так говорит, но я его так понимаю. Поэтому нет-нет да хочется чего-нибудь испортить или попробовать сделать новое. Так и тут получилось. С годик назад сдох у меня по непонятным причинам ZR5 на калитке мастерской. Поменял, а он снова сдох. Начал искать причину, но так ее и не нашел. Поменял ещё раз и всё работает исправно до сих пор. А в голове застряла мыслишка: лежит бесхозно ATiny13, клавиатурка болтается где-то, так почему бы не сделать кодовый замок из подручных средств? Я тут не один, выдам каждому свой код доступа и всё.
Только через год выдалось свободное время для реализации задуманного. Поковырялся в инете и нашёл простое решение. Ног у МК всего восемь, две из которых питание и ноль, остается шесть. Нужно организовать какую-никакую индикацию и управление реле замка. Ног и так не хватало, а тут их будет еще меньше. Матричная клавиатура имеет семь выводов. Кнопок двенадцать. Что делаем? Всё просто, при нажатии каждой кнопки у нас должно появиться напряжение на выводе АЦП, и таких напряжений должно быть двенадцать, т.е. для каждой кнопки своё. Подбираем номиналы резисторов для мегаделителя. Я было начал сам это делать, но потом поковырялся и нашёл вариант. Рабочий или не рабочий было неизвестно, но решил попробовать. В результате оказалось, что ближе к нулю и опорному напряжению в 5В интервалы маловаты и желательно их раздвинуть за счет серединки. Схема ниже.
Алгоритм работы устройства таков. АЦП работает постоянно. Если кнопка не нажата, то значение преобразования меньше 0x05. Как только гражданин нажал кнопку, значение преобразования становится больше 0х05 и заносится в буфер (выделенная область оперативной памяти). АЦП выключается в обработчике прерывания и там же включается прерывание таймера TOIE0, которое реализовывает задержку на время дребезга кнопки. После паузы в обработчике прерывания TOIE0 снова включается АЦП, а прерывание этого таймера соответственно выключается. Цикл повторяется до тех пор, пока в буфере не окажется четыре байта. Это означает, что гражданин ввёл код, состоящий из четырех цифр. Из этих четырех байтов мы формируем код. Зачем это нужно. Результатом нажатия кнопки 1 могут быть значения 0х09, 0х0A, 0х0B, а это значит, что необходимо проверять вхождение в диапазоны, каждому из которых соответствует определённая цифра. Так получается четырехзначный код, который затем сверяется с массивом кодов граждан.
Если введенный код совпал с одним из кодов в массиве, подаем питание на реле отключения замка, если нет, сообщаем цветовой индикацией, что введен неверный код. После проверки с помощью счетчика OCIE0A делаем паузу. Эта пауза является временем открытия замка и временем цветовой индикации.
Код написал на ассемблере, потому что алгоритм работы очень прост, а еще это возможность вернуться во времена своей юности, когда каждый такт был на счету. Занял он почти 50% флеш памяти. Попыхтеть пришлось над паузами и диапазонами, чтобы отладить ложные срабатывания. Понимаю, что можно было попробовать поискать иное решение (включать АЦП в прерывании компаратора например), но ведь работает и так. Да и на роль специалиста я не претендую. Плату изготовил по всем известной технологии ЛУТ. Ну а дальше последовала 3D печать. Сначала спроектировал коробушку, а затем в неё поместил устройство. Получилось симпатично, но боюсь как бы дождик не залил (уплотнения то не предусмотрены) да школяры не отодрали с корнями. Их даже видеокамера, висящая над калиткой, не остановит.
Нафига я написал такой большой текст? Оказывается, что мне уже есть о чём вспомнить и рассказать. А ещё это что-то вроде целеустремлялочки для мудрого читателя. Если чего-то хотеть, то этого вполне можно достичь. Не без труда конечно. Не обязательно при этом становиться профессионалом во всех областях, достаточно иметь крепкий уровень знаний, который хотя бы на хоббийном уровне позволит реализовывать свои мечты. Для более серьёзных дел конечно же есть профессионалы.
Ну и лишних знаний не бывает. Если в школе кажется, что какой-то предмет ненужный и он никогда не понадобится в жизни, то это большое заблуждение. Жизнь - сложная штука, которая швыряет, порой, в такой терновый куст, что диву даёшься.
Ну а бонусом проект в kicad, исходник прошивки и stl ящика
К этой заметке пока нет комментариев