Есть такое устройство, по внешнему виду похожее на киношные магнито - карточные замки из буржуйских фильмов. Только вместо магнитной ленты используется карточка (использованная телефонная) с двумя рядами отверстий около 1 мм. Всё реализовано на старой, доброй 155 серии. Работает без проблем лет 15 уже.
Неудобство: при растиражтровании карточек ( в основном всёзнающими практикантами), смена кода выполняется вскрытием устройства и перестановкой перемычек (джемперов не было в те времена, потому - паяльник). Это конечно не каждый месяц, но....
Глядя на календарь, хотелось бы нечто более функционнальнее и удобнее.
Замахнулся на 16F628 - потому что есть в наличии, да и хватает вроде бы.
4 кнопки: звонок, открытие изнутри, ввод нового кода, обнуление кода (так, на всякий) ну и два фотодиода (на обвязку - формирователи не заостряюсь)- это входа.
Биппер, реле, звонок с муз открытки с ключом (а чё городить то), пара / тройка светодиодов для контроля и индикации - это на выходах.
Протеусная схема - нечто слишком простое, потому при интересе добавлю.
В железе: две оптопары (от микролифта видеоплеера) с двузх сторон от щели, входные обвязки, да и ключи. Пока не вылизано.
А теперь проблемка:
При чтении кода, не получилось считать достоверный код
Алгоритм простенький: по затемнению любого фотодиода, переходим в подпрограмму чтения кода. Подпрограмму, потому что надо будет не раз читать его: для смены - два раза подряд, при совпадении - поменять, как эталонный; в работе - просто сравнить.
По условию, в рядах два отверстия одновременно не бывает. Потому - 11 - конец карточки, значит конец кода.
два ноля - межотверстевое пространство...(во сформулировал)...
Код может быть 10 или 01. как бы всё простенько, но...
А теперь сам проблем: надо получить достоверно в каком ряду отверстие, не взирая на скорость перемещения (время засветки). Появилось 00, как бы записать (сохранить)...
Всё. После Z80 не хватает команд (или мозгов), "всё" написано за смену, неделю не могу победить этот кусок.
Подпрограмма чтения
Много мусора - верю, боролся как мог. Во флеш пишу, потому как проще контролировать в отладке (ну для меня во всяком). Достаточно 16 байтов. Можно даже не обрабатывать 11 как конец кода.
Кто чем может...