30.04.2009, 00:24
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 60
Сказал спасибо: 17
Сказали Спасибо 6 раз(а) в 4 сообщении(ях)
|
[quote="IOPA4"]
Сообщение от Panda_Y2k
|
Я бы представлял дату не в формате ddmmgggg а в виде массива дней 1..365 и тогда
unsigned int day;
if ((day ›= summer_time) && (day ‹ winter_time))
Hcor = H-1
else
Hcor = H;
вроде и все [/quote
С массивом еще сложней будет: годы имеют разное количество дней, дата перевода времени вперед-назад из года в год меняется
|
Речь идет о летнем и зимнем времени?
Я для себя так сделал
Код:
|
//переход летние/зимние время
//на летнее время осуществляется в ночь на последнее воскресенье марта в 2:00 переводом часовых стрелок на 1 час вперед
//обратный переход осуществляется в ночь на последнее воскресенье октября в 3:00 переводом стрелок на 1 час назад.
if ( hour[h_month]==3-1 ){//на летнее время
if ( hour[h_num]›24-1 )//если число 25 и далее
if ( hour[h_day]==7-1 )//если воскресенье
if (hour[h_hour]==2) hour[h_hour]=3;
}
if ( hour[h_month]==10-1 ){//на зимние время
if ( hour[h_num]›24-1 )//если число 25 и далее
if ( hour[h_day]==7-1 )//если воскресенье
if (hour[h_hour]==3) hour[h_hour]=2;
} |
h_day - день недели.
|
|
|
|
30.04.2009, 09:41
|
|
Прописка
Регистрация: 09.02.2007
Сообщений: 108
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
[quote="DimAlt"]
Сообщение от IOPA4
|
Сообщение от Panda_Y2k
|
Я бы представлял дату не в формате ddmmgggg а в виде массива дней 1..365 и тогда
unsigned int day;
if ((day ›= summer_time) && (day ‹ winter_time))
Hcor = H-1
else
Hcor = H;
вроде и все [/quote
С массивом еще сложней будет: годы имеют разное количество дней, дата перевода времени вперед-назад из года в год меняется
|
Речь идет о летнем и зимнем времени?
Я для себя так сделал
Код:
|
//переход летние/зимние время
//на летнее время осуществляется в ночь на последнее воскресенье марта в 2:00 переводом часовых стрелок на 1 час вперед
//обратный переход осуществляется в ночь на последнее воскресенье октября в 3:00 переводом стрелок на 1 час назад.
if ( hour[h_month]==3-1 ){//на летнее время
if ( hour[h_num]›24-1 )//если число 25 и далее
if ( hour[h_day]==7-1 )//если воскресенье
if (hour[h_hour]==2) hour[h_hour]=3;
}
if ( hour[h_month]==10-1 ){//на зимние время
if ( hour[h_num]›24-1 )//если число 25 и далее
if ( hour[h_day]==7-1 )//если воскресенье
if (hour[h_hour]==3) hour[h_hour]=2;
} |
h_day - день недели.
|
Вот и Дмитрий подтянулся!
Дмитрий, с летним и зимним переводом мы вроде разобрались, ты лучше подскажи как настройки
В еепром сохранить, а то мы не придумали не чего лучше как батарейку воткнуть, хотя батарейку конечно тоже нужно для часов. И все же хотелось бы все настройки сохранять в энергонезависимой памяти.
С уважением Юрий И. К.
|
|
|
|
30.04.2009, 09:52
|
|
Частый гость
Регистрация: 02.12.2008
Сообщений: 32
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Ув. IOPA4.
Выложите, пожалуйста, схему последней версии устройства в gif (или др. распространенном) формате.
Сам я протеусом пока не пользуюсь, а свои работы выполняю в ACCEL (P-Cad)-схемы, IAR-программы и EWB -модели для аналоговой части.
Достаточно давно применяю EEPROM и внешнюю память с резервным питанием (только памяти) - может чего и пригодится.
Сергей.
|
|
|
|
30.04.2009, 15:14
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 60
Сказал спасибо: 17
Сказали Спасибо 6 раз(а) в 4 сообщении(ях)
|
Сообщение от yuriji
|
...
как настройки В еепром сохранить, а то мы не придумали не чего лучше как батарейку воткнуть, хотя батарейку конечно тоже нужно для часов. И все же хотелось бы все настройки сохранять в энергонезависимой памяти.
С уважением Юрий И. К.
|
Не понял какие трудности, если при выключении питания сохранять, то я так никогда не пробовал, советовать нечего. А так у меня всегда заведена структура на настройки, для нее написана функция сохранения ее полностью с рассчитанной срк и чтения тож. Сохранять полностью времени требуется не намного больше чем сохранять отдельный параметр, так как при записи проверяется на совпадения значений и не измененные параметры только читаются но не записываются. Удобно еще тем, что структуру можно менять как угодно код записи и чтения из еепром при этом менять не надо.
|
|
|
|
30.04.2009, 18:22
|
|
Прописка
Регистрация: 09.02.2007
Сообщений: 108
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Сообщение от DimAlt
|
Сообщение от yuriji
|
...
как настройки В еепром сохранить, а то мы не придумали не чего лучше как батарейку воткнуть, хотя батарейку конечно тоже нужно для часов. И все же хотелось бы все настройки сохранять в энергонезависимой памяти.
С уважением Юрий И. К.
|
Не понял какие трудности, если при выключении питания сохранять, то я так никогда не пробовал, советовать нечего. А так у меня всегда заведена структура на настройки, для нее написана функция сохранения ее полностью с рассчитанной срк и чтения тож. Сохранять полностью времени требуется не намного больше чем сохранять отдельный параметр, так как при записи проверяется на совпадения значений и не измененные параметры только читаются но не записываются. Удобно еще тем, что структуру можно менять как угодно код записи и чтения из еепром при этом менять не надо.
|
С наступающим праздником, всех с 1 мая!!!
Да Дима, вот про свою функцию сохранения, если можно подробней.
|
|
|
|
30.04.2009, 19:12
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 60
Сказал спасибо: 17
Сказали Спасибо 6 раз(а) в 4 сообщении(ях)
|
Код:
|
struct {
unsigned char day_light;
unsigned char night_light;
unsigned char tim_c_light;
unsigned char tim_do_light;
unsigned char budilnik[5][3];
unsigned char regim_state_time[Nreg_st];
unsigned char corr_flag;
unsigned char correction;
unsigned int crc;
} t_stat;
unsigned char EEPROM_READ(unsigned int uiAddress)
{
while(EECR & (1‹‹EEWE));/* Ожидание завершения предыдущей записи*/
EEAR = uiAddress;/* Установка адресного регистра */
EECR |= (1‹‹EERE);/* Разрешение чтения из ЭППЗУ путем установки EERE */
return EEDR;/* Возврат данных из регистра данных ЭСППЗУ*/
}
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
if ( EEPROM_READ(uiAddress)!=ucData){
while(EECR & (1‹‹EEWE));/* Ожидаем окончание предыдущей записи */
cli();
EEAR = uiAddress;/* Указание адреса и данных */
EEDR = ucData;
EECR |= (1‹‹EEMWE);/* Запись лог. 1 в EEMWE */
EECR |= (1‹‹EEWE);/* Запуск записи в ЭСППЗУ путем установки EEWE */
sei();
}
}
//*********************************************
void read_data_EEPROM(void)
{
unsigned char *a, i;
unsigned int crc=0;
a=(unsigned char *)&t_stat;
for( i=0 ; i‹sizeof(t_stat); i++, a++){
*a=EEPROM_READ(i);
if (i‹sizeof(t_stat)-2){
crc+=*a;
}
}
if ( crc!=t_stat.crc ) eeprom_err=1;
}
void EEPROM_save_parametr_all( void )
{
unsigned char i, *p;
if (time_flag & fl_eeprom_write)
{
time_flag&= ~fl_eeprom_write;
t_stat.crc=eeprom_err=0;
p=(unsigned char *) &t_stat;
for(i=0; i‹sizeof(t_stat) ; i++, p++){
EEPROM_write( i, *p );
if (i‹sizeof(t_stat)-2)
t_stat.crc+=*p;
}
}
} |
Вот, выдрал кусок из часов на 5 индикаторах.
Структуру можно менять как вздумается, не меняя функций чтения и записи в еепром. Возможно есть куда более удобные решения, хотелось бы посмотреть на другие примеры.
|
|
|
|
30.04.2009, 20:16
|
|
Прописка
Регистрация: 09.02.2007
Сообщений: 108
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Спасибо Дмитрий, бум подумать, покумекать.
Кстати часики твои пытаюсь повторить, на больших индикаторах как Юрий сделал, только, платы сам развожу.
|
|
|
|
30.04.2009, 21:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
Резервное питание от трех элементов типа АА по 10 р., что проще?
Теперь о сохранении настроек в еепром:
Сохранить настройки при пропадании сети - через 3-4 часа эти настройки кому будут нужны? Все-равно нужно корректировать. Код сохранения и считывания данных с еепром весит прилично в Атмегу8 не сунуть. Нужна Атмега выше и цена соответственно. Так зачем эти ухищрения с еепром?
|
|
|
|
30.04.2009, 22:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
Сообщение от sio_66
|
Ув. IOPA4.
Выложите, пожалуйста, схему последней версии устройства в gif (или др. распространенном) формате.
Сам я протеусом пока не пользуюсь, а свои работы выполняю в ACCEL (P-Cad)-схемы, IAR-программы и EWB -модели для аналоговой части.
Достаточно давно применяю EEPROM и внешнюю память с резервным питанием (только памяти) - может чего и пригодится.
Сергей.
|
Очень советую Протеус, ну а пока схемы:
Прикрепленный файл: 6926183.zip
|
|
|
|
30.04.2009, 22:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
Небольшая поправка:
-- Прилагается рисунок: --
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:07.
|
|