Календарь Atmega16 WinAVR
Календарь Atmega16 WinAVR
Как можно организовать такую идею
В буднии дни с 10:00 до 18:00 управляющие устройство выключенно в выходные и праздничные работает круглосучно
В буднии дни с 10:00 до 18:00 управляющие устройство выключенно в выходные и праздничные работает круглосучно
- Реклама
- Pavel_1978
- Опытный кот
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
- Реклама
- Pavel_1978
- Опытный кот
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
- Аксель
- Опытный кот
- Сообщения: 800
- Зарегистрирован: Ср апр 25, 2007 09:50:43
- Откуда: Киев
- Контактная информация:
Вариант без ds1307 (отдельная микросхема - это хорошо, а вот альтернатива для по быстрому):
вводите в программу счетчик дней недели (1 - 7) - при запуске задаете день недели.
вводите в программу счетчик дней в году (от 1 до 365) - при запуске задаете текущий день в году.
вводите в программу счетчик годов
(значения от 0 до 3), чтобы в високосных годах после 28-го февраля счетчик дней вернулся один раз на один день назад - при запуске задаете число года после последнего високосного.
И далее, по таким-то дням недели работаем\не работаем .
Для праздников отдельно масивчик по таким-то дням в году работаем\не работаем. (Ага, ручками считаем на калькуляторе)
*Eсли был сброс питания, и параметры не устанавливали - никакими нагрузками не управлять, - предосторожность вродe как само собой разумеющееся.
------
Другие варианты реализации - очевидны.
P.S.: Счетчик годов можно сделать так: от 0 до 4.
0 - это високкостный до 28, 1 это после 28-го - так вроде проще 28-е посчитать два раза. Ну а счетчик дней недели как считал вперед, так и считает
вводите в программу счетчик дней недели (1 - 7) - при запуске задаете день недели.
вводите в программу счетчик дней в году (от 1 до 365) - при запуске задаете текущий день в году.
вводите в программу счетчик годов
И далее, по таким-то дням недели работаем\не работаем .
Для праздников отдельно масивчик по таким-то дням в году работаем\не работаем. (Ага, ручками считаем на калькуляторе)
*Eсли был сброс питания, и параметры не устанавливали - никакими нагрузками не управлять, - предосторожность вродe как само собой разумеющееся.
------
Другие варианты реализации - очевидны.
P.S.: Счетчик годов можно сделать так: от 0 до 4.
0 - это високкостный до 28, 1 это после 28-го - так вроде проще 28-е посчитать два раза. Ну а счетчик дней недели как считал вперед, так и считает
Скелет колобка состоит из черепа.
Я все таки остановился на использовании DS1307 есть свои плюсы...
Нашол алгоритм для расчета дня недели по дате
[url]
http://uk.wikipedia.org/wiki/Алгоритм_обчислення_дня_тижня
[/url]
Сварганил код
Результат почему то получается на 1 день больше
В чем может быть ошибка
Нашол алгоритм для расчета дня недели по дате
[url]
http://uk.wikipedia.org/wiki/Алгоритм_обчислення_дня_тижня
[/url]
Сварганил код
Код: Выделить всё
char weekday(unsigned char day, unsigned char month, unsigned char year)
{
int a = (14 - month) / 12;
int y = year - a;
int m = month + 12 * a - 2;
return (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}
Результат почему то получается на 1 день больше
В чем может быть ошибка


