Всем привет!
Захотел в проект Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED) добавить день недели.
И раз по даташиту DS может работать с днем недели, почему бы не возложить на нее такую обязанность?
Из вариантов выбрал такой путь: при начальных установках установить и день недели. Пусть потом RTC сама инкрементит и следит за переполнением за 7.
Вроде сделал, залил в МК, НО:
1. После установки дня недели, он отображается на индикаторах -OK.
2. День при переходе через 00:00 не увеличивается.
3. При отключении 220В, не сохраняет установленное значение дня недели (все остальное - OK) и отображает день недели = 0.
4. После сброса МК, день недели обнуляется.
Вот изменения для программы (все переменные прописаны, ошибок нет):
if (indicate == IND_SET_DY){
if (key == KEY_PLUS) {
tmp=bcd2bin(myday);
tmp++; if (tmp > 7) tmp = 1; // день недели +1
myday=bin2bcd(tmp);
}
if (key == KEY_MINUS) {
tmp=bcd2bin(myday);
if (tmp == 1) {tmp = 7;}
else {tmp--; } // день недели -1
myday=bin2bcd(tmp);
}
if (key == KEY_SET) {
indicate = IND_SET_T1; // переход на установку времени индикации
zpt_BLINK=0;
zpt_4=0;
}
//rtc_set_day(myday); // аналог след.команды
rtc_write(0x03, myday);
view_time();
return;
}
.....
view_date();
....
void view_day(void) {
if (indicate == IND_CLOCK) { // день недели
digit_out[3] = myday & 0x0F; // digit_out[3] = myday; - без разницы
digit_out[2] = PROBEL;
digit_out[1] = PROBEL;
digit_out[0] = PROBEL;
}
Решил разобраться с работой данных RTC.
Нашел хороший ресурс эмулятора (
http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/) и решил разобраться с работой дня недели, дописав пару строк кода.
В данном проекте на часах при переходе через 00:00 день крутится по кругу 0-7. Время и дата подсасываются из ПК, день недели тоже, но +1. Сегодня четверг, на часах 05.
На форуме говорят, что в железе все работает.
Давайте вместе добавим день недели в этот замечательный проект!