╔═══════════╗ ║ CMOS-часы ║░ ╚═══════════╝░ ░░░░░░░░░░░░░ Александр Майоров Дмитрий Ломов В этом номере мы решили рассказать вам о такой замечательной вещи, как микросхема CMOS-часов. Что-же это за зверь такой и для чего он нужен, спросите вы? А вот смотрите сами! Данная микросхема обеспечивает независи- мый от компьютера подсчет времени, выра- ботку сигналов прерывания от будильника, а также может использоваться как небольшое энергонезависимое ОЗУ на 50 байт. Особенностью CMOS-часов является их чрезвычайно низкое энергопотребление! (по справочнику потребляемый ток от 0.1 до ЧмА!). Если к данной микросхеме подключить ре- зервный источник питания, то подсчет вре- мени и сохранность информации во внутрен- нем ОЗУ будет гарантирована и при отключе- нии компьютера. Вы спросите - ну и зачем это мне нужно? Действительно, в обычных условиях часы в компьютере не очень-то и нужны. Но! Если вы время от времени пишете письма в эхи, то данные часики избавят вас от необходимости постоянно смотреть на ка- лендарь и настенные часы, чтобы проставить время/дату. Ну а для BBS или "майлера" ча- сы весьма и весьма нужны! Собственно необходимость в часах явилась одной из причин создания новой версии BBS. О которой, возможно, пойдёт речь в следую- щих номерах Ньюски. Ну, а теперь ближе к делу! Микросхема называется 512ВИ1, её фир- менный прототип МС 146818, а также наи- больший рулез - DALLAS 1287, имеющая внут- ренний кварц и батарею на 10 лет. Следует сказать, что такие микросхемы стоят в ПЦ 286 и 386, а посему доступны благодаря великому Апгрейду... Для начала назначение выводов: 01 NC не используется 02 OSC1 вход генератора 03 OSC2 выход генератора 04 ADO 05 AD1 06 AD2 07 ADЗ мультиплексная шина 08 ADЧ адреса/данных 09 ADS / 10 ADб / 11 AD7 / 12 GND земля 13 /CE выбор кристалла 14 AS адресный строб 15 R/W чтение/запись 16 NC не используется 17 /DS строб данных 18 /RES вход сброса 19 /IRQ выход запроса на прерывание 20 SED управление частотой CKOUT 21 CKOUT выход сигналов тактовой час- тоты 22 PS контроль сбоя напряжения пи- тания 23 SQW выход программно-управляемо- го делителя частоты 24 +Ucc +3...+5 вольт А теперь подробнее: На вывод 02 (OSC1) необходимо подать частоту от внешнего генератора, или подк- лючить к выводам 02/03 (OSC1/OSC2) квар- цевый резонатор. Выводы 4...11 (ADO...AD7) - шина ад- рес/данные, подключается на шину данных прроцесора. Вывод 13 (/CE) - выбор кристала.При на- личии лог. "1" на данном входе микросхема блокируется. Имеется одна особенность: на данном вхо- де должно быть состояние лог."0" в тече- ние всего цикла обращения к микросхеме. Т.е. одновременно с (или до) выбором адре- са регистра на входе /CE должна устано- виться лог."0", и его состояние не должно меняться в течение всего цикла обращения к выбранному регистру ! Наиболее удобно и просто устанавливать на этом входе состояние лог."0" в течение всего времени работы компьютера. Выбор номера регистра производится пода- чей его на шину АДРЕС/ДАННЫЕ (ADO...AD7) и подачей лог."1" на вход 14 (AS) Для чтения/записи данных в/из регистр(а) используются выводы 15 (R/W) - выбор ре- жима чтение/запись (соответственно лог."1" и "0") и 17 (DS) - стробирование данных. При подаче лог."0" на вывод R/W произ- водится запись данных в ранее выбранный регистр, а при подаче лог."0" на вывод DS - считывание данных из регистра. Появляние лог."0" на выводе 19 (/IRQ) сообщает о процессе системного прерывания БИС. Во всех остальных случаях данных вы- ход находится в третьем логическом состоя- нии (высокоимпедансном). Подача лог."0" на 22-й вывод (/PS) ин- формирует БИС о том, что произошёл сбой напряжения питания, и содержимое регистров недостоверно. Если же имеется резервный источник питания, то на этот вход подать лог. "1". На выводе 23 (SQW) имеются импульсы частоты, которая получается делением час- тоты тактового генератора на коэффициент, задаваемый программно. На выходе 21 (CKOUT) имеются импульсы, частота которых зависит от состояния входа 20 (SED). При наличии там лог."1" час- тота на выходе SQW совпадает с частотой генератора (OSC1-OSC2). При наличии лог."0" на входе SED частота на выходе SQW в четыре раза меньше частоты генерато- ра (OSC1-OSC2). В микросхеме имеются 64 восьмиразрядных регистра. При работе с ними нужно сначала указать, с каким регистром работать (запи- сать его номер в адресный регистр), а за- тем производить запись/чтение. Номера регистров #00 СЕКУНДЫ #01 СЕКУНДЫ (БУДИЛЬНИК) #02 МИНУТЫ #03 МИНУТЫ (БУДИЛЬНИК) #04 ЧАСЫ #05 ЧАСЫ (БУДИЛЬНИК) #06 ДЕНЬ НЕДЕЛИ #07 ДЕНЬ МЕСЯЦА #08 МЕСЯЦ #09 ГОД #0A РЕГИСТР A #0B РЕГИСТР B #0C РЕГИСТР C #0D РЕГИСТР D #0E ОЗУ общего назначения ... ОЗУ общего назначения #3F ОЗУ общего назначения #0C,#0D - только чтение #00,#0A - старшие разряды только чтение ОПИСАНИЕ РЕГИСТРОВ A...D ─════════════════════════─ РЕГИСТР А (отдельные биты) ──────────────────────────── 7 UIP "1" в этом разряде означает, что идет обновление информации и с часа- ми работать нельзя, нужно подождать некоторое время. Длительность циклов обновления в зависимости от частоты тактовых импульсов: ┌─────────┬──────────────────────┐ │частота │ длительность │ │ МГц │ цикла обновления, мс│ ├─────────┼──────────────────────┤ │4.194304 │ 248 │ │1.048576 │ 248 │ │0.032768 │ 1984 │ └─────────┴──────────────────────┘ 32768 1048576 4194304 СБРОС 6 DV2 частота 0 0 0 1 5 DV1 кварца 1 0 0 1 4 DVO 0 1 0 x 3 RSЗ Установка частоты на выводе 2 RS2 SQW (23) и периода прерываний 1 RS1 IRQ (19) 0 RSO IRQ - сигнал выдачи прерывания либо по пост. частоте, либо по окончанию цикла об- новления, либо от будильника. IRQ = 1000 / SQW SQW используется для подачи сигнала от будильника Например: частота SQW = 256 ГЦ, период равен 1000/256 = 3.9ms D3 D2 D1 D0 ЧАСТОТА,ГЦ ПЕРИОД,ms 0 0 1 1 8192 0.122 0 1 0 0 4096 0.244 0 1 0 1 2048 0.488 .................................... 1 1 1 0 4 250 1 1 1 1 2 500 РЕГИСТР B (отдельные биты) ─────────────────────────── 7 SET "1"-запрет обновления (для установки времени). 6 PIE разрешение прерывания с периодом, заданным в RS-битах регистра A. Сбрасывается по Reset'у. 5 AIE разрешение прерывания от будильни- ка. Сбрасывается по Reset'у. 4 UIE разрешение прерывания по окончанию цикла обновления. Сбрасывается по Reset'у. 3 SQWE разрешение выдачи информаци на вы- ход SQW. Сбрасывается по Reset'у. 2 DM вид данных: 0 - двоично-десятичный 1 - двоичный 1 24/12 счет: 0 - по 12 часов 1 - по 24 часа 0 DSE "1" разрешает автоматический пере- ход с летнего на зимнее время и обратно. Переход на летнее время осуществляется в 3ч ночи в последнее воскесенье апреля, а на зимнее в 1ч ночи в последнее воскресен- ье октября. РЕГИСТР C (отдельные биты) ──────────────────────────── Все биты сбрасываются по Reset'у или при чтении регистра C. 7 IRQF флаг запроса прерывания. Устанав- ливается в "1" при условии : (PF and PIE) or (AF and AIE) or (UF and UIE). Если IRQF="1", то на выводе IRQ (19) устанавливается "0". 6 PF устанавлвается в 1 фронтом сигнала на выходе внутреннего делителя частоты, выбранного в соответствии с RS-разрядами. 5 AF устанавливается в 1 при совпадении текущего времени и времени будиль- ника. 4 UF устанавливается в 1 после окончания цикла обновления. 3 =0 ... 0 =0 РЕГИСТР D (отдельные биты) ──────────────────────────── 7 устанавливается в лог. "0", если питание пропадало и информация недостоверна. Устанавливается в "1" по Reset'у или при чтении регистра D. 6 =0 ... 0 =0 ФОРМАТ ДАННЫХ ─────────────── Воскресенье = 1, Понед. = 2 и т.д. Январь = 1, Февраль = 2 и т.д. 1997 = 97, 1998 = 98 и т.д. Учитывается число дней в месяце и учиты- ваются високосные года. Если в регистры #00...#09 записать число в интервале #C0...#FF - это безразличное состояние. Т.е. если часы будильника = #FF, то он бу- дет срабатывать каждый час. ПОДАЧА ЗВУКОВОГО СИГНАЛА ПРИ СРАБАТЫВАНИИ БУДИЛЬНИКА ───────────────────────────── Необходимо в регистре {B} установить AIE=SQWE=1 UIE=PIE=0. Частота звука на выходе SQW задается RS-битами регистра {A}. При срабатывании будильника выход IRQ будет установлен в лог. "0". Т.е. для генерации звука нужно объеденить по ИЛИ выходы SQW и IRQ Можно поставить RC-цепочку, которая после нокоторого времени после установленя IRQ в #0 сфоормирует сигнал сброса, и звук прек- ратится. Схемы включения ─═══════════════─ Если в вас имеется контроллер SMUG, то всё что вам нужно сделать, так это вотк- нуть микросхему CMOS-часов в соответствую- щюю панельку. Ну а если вам "не повезло", то придётся немного попаять... Генератор ─────────── ┌──────────── 2 (OSC1) │ │ 22М ├─▒▒▒▒──┬──── 3 (OSC2) │ │ │ ▒ 470к │ ▒ │ ▒ │ │ │ │┌┐│ │ кварцевый резонатор: ┌┴─┤││├──┤ 10│ │└┘│ │20 32.768 кГц ┴ ┴ * 1.048576 МГц ┬ ┬ 4.194304 МГц │ │ │ │ ─┴─ ─┴─ Выбор кристала и контроль напряжения ────────────────────────────────────── 5.1К ┌─▒▒▒▒▒──── 24 (+Un) │ ┌─ │ │ /│ 5.1К /─┴────────── 13 (/CE) │/ │ │/ к ──┤ ├──▒▒▒▒▒───┤ КТЗ15 +5 │ │ │ э │ │ │ КС133 │ │ ─┴─ 5.1К 24 (+Un) ─────▒▒▒▒▒──────────── 22 (PS) Питание микросхемы ──────────────────── │ │ │ │ +5Б ───┤ /├────┬─────────── 24 (+Un) │/ │ │ │ │ │ │ │ │ │ │ ┌────│ /├────┘ │ │/ │ │ ──┴─── + ─┬─ аккумулятор на 3.6В │ ─┴─ Подключение к компьютеру ────────────────────────── Необходимо подключить сигналы ADO...AD7 на шину данных процессора. Сигнал /RES (18) подключить на /RESET процессора (26-й вывод) Оставшиеся выводы - AS, R/W, /DS нужно подключить к дешифраторам адреса. Состояние сигналов ────────────────── AS R/W /DC ничего 0 1 1 выбор номера регистра 1 1 1 чтение из регистра 0 1 0 запись в регистр 0 0 1 Например на жёлтой плате Скорпиона на выводы AS, /DS, R/W сигналы можно подавать с м/с D54: D54/13 через инвертор на AS D54/11 на /DS D54/15 на R/W В этом случае адреса портов CMOS-часов будут распологаться в TR-DOS области. При такой схеме включения анализируются только биты 1 и 7, но во избежании конф- ликтов с другими портами рекомендуются та- кие адреса портов Выбор регистра #D8 Чтение из регистра #58 Запись в регистр #58 При испольновании Скорпиона для запи- си/чтения данных можно использовать п/п TR-DOS: #ЗFFO - OUT (C),A RET #ЗFFЗ - IN A,(C) RET На компьютерах, у которых в ПЗУ TR-DOS нет подобных команд рекомендуется следую- щая программа: ;запись данных в регистр ;in: ;[C] - номер регистра CMOS-часов ;[B] - записываемое значение WRREG LD A,C CALL SETREG LD A,B LD C,#58 JR OUTPAR ;чтение данных из регистра ;in ;[C] - номер регистра CMOS-часов ;out: ;[A] - считаное из регистра значение RDREG LD A,C CALL SETREG LD A,#D8 LD C,#1F CALL OUTPAR LD C,#58 LD IX,#ЗEFЗ CALL JPTR LD A,H RET SETREG LD C,#D8 OUTPAR LD IX,#2A53 JPTR PUSH IX JP #3D2F