Встроенный RTC в ATmega328

Тема в разделе "Микроконтроллеры AVR", создана пользователем Колх, 27 сен 2015.

Метки:
  1. Колх

    Колх Нуб

    Как использовать встроенный в ATmega328 RTC (подключив к нему кварц) на Iskra Mini. Не хочется нагромождать внешний RTC модуль. Возможно ли это из-под стандартного бутлоадера и Arduino IDE?
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    в чипы ATmega328 - RTC не встроен, в серии Iskra тоже нет RTC. Что вы имели в виду?
     
  3. Колх

    Колх Нуб

    В таком случае, возможно я не так понял даташит на эту атмегу, а конкретно разделы 18.9 и 18.10
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    моя твоя не понимай...
    В наспех найденном на сайте Atmel даташите на Atmega38P нет разделов 18.9 и 18.10. В разделе 17.10 единожды упоминается аббревиатура RTC, но в качестве Real Time Counter, а не Real Time Clock.

    Тебе надо часы на встроенном осцилляторе? Это можно, но точность будет плавать +/- 3 мин в сутки, и при сбросе или сбое питания все данные пропадут, придется выставлять время заново.
     
  5. geher

    geher Гуру

    В даташите на Atmega 328 есть упоминание об RTC.
    Насколько я понял, это независимый асинхронный счетчик, работающий от внешнего кварца на 32.768kHz. И будет он тикать на втором таймере-счетчике (который обычно в ардуине задействован для поддержки ШИМ на каких-то там ногах, и, кстати, в отличие от нулевого, 8 битный).
    По сути это мало чем отличается от того, что тикает в ардуине на нулевом таймере, и от которого получает свое значение millis(). Ну разве вдруг чуть точнее окажется за счет подбора кварца и его обвязки.

    Чтобы заработало, насколько я понимаю, нужно заменить внешний кварц на часовой, перевести тактирование на внутренний 8 МГц осциллятор (ибо тактирование от 32.768 кГц выглядит странно) и включить соответствующий бит в ASSR. Возможно, придется также поменять конденсаторы в обвязке кварца. И не уверен, что не пропадет ШИМ на ногах, за которые отвечает второй таймер.
     
    Tomasina нравится это.
  6. Колх

    Колх Нуб

    Спасибо за доверие. Правда, я уже начинаю понимать, что этот вариант точно не точнее DS3231
    Есть ли возможность реализовать эту функцию чипа, но продолжив потом использовать Arduino IDE, учитывая, что ШИМ мне не пригодится?
    Как Вы считаете, есть ли смысл экономить 200р. на готовом модуле с DS3231, ради компактности устройства?
     
  7. geher

    geher Гуру

    В теории можно, но придется сделать некоторое количество вещей вроде учета другой тактовой, которая будет не 16 МГц, а 8. Возможно, что и другие особенности вылезут, о которых и не вспомнишь сразу. Не совсем понятно. что будет с последовательным портом, на который тоже тактовая влияет.
    Т.е. как минимум понадобится новое описание в boards.txt.
    И неясно, стоит ли вообще результат риска необратимо изувечить Искру мини. Разве что есть солидный навык пайки особо мелких SMD деталей.
    И опять же, ради чего? Ведь выигрыш в точности таких "часов реального времени" под вопросом, а полноценного функционала часов реального времени не будет. Будет просто таймер-счетчик. В частности, при пропадании напряжения питания такие "часы" будут терять текущее время.

    Если нет особых требований к точности, то проще воспользоваться библиотекой Time, которая реализует что-то вроде RTC на внутреннем таймере, включив, если возможно, периодическую синхронизацию от внешнего источника.
     
    Последнее редактирование: 27 сен 2015
  8. Колх

    Колх Нуб

    Да, я понимаю. По идее и нужен-то только таймер-счетчик. Но он должен знать и помнить время, чтобы определять ночь, а также включаться утром сам, без участия пользователя. Не требовать подстройки и замены питания как минимум месяц. Поэтому я и соблазнился на режим пониженного энергопотребления у чипа + собственный rtc, но вижу, подстраивать придется часто.