Почему чипы часов реального времени используют BCD

Я видел десятки различных чипов часов реального времени на рынке, а также ряд процессоров со встроенным модулем часов реального времени с автономным питанием.

Почти все из них не только сохраняют время как year-month-day-hours-minutes-seconds, но даже отдельные поля хранятся в BCD, а не в двоичном формате.

Есть ли основания для этого?

Существуют ли какие-либо микропроцессорные приложения, которые делают что-то более сложное, чем просто отображать часы, где формат BCD более полезен, чем двоичный, или формат year-month-day-hour-minutes-seconds будет более полезным, чем прямой 47 -битный счет состояния осциллятора?

Из того, что я могу сказать, кажется, что производители RTCC добавляют много дополнительных схем, чтобы сделать их чипы менее полезными; единственная причина, по которой я могу понять, что модули RTCC в процессорах должны вести себя так, заключается в том, что производители процессоров используют некоторую ранее существующую реализацию BCD, а не создают свои собственные.

rtc
12 голосов | спросил supercat 5 PMpTue, 05 Apr 2011 20:48:57 +040048Tuesday 2011, 20:48:57

6 ответов


11

Используют ли все RTC кодирование BCD?

RTC от Philips /NXP (как автономные, так и интегрированные в чипы ARM7 или Cortex-M3) не используют кодирование BCD.

Что случилось с BCD RTC?

По сравнению с плоским счетчиком единственными операциями, которые сложнее с разделенными BCD-часами, являются расчеты разницы во времени (добавление секунд или вычисление прошедшего времени). Сравнения времени, такие как: «текущее время, превышающее время тревоги, установленное пользователем», также просты.

Что хорошего в BTC (и вообще сплит-поле) RTC?

Разделение полей действительно приятно, когда вы занимаетесь календарной датой. Календари человека имеют забавные вещи, такие как месяцы разной длины и в дополнение к этим високосным годам. Попытайтесь сделать это в одном счетчике (вы можете получить бонусную точку для почти бездействия). О, и попробуйте поддерживать недельные дни (весьма полезно для всех видов устройств, предназначенных для людей: от будильников до контроллеров обогревателей).

У подхода BCD есть одна дополнительная функция: вы получаете «каждую секунду» или «каждые десять секунд» прерывания бесплатно, без необходимости делать какие-либо расчеты по времени или датам.

Для рекордного периода високосного года в RTC NXP немного меньше, так как он заботится только о делимых по 4 правилам и не проверяет деление на 100 и 400. Если он сохранит счетчик года в BCD, это будет тривиально и, скорее всего, сделано правильно.

Резюме

  1. Если вы хотите использовать монотонные часы, используйте его. Вы можете купить PIC или AVR с помощью «счетчика RTC» (который представляет собой просто асинхронный счетчик с автономным генератором 32 кГц). Просто имейте в виду, что просто показывать дату будет сложно. :)

  2. Когда вам нужно отобразить время и дату и установить аварийные сигналы на основе пользовательского ввода времени и дат, используйте RTC. И помните, что когда пользователь меняет текущее время и дату, ваши прерывания, основанные на RTC, могут быть неточными.

ответил jpc 6 AMpWed, 06 Apr 2011 02:46:48 +040046Wednesday 2011, 02:46:48
3

При использовании часов в конце вы, скорее всего, будете интересоваться минутами и десятками секунд (к их отображению), чем просто количество секунд, минут и т. д. Если вас не интересуют отдельные цифры, возможно, вы не заботитесь о отдельных минутах или секундах, и вы также можете использовать длинный двоичный счетчик, как вы предложили.
Легче конвертировать из BCD в двоичное программное обеспечение, чем наоборот. И поскольку счетчики BCD не требуют такой дополнительной недвижимости по бинарным счетчикам, имеет смысл выбрать для BCD.

ответил stevenvh 5 PMpTue, 05 Apr 2011 21:14:36 +040014Tuesday 2011, 21:14:36
3

Я подозреваю несколько причин:

Исторический - они делали это так уже некоторое время. Если вы хотите, чтобы ваша новая часть заменила какую-либо другую часть, тогда она должна работать более или менее. Таким образом, вы поддерживаете BCD.

Приложение - если кто-то использует RTC из небольшого микро (что-то в 8-битном диапазоне, например, в младшем ПОС), то иметь дело с большим количеством (например, с вашим 47-битным счетчиком) - большая боль в шея. Намного проще иметь дело с цифрами BCD, так как вам не нужно работать над разрывом.

Не так сложно - делать счетчики BCD не так уж сложно, и на самом деле я думаю, что это не так много, чем двоичные.

Можно представить себе систему, в которой вы получаете отдельные счетчики часов, минут и т. д. в двоичном формате вместо BCD (таким образом, избегая «разбить проблему с 47-разрядным номером»), но это не намного проще, и вы идете чтобы сделать некоторые преобразования при показе вещи в любом случае.

ответил Michael Kohne 5 PMpTue, 05 Apr 2011 22:07:00 +040007Tuesday 2011, 22:07:00
1

Я согласен с Майклом Коне, что есть много исторического момента.

У ранних MCU также было намного меньше места для кода и данных (например, 128 BYTES ОЗУ). Поскольку информация о времени часто используется для целей взаимодействия человека, имеет смысл держать данные ближе всего к формату, используемому для отображения /ввода от людей.

Некоторые новые MCU с большим количеством кода и пространства данных иногда реализуют аппаратные счетчики реального времени - эти устройства часто содержат двоичные числа с отметками 32 кГц.

ответил Toybuilder 6 AMpWed, 06 Apr 2011 01:59:50 +040059Wednesday 2011, 01:59:50
0

В случае, если кому-то интересно, я просто смотрю на ST 32F серии, и кажется, что, в то время как новые 32L серии используют BCD RTC, 32F использует прямой 32-разрядный счетчик с настраиваемым прескаляром и обеспечивает отдельный вход для батареи для него (Ура!). Я бы предпочел иметь более длинный прямой счетчик без настраиваемого прескалара (так что я мог бы получить точность 1/256 сек, но не трать время на годы, не беспокоясь об обертывании), но если бы я должен был установить предварительную шкалу для 1 /64сек, таймер мог бы работать два года без переполнения. Не идеально, но не так уж плохо. Немного неэстетично, что если кто-то запустит машину после того, как она отключится слишком долго (2,1 года), время /дата не поддаются на заметку на 2,1 года, но вряд ли серьезная проблема (счетчик имеет флаг переполнения, но в во многих случаях это было бы не очень полезно. Если бы машина работала в течение двух лет до выключения питания и три месяца спустя она включалась, таймер, как ожидается, переполнился бы, вопрос состоял бы в том, переполнял ли он дважды, и я не знаю ни одного флага для этого.

ответил supercat 8 PMpFri, 08 Apr 2011 18:54:52 +040054Friday 2011, 18:54:52
0

Максим, похоже, делает именно то, что вы хотите с DS1372U . Он нужен менее 1 мкА, стоит 1,7 доллара США и доступен (!) На DigiKey и Mouser. Единственная проблема заключается в том, что он не предлагает сигналы тревоги с точностью более 1 секунды, а самая низкая выходная тактовая частота составляет $ \ approx $ 4kHz.

ответил jpc 9 AMpSat, 09 Apr 2011 01:05:23 +040005Saturday 2011, 01:05:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132