Из газеты 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 и
за материалы по данному вопросу.