Think #29.5
24 июля 1999
  Железо  

Железо - схема и программирование CMOS-часы.

<b>Железо</b> - схема и программирование CMOS-часы.
             ╔═══════════╗
             ║ 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



Другие статьи номера:

От автора - Поступил в университет...

Новости - Близится к концу работа над созданием CD-диска.

Обзор новинок - Chainik in horror flat.

Железо - программирование General Sound.

Железо - схема и программирование CMOS-часы.

Анкета - Опрос читателей.

WANTED - Розыск программ...

Реклама - Реклама и объявления ...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Программирование - Как сделать бегущую строчку.
Warez Pack - Oбзoр нoвых пocтyплeний: MOORНUНN:first blood, PULP, Phone Databook v2.03, BODY issue 36h, Best View v.2.12, LАMERGY issue Z, Pro Тracker 3.42m sources, Don News issue #16, ТargeТ issue 10, Nicron issue 123, АDVENТURER issue 13, Oткрывaшкa, Generation Z issue 1, ZХ-Тime issue 8, Don News issue #16, Sintetic OS 1.0.
Музыкальная шкатулка - читайте в следующем номере...
ЮМОР - подборка свежих анекдотов.
Программистам - Арифмeтика II: Прoдoлжаeм знакoмить вас с матeматичeскими прoцeдурами. Рeчь пoйдeт o мeтoдиках вoзвeдeния в любую стeпeнь и извлeчeния любoгo кoрня.

В этот день...   21 ноября