Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Запис в Timer1?
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2401
Страница 1 от 1

Автор:  PIC [ Вто Май 23, 2006 9:11 am ]
Заглавие:  Запис в Timer1?

Здравейте , пуснах таймера с неговия генератор и 32.768к кварц и го ползвам за прекъсване на всяка секунда. Да но като го използвам за инкрементиране на секунди на часовник се получава закъснение от 4-5сек. на ден. Чудя се :-k дали проблема не е в това , че за да постигна прекъсване на 1сек. в програмата за обслужване на прекъсването записвам в TMR1H стойност 0х80 /32768/ + /32768 от генератора/ и получавам прекъсването на всяка секунда. Може би при записа изпускам накой импулс от генератора?А може ли прекъсването от TMR1 да събуди процесора от Sleep? #-o

Автор:  [ Вто Май 23, 2006 11:29 am ]
Заглавие: 

Преди време си пуснал тема за TMR0 и кварц 4.194... менгахерца http://mcu-bg.com/mcu_site/viewtopic.php?t=1016&start=0, там сме коментирали защо не работи точно часовник с TMR1

Автор:  PIC [ Вто Май 23, 2006 1:29 pm ]
Заглавие: 

Благодаря за насоката. Тогава полагах усилия да пусна часовника с таймер1( или TMR0) от системната честота на процесора с 4.194304 кварц. И стана много доволно - около 1сек. грешка на месец/без запис на стойност в таймера/. Да , но както коментарите от миналата тема искам да го пусна на батерия и ще трябва да спи поне секунда , а пък 2сек. ми е много и за това записвам стойност в TMR1H. Работя с CCS компилатор и явно ще трябва да мина на 10М системна честота та да мога да записвам TMR1H за 15.25uS/за да не изпускам импулси от кварца на таймера/. Лошото е , че компилатора запазва доста регистри преди обслужване на прекъсването , но ще пробвам. Благодаря! =D>

Автор:  [ Вто Май 23, 2006 1:51 pm ]
Заглавие: 

Не е нужно да вдигаш честотата. Просто смени процесора. Тогава на мен ми трябваше PIC16F876/A , преминах на PIC18F2520, където този проблем е решен. Часовника си бичи като куче и на месец няма и 1 секудна избързване или изоставане.

Автор:  evc [ Вто Май 23, 2006 3:18 pm ]
Заглавие: 

Няма нужда да сменяш процесора. Направи си записа в TIMER1H така:

void timer_reload(void){
asm("movfw TMR1H");
asm("sublw 0x83"); //Константа за донастройка - таймера е неактивен 2 цикъла на клока след запис!
asm("movwf TMR1H");
}

Автор:  mndsl [ Вто Май 23, 2006 4:59 pm ]
Заглавие: 

Това горното сигурно ще работи, само дето TMR1H е старшия байт на таймера, а за да компенсираш тези 2 клoкa , в които таймера е неактивен, трябва да се добави 2 към TMR1L.
По-лесно е като Timer1 се пусне в compare режим с активиран special event trigger, който генерира прекъсване и сам нулира таймер1. Никакви настройки не са нужни освен да се заредят CCP регистрите със стойност 32768.

Автор:  [ Вто Май 23, 2006 7:16 pm ]
Заглавие: 

mndsl написа:
Това горното сигурно ще работи, само дето TMR1H е старшия байт на таймера, а за да компенсираш тези 2 клoкa , в които таймера е неактивен, трябва да се добави 2 към TMR1L.
По-лесно е като Timer1 се пусне в compare режим с активиран special event trigger, който генерира прекъсване и сам нулира таймер1. Никакви настройки не са нужни освен да се заредят CCP регистрите със стойност 32768.


В compare режим TMR1 не може да работи с външен кварц 32,768 кHz., т.е. няма да ти работи в sleep режим.

Автор:  evc [ Чет Май 25, 2006 9:04 am ]
Заглавие: 

Точно така, @mndsl! В моя вариант използвам 16 битова променлива за TIMER1 и за това се получи "опечатка". Но смятам, че колегата е схванал идеята. Btw имам един часовник със 16-ка, бях го забравил от 4 години и сега ходих специално да го видя - човека каза, че един или два пъти за това време се е налагало да бутва по една минута. Ама работи в климатизирано помещение.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/