Я работаю над проектом ATMega, который будет держать время, и я пытаюсь сделать так, чтобы у вас была возможность выбора программных часов (на основе millis ()), DS1307 или DS3231 (ChronoDot).
Самое главное, что я хотел бы сделать - это иметь заголовки для ChronoDot, доступные для пайки, а затем каким-то образом программно определить, подключен ли ChronoDot и переключиться на его использование. Как правило, было бы достаточно легко проверить наличие DS1307 или DS3231, поскольку они используют один и тот же регистр I2C, но после этой первоначальной проверки они немного отличаются друг от друга, и у последнего есть больше функций. Поэтому я все еще хочу определить, с чем связано. В общем, я планирую иметь место непосредственно на плате для пайки в DS1307 в качестве опции по умолчанию, и поддержка DS3231 будет осуществляться с полным ChronoDot только через два 4-контактных разъема. ChronoDot, по существу, будет соответствовать тому месту, куда обычно направляется DS1307 (в этом случае он не будет заполнен). Основная причина, по которой я сосредотачиваюсь именно на ChronoDot, заключается в том, что он s популярный, легкий в приобретении и не требует пайки SMD для конечного пользователя (это если для набора). Итак, вот что я думаю ...
Оба DS1307 и DS3231 имеют линию Vbat на чипе, но это ни к чему не нужно. Тем не менее, ChronoDot имеет фактический контакт VBat на панели управления. Я мог бы подключить только Vbat из заголовка ChronoDot, а не DS1307, и подключить его к цифровому входному контакту на моей ATMega. Но нужно ли этот входной контакт подтянуть к земле резистором (не совсем понятно, какое значение ... может быть 4.7k?). Если моя теория ЭЭ верна, я могу прочитать этот вывод, и если я получу низкий уровень, то хронодот не будет, но если я получу высокий уровень, то он есть.
Что-то вроде этого:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Мой главный вопрос здесь заключается в том, приведет ли это просто к разряду резервного аккумулятора на RTC? Обычно при резервном питании от сети, 5 В, ток не будет потребляться, но будет ли подключение к цифровому входу вызывать постоянное потребление энергии от батареи? Или есть режим, в который мне нужно было бы вставить пин-код после чтения с него, чтобы, так сказать, «отключить» его? Я знаю, что могу изменить его на выход, но я верю, что если он установлен как выходной и низкий, я бы в основном заземлил аккумулятор.
В любом случае, мои курсы ЭЭ были очень давно . Любая помощь по теории здесь будет оценена.
Практически любая из этих схем измерения, включающая резисторы, если они оставлены постоянно подключенными, приведет к недопустимому потреблению тока и сокращению срока службы небольшой литиевой батареи, которая питает эти устройства.
Решение, таким образом, состоит в том, чтобы измерительная цепь потребляла ток только в течение коротких периодических интервалов, когда вы фактически выполняете измерение.
Для цифрового теста это может быть так же просто, как использовать внутреннее, настраиваемое программным способом раскрытие и только настраивать его как раскрытие в течение короткого периода времени, окружающего испытание. Однако вам нужно будет рассмотреть возможные осложнения наличия напряжения на выводе, когда MCU, выполняющий измерение, не включен / находится в режиме ожидания.
Аналоговое измерение будет сложнее, но могут быть применены аналогичные идеи. Например, вы можете подключить нижний резистор (высокого импеданса относительно входов / выходов) делителя напряжения к выходному контакту и подавать его на низкий уровень только в течение времени, окружающего измерение. Или вы могли бы даже создать RC-цепь с небольшим конденсатором с малой утечкой и одним выводом ввода / вывода, который вы могли бы подавать на низкий уровень в качестве выхода, а затем настроить в качестве аналогового входа и измерить напряжение через некоторое время. Если цифровое пороговое напряжение устройства является постоянным (следите за температурой!), Вы даже можете сделать аналоговое измерение с цифровым входом таким образом, измерив время, необходимое для зарядки конденсатора до порогового напряжения.
источник
DS3231 имеет внутреннюю температуру, которую вы можете прочитать. Вы можете выполнить команду через I2C для считывания температуры, если вы получили ответ, у вас есть DS3231, если нет, у вас есть DS1307.
источник