|
DS1307 и день недели |
|
|
|
May 5 2008, 18:47
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Не получается вытащить номер дня недели из RTC DS1307. Всё остальное вытаскивается нормально, а день недели всё время 2. Вот функция, отвечающая за это: Код void rtc_get_time(rtc_type *rtc_var) { i2c_start(); i2c_write_addr(DS1307_ADDR | WR); i2c_write(0x00); i2c_start(); i2c_write_addr(DS1307_ADDR | RD);
rtc_var->seconds = bcd2dec(i2c_read(ACK) & 0x7F); rtc_var->minutes = bcd2dec(i2c_read(ACK)); rtc_var->hours = bcd2dec(i2c_read(ACK) & 0x3F);
rtc_var->weekday = i2c_read(ACK) & 0x07;
rtc_var->day = bcd2dec(i2c_read(ACK)); rtc_var->month = bcd2dec(i2c_read(ACK)); rtc_var->year = bcd2dec(i2c_read(NOT_ACK)) + 2002;
i2c_stop(); return; }
|
|
|
|
|
May 5 2008, 20:44
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(aaarrr @ May 5 2008, 22:50)  День недели автоматом не ставится, это просто счетчик. Очень жаль  Значит эту функцию придётся возложить на МК... Цитата(aaarrr @ May 5 2008, 22:50)  0, 4, 8 и т.д. Спасибо, я так и думал. Цитата(aaarrr @ May 5 2008, 23:28)  2000-й год был високосным (делится на 400), 2100-й не будет. А вышла DS1307 до 2000-го года. Но вряд ли кого-либо интересует сейчас "проблема 2100"  Вообще-то 2100 тоже будет високосным (я имею ввиду не в DS1307, а в жизни). А вот в RTC 2100 года быть не может. Точнее, это зависит от того, какую константу я добавлю к значению года (почему-то принято 2000, но ничего не мешает добавить любой другой, кратный 4). Т.е. после 2099 года будет снова 2000 - високосный год. Или этот регистр не закольцован, как остальные? А вообще эта проблема меня действительно волнует мало, т.к. я скорей всего до этого не доживу
|
|
|
|
|
May 5 2008, 21:02
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(aaarrr @ May 5 2008, 23:54)  Не будет: делится на 100 нацело. 2000 тоже делится на 100 нацело. Только он был високосным. У меня ещё один вопрос по теме. Если день недели всего счётчик, то считает ли он перевод часов? Т.е. если я переведу часы (календарь) на сутки вперёд, добавится ли к дню недели единица? Или это тоже надо реализовывать программно?
Сообщение отредактировал TarasG - May 5 2008, 21:08
|
|
|
|
|
May 5 2008, 21:04
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(TarasG @ May 6 2008, 01:02)  2000 тоже делится на 100 нацело. Только он был високосным. 2000 делится еще и на 400. Цитата(TarasG @ May 6 2008, 01:02)  У меня ещё один вопрос по теме. Если день недели всего счётчик, то считает ли он перевод часов? Т.е. если я переведу часы (календарь) на сутки вперёд, добавится ли к дню недели единица? Или это тоже надо реализовывать программно? Нет, нужно делать программно.
|
|
|
|
|
May 5 2008, 21:10
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(aaarrr @ May 6 2008, 00:04)  2000 делится еще и на 400. Да, простите. Только что прочитал на Википедии. То, о чём я говорю, называется Юлианским календарём. А современный мир живёт по Григорианскому. А я думал, високосный год идёт каждые 4 года
|
|
|
|
|
May 6 2008, 10:15
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(aaarrr @ May 6 2008, 00:04)  Нет, нужно делать программно. Получается, для меня не имеет значения, как RTC считет дни недели - с понедельника или с воскресенья. Я могу присвоить 6 мая 2008 года число 2 (вторник для меня и понедельник для RTC), но об этой разнице никто и не заподозрит, если все мои функции будут 2 обрабатывать как вторник. Правильно я рассуждаю?
Сообщение отредактировал TarasG - May 6 2008, 10:16
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|