|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:08 am
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Преобразуване на данни от един вид в друг?!
| Автор |
Съобщение |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Преобразуване на данни от един вид в друг?!
Здравейте , заинатих се с един RТС да го чета и да изобразявам на дисплея час , дата , ден и година. Модела е DS2417. Направен е като 32-битов двоичен брояч , който може да се чете и записва по 1-Wire протокол на Dallas. Проблем при комуникацията нямам , но нещо с формата на данните недоумявам как ще стане работата? Въпроса е как от тези 32 бита да извлека секунди , минути и часове /тук може и да се справя/, а след това дата , ден и година. Ако някой се е занимавал с тези неща ще съм благодарен за мнения по въпроса!

|
| Пет Мар 11, 2005 1:30 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Ше се справиш, сигурен съм...Значи имаш няколко начина, така като гледам в datasheet-a...Часовника ти е обикновен секундомер, за разлика от DS1307 например...
Т.е. избираш си една "reference" дата, например деня, в който програмираш контролера. Оттам нататък добавяш числото от часовника, към референса ти... Единственото което трябва да правиш е да преобразуваш секунди в минута, час, ден, месец, година  .
|
| Пет Мар 11, 2005 1:43 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Predator-е, не е толкова лесна работата. За секунди, минути, часове и дни няма проблеми - с делене се решава, напр
seconds = clock_value % 60;
minutes = (clock_value - seconds) % 3600; и т.н.
за да определи датата обаче ще трябва да мисли кои месеци коло дни имат, коя година е високосна и т.н. Явно ще трябва да се помисли за нещо по-тарикатско, щото иначе ми изглежда много дървено ( лошото е, че и аз така съм го правил  ). Ти правил ли си нещо с него?
|
| Пет Мар 11, 2005 2:44 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
Дай малко по-подробно. Първоначално може да направим всеки месец 31дни. Мисълта ми е като алгоритъм как да стане. А иначе с делене няма проблем за часа. Значи трябва да запазя няколко регистъра в процесора за часа , деня и т.н. Само че как ще добавям прочетената стойност от часовника на всяка секунда към тези регистри? Например 24часа са 86400сек. Това в двоичен код е: 10101000110000000. При увеличаване на това число с 1 трябва да увелича датата с един ден. Та това нещо не мога да зацепа. Дай някакъв пример ако можеш.
|
| Пет Мар 11, 2005 2:52 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Задължително ли е сам да я пишеш функцията? Ползвай localtime() и gmtime(), стандартни за ANSI C.
|
| Пет Мар 11, 2005 3:26 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Абе не мога да се сетя за правилото за восокосна година...нещо съм изкуфял днеска  ...така де, не съм правил нищо с тоя DS, предпочитам DS1307, но след като вече е почнато...пък и тъкмо съм загрял на тема "Date-Time" формати и преобразуване (един даталогер правя)...
Правиш си няколко регистъра в процесора...:
hr, min, day, mth, year.
При настройката на устройството, въвеждаш някъде във еепром-а константно число, което ще ти е "референс". Може да използваш форматиране на дата-час, за да не хабиш пространство...Пример за кодиране на дата в 16-битов вид:
bit 15:9 - year || bit 8:5 - month || bit 4:0 - day.
Тъй като годината ще е число след 2000, ползваш референс 01/01/2000. Във битове от 15 до 9 можеш да събереш 2^7 = 128 години (мисля че ще ти стигнат  ). В битове 8:5 можеш да събереш 2^4 = 16 месеца (е, ще ползваш само 12), и в битове 4:0 можеш да събереш 2^5 = 32 дена (максимум 32  ). Така се прави във FAT таблиците, на мен ми е много удобно.
Оттук нататък ще ти трябва една функция, която да превръща секундите от DS-a във съответните hr, min, day, mth, year. Например:
|
| Пет Мар 11, 2005 3:29 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Ехе, DOS формат
Това и баба го знае. (разбирай Бил Гейтс)Тук обаче е различно. Мериш само секунди. Т'ва е!
|
| Пет Мар 11, 2005 3:55 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Е, хубаво де, аз имах в предвид спестяване на място, не е задължително...Имаш няколко прости функции...Настройваш си референс дата-час и нулираш часовника. Работата е готова, само остава някой да я свърши 
|
| Пет Мар 11, 2005 3:59 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Високосна е всяка, която се дели на 4, с изключение на тези, които се делят на 1000, с изключение на тези, които се делят на 400. 
|
| Пет Мар 11, 2005 5:06 pm |
|
 |
|
danov
Ранг: Минаващ
Регистриран на: Вто Ное 16, 2004 4:43 pm Мнения: 85 Местоположение: София
|
 Re: Преобразуване на данни от един вид в друг?!
Това е стандартния формат за представяне на времето във unix. Може да питаш google за "unix time" и ще ти разкаже доста неща:
http://www.google.com/search?q=unix+time&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8
и да прочетеш:
http://en.wikipedia.org/wiki/Unix_epoch
|
| Пет Мар 11, 2005 8:45 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Хвърли тоя хронометър и си вземи чип календар. Няма смисъл да завиваш гайка с отверка.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Нед Мар 13, 2005 8:07 pm |
|
 |
|
eddiesoft
Ранг: Минаващ
Регистриран на: Нед Фев 04, 2007 5:44 pm Мнения: 90
|
След 3 години се намесвам, защото и аз се мъча в момента с тоя чип и когато имам на един PIC само един свободен крак на който трябва да закача няколко датчика този хронометър е перфектен.
EDDIESoft
|
| Сря Юни 27, 2007 12:08 pm |
|
|
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 6 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|