Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/59: Рейтинг темы: голосов - 59, средняя оценка - 4.75
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
1

Работа с датами для ATmega

29.01.2010, 20:02. Просмотров 10716. Ответов 13
Метки нет (Все метки)

Как я уже писал, я делаю супер монстра. Написал кучку функций работы с датой. Если кому интересно, могу продолжить.

Ну, например, количество дней в месяце (DT_MONTH):

Параметры - месяц (DT_MONTH) и високосность года (DT_LEAP), которое 1 в високосном году или 0 в обычном:

Размер: 11 слов
Время: от 5 до 7 тактов + ret

Код
KaDtMonthDays:
cpi     DT_MONTH, 2
breq    _KaDtMonthDays_feb

cpi     DT_MONTH, 8
brlo    _KaDtMonthDays_aug
dec     DT_MONTH

_KaDtMonthDays_aug:
omdi    DT_MONTH, 1
subi    DT_MONTH, -30
ret

_KaDtMonthDays_feb:
mov     DT_MONTH, DT_LEAP
subi    DT_MONTH, -28
ret
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2010, 20:02
Ответы с готовыми решениями:

Макетная плата для Atmega 32?atmega 8
Здравствуйте !Уважаемые мастера нужна помощь (а именно нужна схема макетной платы для меги 32 и...

Работа по шине CAN Atmega 64M1
Здравствуйте. Помогите пожалуйста разобраться с работой по шине CAN (V2.0A интересует) на...

rsa для atmega
Люди, помогите написать реализацию RSA 128 bit для atmega. Необходимо шифрование и генерация...

ATmega для Arduino
Здравствуйте! Сделал себе на днях Arduino. Когда дело дошло до контроллера я обзвонил все...

LCD для ATmega 32
Здравствуйте, учусь программированию микроконтроллеров, и решил выполнить банальную задачу вывод...

13
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
29.01.2010, 21:33 2
А в «Юлианскую Дату» и обратно перевод есть?
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
30.01.2010, 01:40 3
Нету. Просто не знаю, зачем это нужно. Если считать количество дней, то нужно знать страну (они все в разное время переходили).

По хорошему, тогда надо переходить на линейную дату, боюсь мозги 64 битную арифметику плохо потянут (по времени).
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
30.01.2010, 21:34 4
Вот я ж и написал. Не«Юлианский Календарь», а «Юлианская Дата». Вот что про неё пишут:
Юлианская дата - это количество дней, прошедших с полудня 1-го января 4713 г. до н.э. Эта дата произвольна и была избрана лишь для согласования различных систем летоисчисления.
То бишь, линеиризованное представление времени... Про него и спрашивал.
Как сказано выше, отправная точка может быль любой, вплоть до 1 января 2000г. Тогда 64бита не потребуется.
0
30.01.2010, 21:34
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
31.01.2010, 02:58 5
Про такой день - не знал. Но всё равно преобразование должно идти через линейную дату. Может быть, когда нибудь напишу, но не для этого изделия.
0
swk
0 / 0 / 0
Регистрация: 22.10.2015
31.01.2010, 14:01 6
В некоторых системах биллинга (например, американских телексных станций) используется "Юлианская дата" (порядковый номер дня от начала текущего года). Для нас они потом дополнительно по нашей просьбе сделали еще поле и в формате ДеньМесяцГод. Я в 90х годах в своих программах обсчета биллинга делал типа календарика для пересчета дат туда и обратно. К примеру, 17 декабря прошлого года в нем выглядит как 352.
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
31.01.2010, 15:20 7
Не, юлианская дата - это несколько не то - это количество дней с ... (ArkusB там выше написал), причем дата в плавучке. А порядковый номер дня я и так вычисляю - это нужно для вычисления дня недели при установке часов и просмотре календаря. Хотя... , американцы многое не так называют.
0
DiVOuR
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 111
31.01.2010, 18:39 8
А Вот это дело на АВР_асме никто не реализовывал?
Т.е. получить чудо-пакет, и пересчитать его в текущее время/дату.
0
swk
0 / 0 / 0
Регистрация: 22.10.2015
31.01.2010, 19:36 9
Еще оригинальный формат даты используется в UNIX. Там за точку отсчета принята дата официального "рождения" этой системы (что-то вроде в 1970г). С тех пор и тикают системные таймеры, считая тики с того момента в одном длинном числе. Счетчик этот переполнится кажется в 2036 году... Была у меня морока с этим форматом при работе с некоторыми сетевыми базами.
У американцев все не как у людей. Дюймы, футы, барели... Хотя Метрическую Конвенцию в 19 веке в Париже они подписали в числе 10 стран (в том числе и Россия). Но американцы никогда не выполняют законов, которые подписывают...
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
31.01.2010, 20:56 10
Подобный формат используется вообще везде, где есть время. И у виндов похожий формат, там единицей является микросекунда, начало аж в 1601 году.
http://msdn.microsoft.com/en-us/library/ms724284%28VS.85%29.aspx
FILETIME Structure
Contains a 64-bit value representing the number of 100-nanosecond intervals symse January 1, 1601 (UTC).
Линеиризованный формат времени хорош тем, что позволяет производить арифметические действия над временем.

2 THI BIOST В плавучке? Имеется в виду флоат? На он тут нужен, время от природы целочисленное.
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
01.02.2010, 00:09 11
Цитата Сообщение от DiVOuR
А Вот это дело на АВР_асме никто не реализовывал?
Т.е. получить чудо-пакет, и пересчитать его в текущее время/дату.
Что-то я не понял, про какой пакет идёт речь. Если про структуру tm - там уже всё есть, нужно просто вывести. Все "железные" часы (RTC) используют похожий формат, ну может только в BCD.

Цитата Сообщение от ArkusB
Линеиризованный формат времени хорош тем, что позволяет производить арифметические действия над временем.
Но, к сожалению, совсем не располагает к пересчёту его в "нормальный" вид. Для PC у меня есть собственная библиотека работы с линейными датами практически всех форматов, а вот для AVR это слишком жёстко по математике. Для AVR я использую структуру, похожую RTC и увеличиваю её каждую секунду. Худший случай - 153 такта.

Цитата Сообщение от ArkusB
2 THI BIOST В плавучке? Имеется в виду флоат? На он тут нужен, время от природы целочисленное.
Ну да, целочисленное, количество 9 192 631 770 периодов излучения... (можно и в них линейное время считать). Вот только астрономы считают юлианскую дату как число дней + дробное время дня. Кстати, так же (в флоат) считает/хранит время VBO.
0
DiVOuR
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 111
01.02.2010, 00:59 12
Цитата Сообщение от THI BIOST
Что-то я не понял, про какой пакет идёт речь.
Пакет - бо обычно время получают с какого либо сервера, то я так неявно выразился. Имеется ввиду всемирное время = к-во секунд с 1-го января 00:00:00 01.01.1970-го года в hex.
В принципе там ничего сложного. Я в течении недели-двух доберусь до этого момента - синхронизации времени с сервером, на авр_асме.
К тому же, уже делал такое на Delphi.

Просто спросил для галочки. :)
А там, смотри, и код кто-то выложит :-Р То не буду велосипед изобретать :))
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
01.02.2010, 01:37 13
Окидоки. Тогда, как изобретешь, велосипед - в студию?
0
DiVOuR
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 111
01.02.2010, 01:46 14
Без проблем :)

Вы не подумайте, я вообще никогда не клянчу готовые решения.
Но если есть возможность заюзать что-то готовое, которое работает - то естественно, как и многие здесь, я ее использую.
И всегда, начиная делать что-то, что уже 100% когдато писалось кем-то я гуглю , долго и упорно :)

Как в инсте научили :)
0
01.02.2010, 01:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2010, 01:46

BCD преобразования для ATmega
Понадобилось мне тут с RTC работать. Формат у всех - BCD. Естественно, нужно конвертировать BCD в...

Драйвер для mEDBG - ATmega Xplained
Решил посмотреть, что это такое - AVR, взял платку ATmego328P Xplained и обломался. В принципе, она...

Применение max485 для связи нескольких atmega
по совету на форуме обзавелся max485 для связи avr-ок прошу меня поправить если что-то не верно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru