RTC в atmega164

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

RTC в atmega164

Сообщение igor-x »

Добрый день

поясните пож. работу RTC .
по даташиту мне стало ясно , что для работы используется дополнительный кварц на 32 кгц, и таймер-2.
не понятно следующее - как ведется счет минут,часов,дней, лет, и т.п. или же это нужно вычислять програмно , исходя из значения таймер-2?

--
Спасибо.
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: RTC в atmega164

Сообщение GP1 »

только программно
обычно таймер настраивают на 1 или 0,5 сек и в прерывании считают
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: RTC в atmega164

Сообщение igor-x »

GP1 писал(а):только программно
обычно таймер настраивают на 1 или 0,5 сек и в прерывании считают
то есть, если МК занят чемто и пропущено прерывание, то возникнет ошибка во времени?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: RTC в atmega164

Сообщение Engineer_Keen »

Если все сделано правильно прерывание не может быть пропущено, на то оно и прерывание.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: RTC в atmega164

Сообщение GP1 »

покажи мне ту задачу, которая будет непрерывно выполняться с временем больше чем 1 сек.
даже при 1 МГц тактовой за 1сек МК будет выполнять 700-800 ТЫСЯЧ инструкций.
задача программиста как раз в том и состоит чтобы грамотно распределить ресурсы
Чем дальше, тем больше становлюсь занудой...
Изображение
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RTC в atmega164

Сообщение Мастер Ломастер »

GP1 писал(а):покажи мне ту задачу, которая будет непрерывно выполняться с временем больше чем 1 сек.
к этим словам надо добавить "при запрещенных прерываниях".
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: RTC в atmega164

Сообщение GP1 »

Мастер Ломастер писал(а):к этим словам надо добавить "при запрещенных прерываниях".
я же ж написал: "непрерывно" :wink:
Чем дальше, тем больше становлюсь занудой...
Изображение
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RTC в atmega164

Сообщение Мастер Ломастер »

GP1 писал(а):
Мастер Ломастер писал(а):к этим словам надо добавить "при запрещенных прерываниях".
я же ж написал: "непрерывно" :wink:
я понял "непрерывно" буквально: for(i=0; i<1000;i++); будет непрерывно выполняться, пока не досчитает до 1000, т.е. последовательное исполнение программы будет задержано. а прерывания - "боковая" ветвь, и о них надо гооврить особо. имхо.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: RTC в atmega164

Сообщение igor-x »

GP1 писал(а):
Мастер Ломастер писал(а):к этим словам надо добавить "при запрещенных прерываниях".
я же ж написал: "непрерывно" :wink:
а если прерывание запрещено например на 10 мсек, и в это время приходит прерывание от часов - оно потеряется?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RTC в atmega164

Сообщение Мастер Ломастер »

igor-x писал(а):а если прерывание запрещено например на 10 мсек, и в это время приходит прерывание от часов - оно потеряется?
нет, не потеряется. хотя и 10 мс для запрета прерываний - это довольно много.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: RTC в atmega164

Сообщение Engineer_Keen »

Для каждого прерывания есть бит с своем регистре флагов. Так что потеряться может только если прерывание два или более раз успеет случиться.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: RTC в atmega164

Сообщение ploop »

igor-x писал(а): поясните пож. работу RTC .
по даташиту мне стало ясно , что для работы используется дополнительный кварц на 32 кгц, и таймер-2.
не понятно следующее - как ведется счет минут,часов,дней, лет, и т.п. или же это нужно вычислять програмно , исходя из значения таймер-2?
Это не RTC, это называется "асинхронный режим работы таймера". Когда таймер считает не импульсы от системной шины (которые кратны частоте кварца или другого источника), а от собственного генератора. Просто этот режим очень часто используют для реализации RTC.

Соответственно все вычисления нужно делать программно. Если всё организовать грамотно, не выполнять в прерываниях длительных действий, ничего не потеряется, точность хода будет зависеть только от кварца. Но при этом получаем кучу дополнительных фишек, например как программную коррекцию, переходы на зимнее/летнее время (актуально для наших братьев с Украины), и на что еще фантазии хватит.

Так же можно сделать RTC и от обычного "системного" кварца, используя 16-битный таймер в режиме CTC - ничего принципиально не изменится...
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RTC в atmega164

Сообщение Мастер Ломастер »

ploop писал(а):Так же можно сделать RTC и от обычного кварца, используя 16-битный таймер в режиме CTC - ничего принципиально не изменится...
кроме возможности значительно экономить энергию путем погружения МК в сон - при работе от обычных кварцев потребляется куда больше энергии, чем с часовым.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: RTC в atmega164

Сообщение ploop »

Кстати да, если будет использоваться спящий режим, то однозначно таймер в асинхронном режиме запускать надо.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: RTC в atmega164

Сообщение igor-x »

Мастер Ломастер писал(а): нет, не потеряется. хотя и 10 мс для запрета прерываний - это довольно много.
не потеряется - это хорошо, но возникнет отставание на 10 мсек(или менее ) - если я правильно понял,то после прерывания необходимо перезарядить таймер.?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: RTC в atmega164

Сообщение Мастер Ломастер »

igor-x писал(а):не потеряется - это хорошо, но возникнет отставание на 10 мсек(или менее ) - если я правильно понял,то после прерывания необходимо перезарядить таймер.?
не возникнет - с чего бы вдруг? при правильном построении программы и соответствующих настройках таймера ничего перезаряжать не потребуется.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: RTC в atmega164

Сообщение ploop »

igor-x писал(а):
Мастер Ломастер писал(а): нет, не потеряется. хотя и 10 мс для запрета прерываний - это довольно много.
не потеряется - это хорошо, но возникнет отставание на 10 мсек(или менее ) - если я правильно понял,то после прерывания необходимо перезарядить таймер.?
Нет, таймер же не останавливается, он продолжает считать, он железный.
Допустим прерывание происходит раз в секунду. И тут вдруг одно задержится на 0,1 сек (грубо, просто чтобы понять). Значит следующее возникнет через 0,9 сек, а не через 1 сек.

Только если у вас прерывание задержать на время больше секунды - одно потеряется (флаг-то один, он как стоял так и будет стоять). Но это надо на столько криворуким быть...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»