Из газеты Optron #31, Львов, 29.09.99
CMOS для всех!
(C) Юрий Тесленко/Danger Corp., 1999
Давно уже многих владельцев Speccy муча-
ет вопрос: "Почему у моего любимого компь-
ютера нет часов, не зависящих от пита-
ния? Как у IBM".
Действительно, поскольку ZX Spectrum
считает время по прерываниям, то, даже ес-
ли настроить "таймер", в DCU, например,
при следующей загрузке программы компьютер
всё "забудет" и выдаст 00:00:00. О дате и
говорить не стоит.
"Примочки", имеющиеся в некоторых про-
граммах, часами, строго говоря, не являют-
ся, и воспринимаются как никому не нужный
"довесок". Такие часы останавливаются при
работе с диском, после сброса время "забы-
вается", а о выключении питания и говорить
не приходится. Некоторые "потуги" органи-
зовать запоминание даты сделаны в оболочке
iS-DOS, но её всё равно надо вводить вруч-
ную.
Сейчас, благодаря поголовному устарению
таких компьютеров, как IBM PC типа 286 и
386, у многих спектрумистов начали появ-
ляться микросхемы часов реального времени
- CMOS.
Возможности CMOS'а весьма заманчивы: у
вас есть часы, будильник, календарь и
энергонезависимое ОЗУ на 50 байт. Микро-
схема работает независимо от компьютера и
общается с ним через порты ввода-вывода.
- А как же софт? - спросите вы.
Он существует! Почти все новые программы
поддерживают CMOS. Активно идёт адаптация
старых. Реализован таймер для iS-DOS, пе-
реписан date.com.
Особо следует отметить роль CMOS'а для
ZXNet - ведь в каждом письме должны стоять
время и дата! Раньше всё делалось вручную.
С появлением часов это неудобство исчезло
- программа сама проставляет дату и время.
Неоценим CMOS и при необходимости вклю-
чать-выключать компьютер в определённое
время. Это полезно при организации BBS.
Рекламная пауза:
- Мир ZX, встряхнись! Приобретайте моде-
мы и подключайтесь к ZXNet!!!
Теперь немного о схемотехнике.
Как всегда, на Speccy не обошлось без
размножения всякого рода стандартов под-
ключения... В случае CMOS'а их два.
Первый вариант годится для "Скорпиона".
Порты обращения к микросхеме находятся в
адресном пространстве TR-DOS. Схема
подключения и её работа подробно описаны в
газете ZxNews N35 - в статье питерцев
Александра Майорова и Дмитрия Ломова. Пос-
ледний, кстати, является модератором эхо-
конференции спектрумистов-"железячников"
HARDWARE.ZX. Сейчас там как раз происходит
активное обсуждение проблем подключения
CMOS'а.
Второй вариант является более универ-
сальным и популярным у "самодельщиков".
Это - так называемый "стандарт Mr.Gluk'а"
(Рената Мамедова, разработчика, широко из-
вестного среди спектрумистов). Его схема
обеспечивает возможность подключения к лю-
бому типу Speccy. Именно её мы с вами и
рассмотрим подробнее...
Но вначале - о самой микросхеме.
Её корпус имеет 24 вывода. Наиболее
распространёнными типами являются:
- DS1287;
- MC146818;
- КР512ВИ1 (отечественный аналог).
DS1287 отличается от остальных своих
"собратьев" наличием встроенных кварца и
аккумулятора, что значительно упрощает
схему подключения.
Всю необходимую информацию о CMOS можно
найти в той же "ньюске", а также - в раз-
личных справочниках, например:
Новаченко И.В. и др. Микросхемы для бы-
товой радиоаппаратуры. Справочник. - М.:
Радио и связь. 1993. - с.89-100.
Но для тех, чей круг чтения ограничен
исключительно "Оптроном", я считаю необхо-
димым её повторить.
Назначение выводов микросхем КР512ВИ1 и
MC146818:
+-----+------+---------------------------+
|ВЫВОД|СИГНАЛ|ХАРАКТЕРИСТИКА |
+-----+------+---------------------------+
| 01 | NC | Не используется |
| 02 | OSC1 | Вход генератора |
| 03 | OSC2 | Выход генератора |
| 04 | AD0 | \ |
| . | . | | |
| . | . | |Шина адреса/данных |
| . | . | | |
| 11 | AD7 | / |
| 12 | GND | Общий вывод |
| 13 | -CE | Выбор кристалла (инверсн.)|
| 14 | AS | Адресный строб |
| 15 | R/W | Чтение/запись ("1"=RD) |
| 16 | NC | Не используется |
| 17 | -DS | Строб данных (инверсн.) |
| 18 | -RES | Сброс (инверсн.) |
| 19 | -IRQ | Выдача прерывания (инв.) |
| 20 | SED | Вход упр. частотой CKOUT |
| 21 | CKOUT| Частота после делителя |
| 22 | -PS | Контроль сбоя питания |
| 23 | SQW | Частота будильника |
| 24 | Ucc | Напряжение питания +3..+5В|
+-----+------+---------------------------+
Теперь подробнее о некоторых сигналах.
Появление логического "0" на выводе IRQ
свидетельствует, что CMOS выдал прерыва-
ние. В остальных случаях вывод находится в
Z-состоянии.
На вход -PS следует подать "0" после то-
го, как произойдёт сбой питания. Это будет
инфоровать CMOS о том, что содержимое ре-
гистров может быть недостоверно.
На выходе SQW присутствуют импульсы час-
тоты, используемые в будильнике.
На выходе CKOUT имеются импульсы, часто-
та которых зависит от состояния входа SED.
При появлении лог."1" на выводе SED часто-
та импульсов на CKOUT будет равна частоте
генератора OSC1-OSC2. При лог."0" на SED -
CKOUT = (OSC1-OSC2)/4.
Состояние сигналов -DS, AS, R/W задаёт
режим работы с БИС:
+----------+--------------------------+
|СИГНАЛ |РЕЖИМ |
+--+---+---+ |
|AS|-DS|R/W| |
+--+---+---+--------------------------+
|1 | 1 | 1 |Выбор номера регистра |
|0 | 0 | 1 |Чтение из регистра |
|0 | 1 | 0 |Запись в регистр |
+--+---+---+--------------------------+
В микросхеме типа DS1287 некоторые выво-
ды отсутствуют за ненадобностью.
Обратимся к схеме.
В стандарте Mr. Gluk для работы с часами
успользуются следующие порты.
#EFF7. Логическая "1" бита 7 разрешает,
а "0" - запрещает обращение к портам адре-
са-данных.
#DFF7. Задаёт адрес регистра.
#BFF7. Служит для записи-чтения выбран-
ного регистра.
Некоторые комментарии к схеме.
Выводы, не задействованные у DS1287,
обозначены на схеме как "x".
ZQ1 - зуммер будильника.
Q1 - кварцевый резонатор для CMOS'а.
Сигнал -ON/OFF можно использовать для
схемы включения компьютера.
Сигнал -CLR я подключаю к цепи +5v, но
его можно также подавать на вход -RESET
компьютера. Если на -CLR подать сигнал с
вывода -IRQ, то после периода, задаваемого
RC-цепочкой, произойдёт сброс CMOS'а. Сей
факт можно использовать для остановки бу-
дильника.
Все применённые мною в схеме микросхемы
"обвязки" - серии 1533. Диоды - КД522.
При применении DS1287 (DALLAS'а, как её
называют), рекомендую также установить
между его выводами 24 (Ucc) и 12 (GND)
блокировочный конденсатор ёмкостью от 47
до 100 мкФ.
От редакции.
Почему рекомендуется применять именно
эти номиналы - это "ноу хау" автора. Мы
же, со своей стороны, считаем что доста-
точно конденсатора пусть не столь большой
ёмкости (0.1 - 1.0 мкФ), но зато высоко-
частотного, например, КМ, К10-17, пос-
кольку "электролиты", из-за своей индук-
тивности, высокочастотную составляющую не
отфильтровывают.
С точки зрения программиста, CMOS
представляет собой 64 регистра.
Регистры #00 - #09 являются внутренним
ОЗУ, предназначенным для хранения значений
времени (текущего и будильника) - от се-
кунд - до дней недели, месяця и года.
Регистры #0A - #0D являются служебными и
содержат информацию, необходимую для рабо-
ты часов - значения настроек, флаги преры-
вания и достоверности информации.
Регистры #0E - #3F - внешнее ОЗУ для за-
писи/считывания произвольной информации.
Поэтому используйте их как вам угодно.
Mr.Gluk, например, использует их для своей
прошивки ПЗУ.
Запустить CMOS можно при помощи специ-
альной программы или правильно загрузив
регистры (из STS, например).
Дополнительные примечания.
Если у кого будут проблемы с приобрете-
нием, подключением, запуском часов - обра-
щайтесь ко мне. Мои координаты - на стра-
ничке "About".
Выражаю глубокую признательность Ренату
Мамедову, Дмитрию Ломову и Александру Ма-
йорову за идею подключения CMOS к Speccy и
за материалы по данному вопросу.