DS3231SN перевод в 12ч формат

dbf-334
Offline
Зарегистрирован: 13.11.2015

Всем привет!

Копаюсь с микросхемой DS3231SN, с установкой времени и даты разобрался. Теперь пытаюсь перевести часы в 12ч формат времени, так как по умолчанию они работают в 24ч формате. Пока никак не получается, нужна помощь...

Пробовал обращаться напрямую к байту по адресу 0х02 микросхемы, где собственно мы устанавливаем или читаем значение ЧАСОВ. По документации нужно обратиться к 6-му биту по этому адресу и выставить значение 1 на нем, для перевода в 12ч формат.

Wire.beginTransmission(DS3231_ADDR); 
  Wire.write(0x02); 
  Wire.write(B01010001);
  Wire.endTransmission();

Здесь пробую выставить время равное 11-часам и переключить 6-й бит в 12ч формат. Но при работе часов (чтении из чипа времени) время вообще принимает левое значение 51:59:59, на следующей секунде получаем значение времени 72:00:00 вместо нужного мне 00:00:00. В младшей части байта указан один час - хххх0001, а в старшей части байта указан десяток часов и включен 12ч формат - 0101хххх. Т.е. должно по идее быть установлено 11 часов, но устанавливается 51час. Как изменить этот шестой бит по адресу 0х02 и правильно выставить время?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Возьмите библиотеку DS3231 и посмотрите как там это делается.

dbf-334
Offline
Зарегистрирован: 13.11.2015

ЕвгенийП пишет:

Возьмите библиотеку DS3231 и посмотрите как там это делается.

Спасибо, посмотрю...

dhog1
Offline
Зарегистрирован: 01.03.2016

Бит 6 позволяет трактовать бит 5. Если по-человечески, то для бит_6 = 1, значение бит_5 = 1 соответствует PM, бит_5 = 0 соответствует AM и не входит в значение часов. Для часов при AM/PM формате остается только бит_4, т.е. десятки часов.

Вы это знаете и делаете все правильно. B01010001 верно задает 11 часов AM (11 часов утра, не 23 вечера). Читать часы следует с маской 0x1F, и уже это значение переводить из BCD. PM или AM определять по маске 0x20.

 

dbf-334
Offline
Зарегистрирован: 13.11.2015

dhog1 пишет:

 Читать часы следует с маской 0x1F, и уже это значение переводить из BCD. PM или AM определять по маске 0x20.

Хорошо, попробую! :)