roboforum.ru

Технический форум по робототехнике.

Часы (глупый вопрос)

Часы (глупый вопрос)

-= Александр =- » 16 май 2006, 23:51

Захотелось мне впихнуть в робота часы реального времени. Сделал таймер со срабатыванием раз в секунду. А теперь чешу репу:

Есть прерывание. Обнуление таймера надо проводить до выполнения кода или это обязательно делать в конце функции-обработчика? Но ведь если от прерывания до обнуления будет выполняться действие - часы будут отставать?  :roll:

Код: Выделить всёРазвернуть

void timer1_ovf_isr(void)
{

sec++;
if(sec==60){sec=0;min++;}
if(min==60){min=0;sec=0;hr++;}
if(hr==24){hr=0;min=0;sec=0;}

//Вот эти вот строчки можно в начало?
TCNT1H = 0xC2; //reload counter high value
TCNT1L = 0xF7; //reload counter low value
}


wolf » 17 май 2006, 00:09

Часы и тому подобные вещи делают с использованием режима Clear Timer on Compare. Как раз для того, чтобы не перегружать счётчик самому.

gosu » 17 май 2006, 00:24

А ещё лучше DS1307 взять .. Пускай себе считает а проц своими делами занимается а когда ему время понадобится спросит.

-= Александр =- » 17 май 2006, 00:59

Не, внешний не катит, плата старая... В новом будет, а в этом вот приходится извращаться...  :oops:

SS » 24 июн 2006, 18:55

Я тебе советую, считать только секунды от 0 до 86399. А вычислять часы, минуты, секунды уже в обработчике отображения данных. Таким образом, будет уменьшена задержка, а соответственно и погрешность.
Код получиться такой:
Код: Выделить всёРазвернуть
long int sec

void timer1_ovf_isr(void)
{
if (sec < 86399)
 sec++;
else
 sec=0;
 
//Вот эти вот строчки можно в начало?
TCNT1H = 0xC2; //reload counter high value
TCNT1L = 0xF7; //reload counter low value
}
Последний раз редактировалось SS 26 июн 2006, 13:57, всего редактировалось 1 раз.

avr123.nm.ru » 24 июн 2006, 19:34

и НУЖНО в начало, чтоб счет был точным.

wolf » 25 июн 2006, 00:02

Не нужно в начало. Нужно CTC использовать.

SS » 26 июн 2006, 14:00

Кстати нашел готовую библиотеку, поищи там:
http://electronix.ru/forum/index.php?showtopic=10934

-= Александр =- » 26 июн 2006, 23:31

Вопрос в общем-то давно снят... Но все равно пасибо, погляжу как умные люди делают...  :roll:


cron
Rambler\'s Top100 Mail.ru counter