2015-01-09 10 views
0

Я работаю над регистратором данных, который должен безопасно как можно больше времени автономной работы. Поэтому регистратор (чип ATmega 328P) укладывается в сон, и все работает нормально. Теперь я хочу расширить установку с помощью модуля RTC (DS3231), чтобы получить информацию о времени для каждого измерения.ATmega: просыпаться ATmega с внешним RTC

Теперь мой вопрос: как я могу разбудить чип внешним RTC или это просто невозможно. Я узнал, что чип, даже в режиме пониженного энергопотребления, может быть разбужен внешним событием. Но я не нашел способ, как это сделать с помощью RTC. Может быть интересно, что регистратор настроен для проведения измерений один раз в час.

Спасибо за каждый намек!

(PS: Для всех супергероев там, перед тем как начать голосование по голосу, мой вопрос: ДА Я бесполезен, и я должен быть глуп, чтобы разрешить любой вопрос, НО Я НЕ УХОДИТ!)

+1

DS3231 имеет сигнал INT/SQW, который вы можете запрограммировать и привязать к прерыванию смены выводов на MCU (разомкнутый сток, поэтому не забывайте подтягивать). В качестве альтернативы вы можете полностью отключить регулятор/питание, разрешив прерывание RTC снова – doynax

ответ

2

Как уже упоминалось в комментариях, вы можете использовать сигнал INT/SQW для регулярного пробуждения ATmega через внешнее прерывание./SQW сигнал INT В DS3231 RTC модуля может быть вызвано одной из двух встроенных времени/даты тревоги (DS3231 datasheet):

Аварийные сигналы могут быть запрограммированы (по тревоге включения и INTCN биты регистра управления) для активации выхода INT/SQW в состоянии соответствия сигнала тревоги.

Шаги, необходимые для запуска сигнала прерывания DS3231 в каждый полный час являются

  • ясно, зарегистрировать 0x0B (Alarm 2 минуты) (в том числе маски бита A2M2)
  • установить бит маски A2M3 (бит 7 в 0x0c)
  • установить бит маски A2M4 (бит 7 в 0x0D)
  • включения сигнала тревоги 2 путем установки A2IE (бит 1 в 0x0E)
  • включить сигнал прерывания DS3231, установив INTCN (бит 2 в 0x0E).

Это будет вытаскивать штырь INT/SQW каждый час. Тревога 1 могла бы использоваться так же, как и для нее, но для этого необходимо установить один дополнительный регистр.

Настройка прерывания INT0 INT1 или INT1 для запуска на низком уровне должна делать трюк.

Из ATmega 328P datasheet секции 12:

прерывания низкого уровня по INT0 и INT1 обнаружена асинхронно. Это означает, что это прерывание можно использовать для пробуждения части также из режимов сна, кроме режима ожидания.