| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Преобразуване на данни от един вид в друг?! http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=467 |
Страница 1 от 1 |
| Автор: | PIC [ Пет Мар 11, 2005 1:30 pm ] |
| Заглавие: | Преобразуване на данни от един вид в друг?! |
Здравейте , заинатих се с един RТС да го чета и да изобразявам на дисплея час , дата , ден и година. Модела е DS2417. Направен е като 32-битов двоичен брояч , който може да се чете и записва по 1-Wire протокол на Dallas. Проблем при комуникацията нямам , но нещо с формата на данните недоумявам как ще стане работата? Въпроса е как от тези 32 бита да извлека секунди , минути и часове /тук може и да се справя/, а след това дата , ден и година. Ако някой се е занимавал с тези неща ще съм благодарен за мнения по въпроса! |
|
| Автор: | Predator_MF [ Пет Мар 11, 2005 1:43 pm ] | |||||||||
| Заглавие: | ||||||||||
Ше се справиш, сигурен съм...Значи имаш няколко начина, така като гледам в datasheet-a...Часовника ти е обикновен секундомер, за разлика от DS1307 например...
Т.е. избираш си една "reference" дата, например деня, в който програмираш контролера. Оттам нататък добавяш числото от часовника, към референса ти... Единственото което трябва да правиш е да преобразуваш секунди в минута, час, ден, месец, година |
||||||||||
| Автор: | bateAz [ Пет Мар 11, 2005 2:44 pm ] |
| Заглавие: | |
Predator-е, не е толкова лесна работата. За секунди, минути, часове и дни няма проблеми - с делене се решава, напр seconds = clock_value % 60; minutes = (clock_value - seconds) % 3600; и т.н. за да определи датата обаче ще трябва да мисли кои месеци коло дни имат, коя година е високосна и т.н. Явно ще трябва да се помисли за нещо по-тарикатско, щото иначе ми изглежда много дървено ( лошото е, че и аз така съм го правил |
|
| Автор: | PIC [ Пет Мар 11, 2005 2:52 pm ] |
| Заглавие: | |
Дай малко по-подробно. Първоначално може да направим всеки месец 31дни. Мисълта ми е като алгоритъм как да стане. А иначе с делене няма проблем за часа. Значи трябва да запазя няколко регистъра в процесора за часа , деня и т.н. Само че как ще добавям прочетената стойност от часовника на всяка секунда към тези регистри? Например 24часа са 86400сек. Това в двоичен код е: 10101000110000000. При увеличаване на това число с 1 трябва да увелича датата с един ден. Та това нещо не мога да зацепа. Дай някакъв пример ако можеш. |
|
| Автор: | Реконструктор [ Пет Мар 11, 2005 3:26 pm ] |
| Заглавие: | |
Задължително ли е сам да я пишеш функцията? Ползвай localtime() и gmtime(), стандартни за ANSI C. |
|
| Автор: | Predator_MF [ Пет Мар 11, 2005 3:29 pm ] | |||||||||
| Заглавие: | ||||||||||
Абе не мога да се сетя за правилото за восокосна година...нещо съм изкуфял днеска Правиш си няколко регистъра в процесора...: 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 години (мисля че ще ти стигнат Оттук нататък ще ти трябва една функция, която да превръща секундите от DS-a във съответните hr, min, day, mth, year. Например:
|
||||||||||
| Автор: | bateAz [ Пет Мар 11, 2005 3:55 pm ] |
| Заглавие: | |
Ехе, DOS формат Това и баба го знае. (разбирай Бил Гейтс)Тук обаче е различно. Мериш само секунди. Т'ва е! |
|
| Автор: | Predator_MF [ Пет Мар 11, 2005 3:59 pm ] |
| Заглавие: | |
Е, хубаво де, аз имах в предвид спестяване на място, не е задължително...Имаш няколко прости функции...Настройваш си референс дата-час и нулираш часовника. Работата е готова, само остава някой да я свърши |
|
| Автор: | Реконструктор [ Пет Мар 11, 2005 5:06 pm ] | |||||||||
| Заглавие: | ||||||||||
Високосна е всяка, която се дели на 4, с изключение на тези, които се делят на 1000, с изключение на тези, които се делят на 400. |
||||||||||
| Автор: | danov [ Пет Мар 11, 2005 8:45 pm ] |
| Заглавие: | 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 |
|
| Автор: | Цецо [ Нед Мар 13, 2005 8:07 pm ] |
| Заглавие: | |
Хвърли тоя хронометър и си вземи чип календар. Няма смисъл да завиваш гайка с отверка. |
|
| Автор: | eddiesoft [ Сря Юни 27, 2007 12:08 pm ] |
| Заглавие: | |
След 3 години се намесвам, защото и аз се мъча в момента с тоя чип и когато имам на един PIC само един свободен крак на който трябва да закача няколко датчика този хронометър е перфектен. EDDIESoft |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|