Skip to content

serg-admin/zs-042

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zs-042

Work with zs-042 (DS3231) at avr-gcc

Проверено для arduino pro mini - atmega328p

ОСОБЕННОСТИ

Вся работа вынесена в обработчики прерываний. Для приема сигналов будильника используется прерывание INT0 по спаду уровня(32-я нога процессора, 2-й выход arduino pro mini).

СБОРКА

Собираем командой make при помощи avr-gcc.

В Arduino pro mini можно загрузить командой

make pro_mini

РАБОТА

Подключаемся к USART на скорости 38400 формат 8N1 При запуске устройство сообщает - start и мигает светодиодом с частотой ~0.5 Hz (17 ножка процессора).

КОМАНДЫ

Шеснадцатиричные команды отправляются на USART порт. Пример команд:

Установка времени:
  xD00001171301301115 - Установить время дату:
    x  - префикс шеснадцатиричной команды;
   D0 - номер I2C устройства для записи данных;
   00 - адрес ячейки памяти с который будем писать;
   01 - секунды;
   17 - минуты;
   13 - часы;
   01 - день недели (понедельник);
   30 - число;
   11 - месяц (ноябрь);
   15 - год
 Будет установлена дата: 30 ноября 15-го года 13:17:01

Получение температуры чипа: Запрашиваем 0x11 регистр данных: xD011 x - префикс шеснадцатиричной команды; D0 - номер I2C устройства для записи данных; 11 - адрес регистра данных; Читаем два байта от запрошенного адреса: xD102 x - префикс шеснадцатиричной команды; D1 - номер I2C устройства для записи данных; 02 - длина записи в байтах Результат: OK - подтверждение отправки первой команды 0x1C - 28 градусов цельсия 0x80 - еще 0.5 градусов цельсия, и того 28.5 градусов.

Прочитать текущее время: xD000 xD103 - Секунды, минуты, часы.

Установить на выходе SQW импульсы 1 Hz xD00E00 - В регистра состояния азаписываем 0;

Включить первый будильник: xD00E05 - В регистр 0E пишем b00000101 bit 2 - INTCN - генерация импульсов/будильник bit 1 - A2IE - включить второй будильник bit 0 - A1IE - включить первый будильник

Первый будильник раз в минуту: xD00700808080 - начиная с седмого ригистра пишем: b00000000 - срабатывать в 0 секунд; b10000000 - на минуты забить; b10000000 - на часы забить; b10000000 - на дни и все такое то же забить. После каждого срабатывания будильника нужно сбрасывать бит 0 регистра 0F

Регистры чипа DS3231 (шоб не искать каждый раз).
АДРЕС  BIT 7    BIT 6   BIT 5   BIT 4   BIT 3   BIT 2   BIT 1   BIT 0    ФУНКЦИЯ    ДИАПАЗОН
        MSB                                                      LSB
0x00     0    |   10-ки секунд        |        едениницы секунд        | Секунды     00-59
0x01     0    |   10-ки минут         |        еденицы минут           | Минуты
0x02     0    |12/!24 | !AM/PM|  0-4  |        еденицы часов           | Часы        1-12 + !AM/PM
              |       |  0-2  |       |                                |             00-23
0x03     0    |   0   |   0   |   0   |   0   | День недели            | День недели 1-7  
0x04     0    |   0   |      0-3      |       | День месяца            | День месяца 01-31
0x05 Век(пере-|   0   |   0   |  0-1  |          Месяц                 | Месяц/пере- 01-12 + 
     полнение                         |                                | ход века     век(128)
     годов)                           |
0x06         10-ки лет
0x07    A1M1  |   10-ки секунд        |        едениницы секунд        | Будильник 1 секунды 00-59
0x08    A1M2  |   10-ки минут         |        едениницы минут         | Будильник 1 минуты  00-59
0x09    A1M3  |12/!24 | !AM/PM|  0-4  |        еденицы часов           | Будильник 1 часы    1-12 + !AM/PM
              |       |  0-2  |       |                                |             00-23
0x0A    A1M4  |Еженед.|    десятки    |        День недели             | Будильник 1 день  1-7         
               Ежемес.|               |        День месяца             |                   1-31
0x0B    A2M2  |   10-ки минут         |        едениницы минут         | Будильник 1 минуты  00-59
0x0C    A3M3  |12/!24 | !AM/PM|  0-4  |        еденицы часов           | Будильник 1 часы    1-12 + !AM/PM
              |       |  0-2  |       |                                |             00-23
0x0D    A4M4  |Еженед.|    десятки    |        День недели             | Будильник 1 день  1-7         
              |Ежемес.|               |        День месяца             |                   1-31
0x0E   !EOSC  |BBSQW  | CONV  | RS2   | RS1   | INTCN |   A2IE | A1IE  | Контрольный регистр
0x0F    OSF   |   0   |   0   |   0   |EN32kHz|  BSY  |  A2F   | A1F   | Контрольный/Статусы
0x10    ЗНАК  | DATA  | DATA  | DATA  | DATA  | DATA  | DATA   | DATA  | Корректировка хода
0x11    ЗНАК  | DATA  | DATA  | DATA  | DATA  | DATA  | DATA   | DATA  | Целые температуры
0x12    DATA  | DATA  |   0   |   0   |   0   |   0   |   0    |   0   | Дробная часть температуры
                                                                         0.0,0.25,0.5,0.75

*Настройки переодичности будильников в документации к чипу

AT24C32 I2C адрес чипа:

| 1 | 0 | 1 | 0 | A2 | A1 | A0 | R/W |

По умолчанию: AE - запись, AF - Чтение.

 Запись одного байта eeprom:
   xAE000001
     x  - префикс шеснадцатиричной команды;
     AE - номер I2C устройства для записи данных;
     0000 - адрес памати eeprom (0x0000-0x0FFF);
     01 - байт данных.
 За одну операцию можно записать не более 32-байт.

 Чтение eeprom:
   xAE0000  - Встать на ячейку 0000
   xAF01    - Прочитать один байт из eeprom

About

Work with zs-042 (DS3231) at avr-gcc

Resources

Stars

Watchers

Forks

Packages

No packages published