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