|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:09 pm
|
Страница 1 от 1
|
[ 8 мнения ] |
|
| Автор |
Съобщение |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Запис в Timer1?
Здравейте , пуснах таймера с неговия генератор и 32.768к кварц и го ползвам за прекъсване на всяка секунда. Да но като го използвам за инкрементиране на секунди на часовник се получава закъснение от 4-5сек. на ден. Чудя се  дали проблема не е в това , че за да постигна прекъсване на 1сек. в програмата за обслужване на прекъсването записвам в TMR1H стойност 0х80 /32768/ + /32768 от генератора/ и получавам прекъсването на всяка секунда. Може би при записа изпускам накой импулс от генератора?А може ли прекъсването от TMR1 да събуди процесора от Sleep? 
|
| Вто Май 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 |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
Благодаря за насоката. Тогава полагах усилия да пусна часовника с таймер1( или TMR0) от системната честота на процесора с 4.194304 кварц. И стана много доволно - около 1сек. грешка на месец/без запис на стойност в таймера/. Да , но както коментарите от миналата тема искам да го пусна на батерия и ще трябва да спи поне секунда , а пък 2сек. ми е много и за това записвам стойност в TMR1H. Работя с CCS компилатор и явно ще трябва да мина на 10М системна честота та да мога да записвам TMR1H за 15.25uS/за да не изпускам импулси от кварца на таймера/. Лошото е , че компилатора запазва доста регистри преди обслужване на прекъсването , но ще пробвам. Благодаря! 
|
| Вто Май 23, 2006 1:29 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Не е нужно да вдигаш честотата. Просто смени процесора. Тогава на мен ми трябваше PIC16F876/A , преминах на PIC18F2520, където този проблем е решен. Часовника си бичи като куче и на месец няма и 1 секудна избързване или изоставане.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Май 23, 2006 1:51 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 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 |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 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 |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
В compare режим TMR1 не може да работи с външен кварц 32,768 кHz., т.е. няма да ти работи в sleep режим.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Май 23, 2006 7:16 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Точно така, @mndsl! В моя вариант използвам 16 битова променлива за TIMER1 и за това се получи "опечатка". Но смятам, че колегата е схванал идеята. Btw имам един часовник със 16-ка, бях го забравил от 4 години и сега ходих специално да го видя - човека каза, че един или два пъти за това време се е налагало да бутва по една минута. Ама работи в климатизирано помещение.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Чет Май 25, 2006 9:04 am |
|
|
|
Страница 1 от 1
|
[ 8 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|