Эта разработка
на микроконтроллере Atmel AT90S2313 предназначена для
учёта времени (таймер) и коммутирования
видеосигнала по истечении заданного интервала
времени.
Позволяет:
- Прямой счёт от 00:00 до 99мин. 59 сек. или ручного
останова.
- Обратный счёт от любого (99:59-00:01) значения до 00:00
или ручного останова.
- Пауза, с продолжением счёта.
- Сброс текущего значения в 00:00.
- при достижении 00:00 обратным счётом, готовность к
запуску предустановленным временем.
- коммутировать или нет видеосигнал. Если при
включении питания удерживать нажатой кнопку 2,то
на экране будет постоянно таймер.
- Измеренное время накапливается в
энергонезависимой памяти до 9999мин.59с.
- Считается число запусков до 9999.
- Обнуление накопленных параметров по паролю.
- Возможность оперативной смены пароля.
- Управляется тремя кнопками.
- питание 4,5-5,0В (батарейки или сетевой адаптер) у
меня работает от 3-х "пальчиков"
Назначение:
Может быть применена, например, в игровых
салонах на базе компьютерных приставок с выходом
на телевизор, для систем караоке, просто таймер
времени и других случаях, когда надо считать
время и коммутировать аналоговый сигнал. Удачно
помещается в корпусе от трёхкнопочной мыши.
Таймер включается в разрыв кабеля Video между
источником видеосигнала и телевизором. Подав
питание на таймер (работает от батареек) мы
получим на экране TV.
Нажав одну кнопку - Старт/Стоп (1), запускаем таймер на прямой счёт. При этом таймер пропадает с экрана, и на нём появляется внешнее видео. Повторное нажатие Старт/Стоп (1) - таймер на паузе, на экран выводится текущее значение таймера, видео выключено. Можно запустить таймер дальше, можно сбросить показания в 00:00. Сброс происходит, если на Паузе, удерживая кнопку Shift (3) нажать СС (2) Нажатие второй кнопки СС (2) при остановленном таймере (не на паузе) сначала выводится
накопленное время.
Для обнуления накопленных значений надо ввести
пароль, как время таймера. Предустановлен пароль
11:11. Время таймера вводится таким образом: После
включения или сброса в 00:00 нажимается кнопка 3
(Shift), начинает мигать первый разряд. Кнопкой СС (2)
изменяем значение разряда по кругу 0-9. Кнопкой 3
(Shift) выбираем другой разряд. Выход из режима
ввода - кнопка Старт/Стоп (1) Если был набран
пароль как время таймера, то, не запуская таймер
на счет, вызвать сумму минут 0000:00 кнопкой СС (2)
затем сумму стартов 0000 СС (2) и удерживая Shift (3)
нажать СС (2) - произойдёт обнуление накопленных
значений. В это время можно , если необходимо,
сменить пароль. Для этого, не выключая! и не
запуская! таймер, сразу набрать новый пароль и
выполнить стирание накопленных сумм (они уже 0
после предыдущего стирания) кнопка 2 кнопка 2
удерживая 3 нажать 2. Новый пароль записан. Есть
идея соединить несколько таких таймеров в
"сеть" с управлением от главного устройства
или компьютера...
Описание
схемы
Таймер сделан на базе микроконтроллера
AT90S2313, работающего на частоте кварца 4МГц.В
принципе, может быть перенесена на более старшие
модели, имеющие полный порт B и D,но AT90S2313
минимально-оптимален. У младшей модели AT90S1200 нет
ОЗУ, а у старших много ресурсов будет
неиспользовано. Тактовая частота 4Мгц удобна для
строчной развёртки 4000000/256=15625 Гц. Процессор
примерно 50% времени формирует видеосигнал,
остальное время выполняет основную программу.
Сигал Video формируется на 7 бите порта B и не может
быть перенесён на другие биты. Более того – весь
порт B задействован в формировании видео таким
образом:
В регистре r1 – горизонтальный байт изображения
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
out PORTB,r1
add r1,r1
такой неоптимальный метод позволяет иметь на 7
бите порта В новый бит каждые два такта тактовой
частоты out [1 такт] + add [1 такт].
Сигнал синхронизации выводится через порт D,
здесь можно использовать любой бит.
Нерационально, когда 7 выводов (PB0-PB6) пропадают.
Их удалось задействовать для опроса клавиатуры
таким образом:
порт В инициализируется
ldi r16, 0B10001111 ; port B 7 bit на вывод Видео, 6,5,4 ввод
клавиатура
out DDRB, Areg
формирование видео идёт по прерыванию с F=15625,
когда заканчивается полный кадр, т. е. 1/50 секунды
выполняем опрос клавиатуры
ldi r16,0B01111111 ; устанавливаем
биты
out PORTB,r16
in r16,PINB
andi r16,0B01111111 ; маска на клавиатуру
cpi r16,0B01111111
breq NoKey ;
нет нажатых клавиш
dec KeyRep
; считаем
удержание клавиши
brne NoKey ;
ещё не 0
mov ScanKey,r16 ; сохраняем
скан-код
ldi r16,MinKeyRep ; загружаем
значение числа циклов
mov KeyRep,Tmp1 ; удержания
кнопки в 1/50 сек.
NoKey:
Получаем в переменной ScanKey код нажатой кнопки без
дребезга. Основная программа анализирует уже эту
переменную.
Номиналы резисторов R1,R2,R3 в смесителе видео и
синхро могут отличаться. От их значений зависит
яркость и устойчивость синхронизации
изображения. Это также зависит и от напряжения
питания. При работе от батареек, изображение
может быть немного темнее.
Коммутация видео и аудио сигнала выполнена на
обычном аналоговом коммутаторе типа К561КТ3. В
корпусе четыре ключа, управляемых независимо.
Для предотвращения подачи сразу двух сигналов в
момен переключения, программная коммутация
работает так - при любом переключении сначала всё
выключается, а потом включается требуемый
сигнал. Когда таймер запущен, т.е. включено
внешнее видео, на 19 выводе прекращается
формирование видео и на 8 синхро. Это делается
переключением выводов на ВХОД. При работе без
561КТ3 на экране ТВ будет заметно изображение, так
как слабый сигнал всёравно проходит. В схему
заложен Audio сигнал от таймера - "пикать"
кнопками, извещать об истёкшем времени и др. Пока
звук не реализован, но канал Audio коммутируется
вместе с Video и может быть использован как
отдельный канал для коммутации другого
аналогового сигнала. Для этого не подключать 9
вывод AT90S2313 на 11 вывод 561КТ3, а подать на 11 и 8 входы
КТ3 два сигнала, которые будут переключаться.
Если немного изменить схему (и программу
соответственно) и управлять отдельно каждым
ключём (выводов хватает), можно получить таймер с
коммутацией до 4-х независимых аналоговых
каналов. Во время прошивки Flash и EEPROM
не надо проверять (Verify) EEPROM, всегда будет
выдавться сообщение об ошибке. Это происходит из
за того, что микроконтроллер успевает
отреагировать на сигнал Reset между командами и
отработать часть программы, посчитать несколько
счётчиков в EEPROM. Поэтому и ошибка при сравнеии.