реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Переход на зимнее/летнее время, AVRmega + DS1307
OlegH
сообщение Aug 16 2008, 19:44
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 14-01-06
Из: Украина, г.Харьков
Пользователь №: 13 168



Пусть есть девайс на AVR Mega, к которому подключен внешний RTC скажем типа DS1307.
Как лучше всего и экономнее по ресурсам организовать переход с зимнего на летнее время и наоборот, учитывая что девайс может быть как включен в момент перехода, так и выключен ?

Сообщение отредактировал Олег Хохлов - Aug 16 2008, 19:45
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2008, 19:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Олег Хохлов @ Aug 16 2008, 21:44) *
Пусть есть девайс на AVR Mega

Ну очень важная информация....
Цитата
Как лучше всего...

Сам RTC не трогать ни в коем случае (не уподобляйтесь, блин MS!), просто считав из него время при необходимости скорректируйте на лето. Все.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Flasher
сообщение Aug 16 2008, 20:17
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



Флаг ставить в памяти DS1307 - типа текущее время летенее или зимнее. Проверять на граничную дату, смотреть флаг и переводить часы и изменять флаг. Пару строчек кода.
Go to the top of the page
 
+Quote Post
*antzol*
сообщение Aug 16 2008, 20:20
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-11-07
Пользователь №: 32 085



Почему бы просто не зарезервирвать в eeprom контроллера память под флаг "текущее время" (лето или зима). А потом раз в сутки и при включении проверять дату из ds1307 и смотреть, попадает ли она в "текущее время", если нет, то корректируем время и меняем значение флага на противоположное. Места в программе это много не займет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2008, 20:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Flasher @ Aug 16 2008, 22:17) *
Флаг...

Нафига флаг-то - при бесхалтурном подходе (а не как выше предлагалось "раз в сутки") проверять лето/зима при каждом обращени к часам - это без вариантов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Amper25
сообщение Aug 16 2008, 20:33
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Метод zltigo самый простой и главное самый надежный.
Флаги и пр. вообще не нужны.

Сообщение отредактировал Amper25 - Aug 16 2008, 20:33
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2008, 20:34
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Flasher @ Aug 16 2008, 22:17) *
...переводить часы

За переводить часы сразу надо по рукам давать. Нормальный подход только один - часы идут по гринвичу всегда, а уж что у нас с локальным временем и летом это уже коррекция.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 16 2008, 20:36
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



zltigo прав: самое разумное -- держать в DS1307 только время.

Инициатором запросов времени однозначно будет клиентская часть программы МК (так называемая -- бизнес-логика). Думаю, что следует написать код так, чтобы запросы шли не непосредственно к DS1307 (через I2C), а к промежуточному коду, т.е к прослойке между аппаратурой и бизнес-логикой. Назовите этот код драйвером DS1307 и все встанет на свои места. Написать этот код не сложно, сложнее понять (объяснить самому себе) смысл/необходимость этого дополнительного кода.

В драйвере Вы можете прописть все, что хотите. Например, отвечать на запрос клиентской программы учитывая зимнее/летнее время. Зимнее/летнее время учитывается по критерию текущей даты и, соответственно, корректируется или не корректируется динамически при исполнении запроса. В драйвере Вы можете учтывать часовой пояс, который удобно хранить там же -- в ОЗУ DS1307.

Иначе говоря, наличие драйвера, даст Вам свободу маневра. А лезть с коррекцией в DS1307 -- право, не стоит.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Flasher
сообщение Aug 16 2008, 21:01
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



Пользователя при инициализации тоже просить ввести время по гринвичу?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 16 2008, 21:08
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Flasher @ Aug 16 2008, 23:01) *
Пользователя при инициализации тоже просить ввести время по гринвичу?

Необязательно совсем, каие проблемы пересчитать локальное?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 16 2008, 21:13
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(Flasher @ Aug 17 2008, 03:01) *
Пользователя при инициализации тоже просить ввести время по гринвичу?

ну если этот девайс подключен к инетнету, то, наверно, скорее "да", чем "нет". К сожалению, Олег Хохлов не уточнил, что за устройство.

А вообще
Цитата
В драйвере Вы можете учтывать часовой пояс...

выделенное слово следует понимать, как "если Вам это необходимо, то нет препятствий для ..."


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
OlegH
сообщение Aug 17 2008, 13:24
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 14-01-06
Из: Украина, г.Харьков
Пользователь №: 13 168



Цитата(zltigo @ Aug 16 2008, 22:48) *
Ну очень важная информация....


Сама по себе не очень, но имелась в виду определенная ограниченность в ресурсах (Mega16 уже забита процентов на 80% по коду).


Спасибо всем за высказанные мнения. Имевшиеся у меня сомнения по поводу:

Цитата(zltigo @ Aug 16 2008, 22:48) *
Сам RTC не трогать ни в коем случае (не уподобляйтесь, блин MS!), просто считав из него время при необходимости скорректируйте на лето. Все.


были вызваны только тем, что как я уже выше сказал мега уже почти забита, а функции арифметики над датой/временем, которые очевидно нужны для данного варианта реализации, компилируются на меге ну уж в очень печальный код по размеру и эффективности (посмотрел листинг-прослезился).
И коррекция времени нужна как при вычитывании времени из RTC, так и при записи времени в RTC.
Впрочем, я уже придумал как сделать это оптимальнее.


Цитата(zhevak @ Aug 17 2008, 00:13) *
ну если этот девайс подключен к инетнету, то, наверно, скорее "да", чем "нет". К сожалению, Олег Хохлов не уточнил, что за устройство.

А вообще

выделенное слово следует понимать, как "если Вам это необходимо, то нет препятствий для ..."


Девайс - ну вообще их несколько разных, но все - малые контроллеры, которые чем-нибудь автономным управляют. К интернету разумеется не подключены smile.gif Один например - центральный контроллер средств индикации типа светодиодных часов/ценников/стелл и т.д. Другой - самодельный бортовой комп для ВАЗ.

Сообщение отредактировал Олег Хохлов - Aug 17 2008, 13:26
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 17 2008, 13:34
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Олег Хохлов @ Aug 17 2008, 15:24) *
...а функции арифметики над датой/временем, которые очевидно нужны для данного варианта реализации, компилируются на меге ну уж в очень печальный код по размеру и эффективности (посмотрел листинг-прослезился).

Да ну? Что-же там можно такого большого и неэффективного написать, тем более, если не добавлять многочисленные правила перехода лето/зима и лунные календари...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 17 2008, 16:27
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Да вообще можно использовать DS1337 с её будильниками и отрабатывать прерывание- "стукнул" один - зима , другой -лето . А время держать в таблице- всё произойдёт автоматом - код минимальный.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Aug 18 2008, 08:08
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



третий раз в первый класс
http://electronix.ru/forum/index.php?showtopic=45647
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016