[Программирование микроконтроллеров] Особенности RTC M41T56
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
M41T56 это микросхема Real Time Clock, являющаяся аналогом популярной DS1307. И хотя даже цоколевка микросхем совпадает, у них есть существенные отличия, о которых я постараюсь рассказать.
Краткое описание
Я не буду останавливаться на работе шины IIC, отмечу только что обе микросхемы имеет адрес 0xd0. Для работы с временем микросхемы содержат семь регистров счета и регистр управления. Регистры счета содержат числа в двоично-десятичном формате, однако некоторые биты имеют особое значение.
Регистры
xxx — значение бита не определено.
функция
индекс
биты
возможные значения
7
6
5
4
3
2
1
0
секунды
0x00
ST
десятки секунд
единицы секунд
0 — 59
минуты
0x01
xxx
десятки минут
единицы минут
0 — 59
часы
0x02
SEB
SB
десятки часов
единицы часов
0 — 23
день
0x03
xxx
xxx
xxx
xxx
xxx
день недели
1 — 7
день месяца
0x04
xxx
xxx
десятки дня
единицы дня
1 — (28|29|30|31)
месяц
0x05
xxx
xxx
xxx
дес
единицы месяца
1 — 12
год
0x06
десятки года
единицы года
0 — 99
регистр управления
0x07
OUT
FT
S
величина коррекции
-
Биты
x — после включения состояние бита может быть любым.
бит
после сброса
описание
ST
x
При записи 1 в этот бит генератор останавливается
CEB
x
Когда бит CEB (Century Enable Bit) установлен, то при достижении нового века бит CB (Century Bit) поменяет значение на противоположное.
CB
x
OUT
1
Когда биты OUT (OUTput level) и FT (Frequency Test) равны нулю, вывод FT/OUT прижимается к земле. При FT=1 на выводе FT/OUT 512 Гц и бит OUT не имеет значения.
FT
0
S
x
Знак калибровки хода RTC.
Различия начинаются в назначении битов 7, 6 и 5 регистра часов. В M41T56 биты 7 и 6 используются для индикации перехода в новое столетие, а биты 5 и 4 используются для счета десятков часов. Причем счет часов возможен только в режиме 24, режим AM/PM недоступен. В DS1307 бит 7 не используется, ноль в бите 6 указывает, что используется режим счета 24 и этом случае биты 5 и 4 содержат десятки часов. Если в бите 6 единица, то бит 5 становится флагом AM/PM, а бит 4 содержит десятки часов.
Существенные отличия есть в регистре управления, которой содержит слово коррекции хода.
Коррекция хода
M41T56 позволяет компенсировать погрешность кварцевого резонатора в диапазоне от -62 до +124 ppm, что дает отклонение не более чем ±5 секунд за месяц. За компенсацию отвечают шесть младших битов управляющего регистра. Биты 4-0 содержат целое число без знака величины коррекции, а бит 5 задает направление коррекции. Если бит 5 содержит ноль, то ход замедляется с шагом 2.034 ppm, в противном случае RTC ускоряется с шагом 4.068 ppm. Это неудобно, поэтому я набросал пару простых функций для преобразования из ppm в слово коррекции и обратно.
/* Маска для получения только значения калибровки без знака. */
#define MASK_CALIBER ((1<<4) | (1<<3) | (1<<2) | (1<<1) | (1<<0))
/* Маска для получения только значения калибровки без знака. */
#define MASK_CALIBER_SIGN (1 << 5)
/**
* Получение значения коррекции хода.
* @param caliber Калибровочное слово из RTC.
* @return Коррекция хода в ppm.
*/
int8_t caliber_to_ppm(uint8_t caliber)
{
int8_t result = caliber & MASK_CALIBER;
result = (uint8_t) result * 2;
if ((caliber & MASK_CALIBER_SIGN) != 0) {
result = -result;
} else {
result = (uint8_t) result * 2;
}
return result;
}
/**
* Получение калибровочного слова.
* @param ppm Коррекция хода в ppm.
* @return Калибровочное слово для RTC.
*/
uint8_t ppm_to_caliber(int8_t ppm)
{
uint8_t result;
if (ppm < 0) {
result = (uint8_t) (-ppm + 1) / 2;
result |= MASK_CALIBER_SIGN;
} else {
result = (uint8_t) (ppm + 2) / 4;
}
return result;
}
Детектирование сбоев
Ни DS1307, но M41T56 не умеют детектировать сбои генерации, но гарантируют, что при включении питания некоторые биты будут в определенном состоянии. M41T56 при включении в управляющем регистре будет 10xxxxxx. Для отслеживания сбоев в программе можно придерживаться следующего алгоритма. Если при включении микроконтроллера регистр управления RTC содержит 10xxxxxx, значит был сбой питания и в регистр нужно записать значение, старшие биты которого не равны 10. Самое простое — записать слово коррекции с битами 7 и 6 равными нулю.
Литература
===========
Источник:
habr.com
===========
Похожие новости:
- [FPGA, Высокая производительность, Параллельное программирование, Программирование микроконтроллеров, Электроника для начинающих] Как начать путь к работе по проектированию электроники FPGA космического корабля Blue Origin
- [DIY или Сделай сам, Программирование микроконтроллеров, Производство и разработка электроники, Разработка игр, Схемотехника] Doom Boy ESP32. Вторая итерация
- [Системное программирование, Программирование микроконтроллеров, Компьютерное железо] Моделируем поведение Quartus-проекта на Verilog в среде ModelSim
- [Программирование микроконтроллеров, Разработка робототехники, Робототехника, Системное программирование, Транспорт] Издатель/подписчик для распределённых отказоустойчивых бортовых систем реального времени в 1500 строк кода
- [Программирование микроконтроллеров] Отладка и программирование микроконтроллеров stm32f303, atmega328 через любой интерфейс, как через jtag
- [Браузеры, Видеоконференцсвязь, Расширения для браузеров, Сетевые технологии] Серверный WebRTC в 2020 году — обзор возможностей
- [Программирование микроконтроллеров, Производство и разработка электроники] История разработки одного дозиметра (Часть 2)
- [Программирование микроконтроллеров, Производство и разработка электроники, Разработка для интернета вещей, Схемотехника, Управление разработкой] Ветроэнергетика — это просто
- [Системное программирование, Программирование микроконтроллеров, Компьютерное железо] Делаем голову шинного USB-анализатора на базе комплекса Redd
- [FPGA, Haskell, Компиляторы, Программирование микроконтроллеров] Встраивание Haskell: компиляторы и компиляция компиляторов (перевод)
Теги для поиска: #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_rtc, #_m41t56, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:21
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
M41T56 это микросхема Real Time Clock, являющаяся аналогом популярной DS1307. И хотя даже цоколевка микросхем совпадает, у них есть существенные отличия, о которых я постараюсь рассказать. Краткое описание Я не буду останавливаться на работе шины IIC, отмечу только что обе микросхемы имеет адрес 0xd0. Для работы с временем микросхемы содержат семь регистров счета и регистр управления. Регистры счета содержат числа в двоично-десятичном формате, однако некоторые биты имеют особое значение. Регистры xxx — значение бита не определено. функция индекс биты возможные значения 7 6 5 4 3 2 1 0 секунды 0x00 ST десятки секунд единицы секунд 0 — 59 минуты 0x01 xxx десятки минут единицы минут 0 — 59 часы 0x02 SEB SB десятки часов единицы часов 0 — 23 день 0x03 xxx xxx xxx xxx xxx день недели 1 — 7 день месяца 0x04 xxx xxx десятки дня единицы дня 1 — (28|29|30|31) месяц 0x05 xxx xxx xxx дес единицы месяца 1 — 12 год 0x06 десятки года единицы года 0 — 99 регистр управления 0x07 OUT FT S величина коррекции - Биты x — после включения состояние бита может быть любым. бит после сброса описание ST x При записи 1 в этот бит генератор останавливается CEB x Когда бит CEB (Century Enable Bit) установлен, то при достижении нового века бит CB (Century Bit) поменяет значение на противоположное. CB x OUT 1 Когда биты OUT (OUTput level) и FT (Frequency Test) равны нулю, вывод FT/OUT прижимается к земле. При FT=1 на выводе FT/OUT 512 Гц и бит OUT не имеет значения. FT 0 S x Знак калибровки хода RTC. Различия начинаются в назначении битов 7, 6 и 5 регистра часов. В M41T56 биты 7 и 6 используются для индикации перехода в новое столетие, а биты 5 и 4 используются для счета десятков часов. Причем счет часов возможен только в режиме 24, режим AM/PM недоступен. В DS1307 бит 7 не используется, ноль в бите 6 указывает, что используется режим счета 24 и этом случае биты 5 и 4 содержат десятки часов. Если в бите 6 единица, то бит 5 становится флагом AM/PM, а бит 4 содержит десятки часов. Существенные отличия есть в регистре управления, которой содержит слово коррекции хода. Коррекция хода M41T56 позволяет компенсировать погрешность кварцевого резонатора в диапазоне от -62 до +124 ppm, что дает отклонение не более чем ±5 секунд за месяц. За компенсацию отвечают шесть младших битов управляющего регистра. Биты 4-0 содержат целое число без знака величины коррекции, а бит 5 задает направление коррекции. Если бит 5 содержит ноль, то ход замедляется с шагом 2.034 ppm, в противном случае RTC ускоряется с шагом 4.068 ppm. Это неудобно, поэтому я набросал пару простых функций для преобразования из ppm в слово коррекции и обратно. /* Маска для получения только значения калибровки без знака. */
#define MASK_CALIBER ((1<<4) | (1<<3) | (1<<2) | (1<<1) | (1<<0)) /* Маска для получения только значения калибровки без знака. */ #define MASK_CALIBER_SIGN (1 << 5) /** * Получение значения коррекции хода. * @param caliber Калибровочное слово из RTC. * @return Коррекция хода в ppm. */ int8_t caliber_to_ppm(uint8_t caliber) { int8_t result = caliber & MASK_CALIBER; result = (uint8_t) result * 2; if ((caliber & MASK_CALIBER_SIGN) != 0) { result = -result; } else { result = (uint8_t) result * 2; } return result; } /** * Получение калибровочного слова. * @param ppm Коррекция хода в ppm. * @return Калибровочное слово для RTC. */ uint8_t ppm_to_caliber(int8_t ppm) { uint8_t result; if (ppm < 0) { result = (uint8_t) (-ppm + 1) / 2; result |= MASK_CALIBER_SIGN; } else { result = (uint8_t) (ppm + 2) / 4; } return result; } Детектирование сбоев Ни DS1307, но M41T56 не умеют детектировать сбои генерации, но гарантируют, что при включении питания некоторые биты будут в определенном состоянии. M41T56 при включении в управляющем регистре будет 10xxxxxx. Для отслеживания сбоев в программе можно придерживаться следующего алгоритма. Если при включении микроконтроллера регистр управления RTC содержит 10xxxxxx, значит был сбой питания и в регистр нужно записать значение, старшие биты которого не равны 10. Самое простое — записать слово коррекции с битами 7 и 6 равными нулю. Литература =========== Источник: habr.com =========== Похожие новости:
Программирование микроконтроллеров ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:21
Часовой пояс: UTC + 5