DS3231SN перевод в 12ч формат
- Войдите на сайт для отправки комментариев
Всем привет!
Копаюсь с микросхемой 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 и правильно выставить время?
Возьмите библиотеку DS3231 и посмотрите как там это делается.
Возьмите библиотеку DS3231 и посмотрите как там это делается.
Спасибо, посмотрю...
Бит 6 позволяет трактовать бит 5. Если по-человечески, то для бит_6 = 1, значение бит_5 = 1 соответствует PM, бит_5 = 0 соответствует AM и не входит в значение часов. Для часов при AM/PM формате остается только бит_4, т.е. десятки часов.
Вы это знаете и делаете все правильно. B01010001 верно задает 11 часов AM (11 часов утра, не 23 вечера). Читать часы следует с маской 0x1F, и уже это значение переводить из BCD. PM или AM определять по маске 0x20.
Читать часы следует с маской 0x1F, и уже это значение переводить из BCD. PM или AM определять по маске 0x20.
Хорошо, попробую! :)