Число 23 хранится в микросхеме в двоично-десятичном формате. Т.е 2 = 0b0010 и 3 = 0b0011, т.е. реально в регистре микросхемы лежит число 0b00100011 = 0x23 = 35.
Для чисел меньше 10 всё совпадает, потом начинается разница:
и т.д. На каждую десятку нарастает лишняя шестёрка.
Раньше Вы писали совсем неправильно, например
Код:
else if (week == 00011) lcd_string("TUE",3);
Тут нужно было писать не 00011, а 0b00011. В языке C числовая константа, начинающаяся с 0 интерпретируется как восьмеричная (равно как 0b - двоичная, 0x - шестнадцатеричная). Поэтому, 11 в восьмеричной системе - это девятка. Естественно, такого дня недели нет. Такая неправильная запись срабатывала бы только для воскресенья, которое = 1 во всех системах счисления. Остальные дни давали бы числа большие или равные 8 (010 = 8, 011 = 11, 0100 = 64 и т.д).
А в DS1307 можно записывать данные чтоли в двоичной системе, шестнадцатеричной и десятичной...? Так а как же тогда записать, например, ту же дату 23.02.2015, чтобы потом ее прочитать, вывести на экран и увидеть именно 23.02.2015?
Чтобы записать туда 23.02.2015, нужно: - в ячейку даты записать 0x23 = 35, - в ячейку месяца записать 0x02 = 2, - в ячейку года записать 0x15 = 21. При чтении - прочитав из даты 35, преобразовать 32 = 0x23 в число 23, - прочитав из месяца 2, преобразовать 2 = 0x02 в число 2, - прочитав из года 21, преобразовать 21 = 0x15 в число 15. Прямое и обратное преобразование можно сделать теми же макросами
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
А в DS1307 можно записывать данные чтоли в двоичной системе, шестнадцатеричной и десятичной...? Так а как же тогда записать, например, ту же дату 23.02.2015, чтобы потом ее прочитать, вывести на экран и увидеть именно 23.02.2015?
Писать-то и читать можно хоть в какой системе. Другое дело, что сами часы считают время и дату в двоично-десятичной. То есть, после 0x09 в часах наступает не 0x0A, а 0x10. То есть, если читать оттуда без преобразований в десятичной системе (записав в ней же), то после 9-й секунды сразу наступает 16-я и т.д.
В то же время там в каждой ячейке свой модуль счета и служебные добавки - в любом случае первичное выделение информации с последующим преобразованием. То же касается и обратного процесса - записи в ячейки часов/календаря - предварительная обработка данных, добавление сохраненных служебных флажков и уж после того - запись в ОЗУ. Так что простой подход к "чистой" системе счисления тут может и не дать результата...
Скажем, 7-й бит секунд - остановка часов. Если писать туда 0b1xxxxxxx - часы остановятся. Если просто писать туда секунды - мы будет всегда затирать этот бит, поэтому по большому счёту корректнее учитывать его состояние, а не просто затирать.
Аналогично - 6 бит часов, отвечающий за 12/24 режим. Если просто писать туда время - мы затрём этот бит и выйдем в 24-часовой режим. Хотя кому-то может понадобиться 12-часовой с PM/AM - и тут уже без учёта бита не обойтись.
WiseLord, операции с маской неведомы ? Так же неведома работа со строками ASСII , что в случае с bcd прямо таки и напрашивается вместо магически-навороченных манипуляций . ЗЫ. дедушку BOB51 не трожьте , он навечно погряз в асме 51го ...
Скажем, 7-й бит секунд - остановка часов. Если писать туда 0b1xxxxxxx - часы остановятся. Если просто писать туда секунды - мы будет всегда затирать этот бит, поэтому по большому счёту корректнее учитывать его состояние, а не просто затирать.
Аналогично - 6 бит часов, отвечающий за 12/24 режим. Если просто писать туда время - мы затрём этот бит и выйдем в 24-часовой режим. Хотя кому-то может понадобиться 12-часовой с PM/AM - и тут уже без учёта бита не обойтись.
, а названии указано " DS1307Z+T&R, Часы реального времени, будильник, ОЗУ 56-бит, последовательный интерфейс, 3В, 500нА" А как там реализована функция будильника? Неужели туда можно ввести текущее время, целевое время, и, по достижении первым второго часы что то сделают (они же не могут в роли Master выступать?)
Заголовок сообщения: Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Добавлено: Пт фев 27, 2015 11:33:11
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19693 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
4elovek37 писал(а):
А как там реализована функция будильника? Неужели туда можно ввести текущее время, целевое время, и, по достижении первым второго часы что то сделают (они же не могут в роли Master выступать?)
У 1307 вроде нет будильника. У 1337 есть, там отдельная нога прерывания.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Добавлено: Пт фев 27, 2015 12:47:55
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19693 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:1 Медали: 1
Напрямую, там же даже в ДШ нарисовано. И лучше кварц с нагрузочной ёмкостью 12,5 пФ.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Спасибо за советы. Запрограммировал SMBus, вроде бы даже работает По крайней мере записать - прочитать записанное из регистра часов получается. Пишу интерфейс для их настройки, по задумке пользователь вводит Минуты-Часы-Дата-Месяц-Год-ОК, дальше часы стартуют стартуют с 0 секунды. Возникла непонятка с днем недели (который 1-7) - если я его инициализирую нулями, а все остальное выставлю корректно - часы будут нормально идти? Он случайно сам не сможет настроиться (про календарь в ДШ ничего не видел, но мало ли) - что бы мне потом из него можно было день недели прочитать? Или все таки для этого придется заставлять юзера вводить и этот параметр?
Заголовок сообщения: Re: Всё по DS1307 и прочим часам Dallas (Maxim)
Добавлено: Чт мар 05, 2015 11:12:27
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19693 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Чо-й то мне кажется, что это обычный счётчик от 1 до 7 и на остальной календарь ему пох, он просто тикает каждую полночь. И если вы его нулём шарахните, он будет считать так: 0-1-2-...-7-1-...
Цитата:
пользователь вводит Минуты-Часы-Дата-Месяц-Год-ОК
Это жестоко. Обычно время отдельно, дата отдельно.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Это жестоко. Обычно время отдельно, дата отдельно.
Я заставлю пользователя страдать (тут должен звучать смех доктора зло) А если серьезно, то данную операцию ему придется проделать всего один раз, при первом запуске устройства. Дальше при любом включении устройство будет забирать дату время из часов. Думаю в ОЗУ у них флаг разместить, его и будем спрашивать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения