Отговори на тема  [ 8 мнения ] 
Запис в Timer1? 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

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


Вто Май 23, 2006 9:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Преди време си пуснал тема за TMR0 и кварц 4.194... менгахерца http://mcu-bg.com/mcu_site/viewtopic.php?t=1016&start=0, там сме коментирали защо не работи точно часовник с TMR1

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Май 23, 2006 11:29 am
Профил WWW
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

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


Вто Май 23, 2006 1:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Не е нужно да вдигаш честотата. Просто смени процесора. Тогава на мен ми трябваше PIC16F876/A , преминах на PIC18F2520, където този проблем е решен. Часовника си бичи като куче и на месец няма и 1 секудна избързване или изоставане.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Май 23, 2006 1:51 pm
Профил WWW
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Няма нужда да сменяш процесора. Направи си записа в TIMER1H така:

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

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Вто Май 23, 2006 3:18 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

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


Вто Май 23, 2006 4:59 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


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

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Май 23, 2006 7:16 pm
Профил WWW
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Точно така, @mndsl! В моя вариант използвам 16 битова променлива за TIMER1 и за това се получи "опечатка". Но смятам, че колегата е схванал идеята. Btw имам един часовник със 16-ка, бях го забравил от 4 години и сега ходих специално да го видя - човека каза, че един или два пъти за това време се е налагало да бутва по една минута. Ама работи в климатизирано помещение.

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Чет Май 25, 2006 9:04 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни