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

PIC18F45K50 timer1 problem
http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=13886
Страница 1 от 1

Автор:  marcuka68 [ Сря Юли 01, 2015 6:00 pm ]
Заглавие:  PIC18F45K50 timer1 problem

Здравейте! Правя RTC с този микроконтролер, като ползвам таймер 1 с външен кварц 32.768kHz. Кондензаторите са 12pF. Кодът за таймера съм го взел от друг мой проект с ПИК18, не очаквах проблеми там. Ползвам и библиотеката на Майкрочип за USB. Проблемът е, че таймерът избързва с около секунда на минута.
Като мерим сигнала на кварца, се вижда синусоида, която е в обхвата около +/- 200mV. На другия проект с ПИК18, се измерва синисоида около обхвата 400mV - 600mV. Прикачам кода за таймера, пробвах както с TRIS битове 0b00, така и с 0b11, без ефект. Някакви идеи?

Прикачени файлове:
TMR1-problem.txt [1.81 KiB]
321 пъти

Автор:  [ Сря Юли 01, 2015 7:18 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

За този професор има следния бъг за TMR1/TMR3:

Цитат:
Module: Timer1/3 Module with Gate
Control
When using the Timer1 or Timer3 module, either
separately or simultaneously, a false overflow
event may occur after reloading the timer. The
event only occurs when the timer is configured for
Asynchronous Counter mode operation, and is
only problematic if the timer's interrupt is enabled.
During the Interrupt Service Routine (ISR), after
reloading the timer register (TMR1 and/or TMR3)
with a new value, the false overflow event can
occur upon the very next increment of the timer.
This sets the TMRx Overflow Interrupt Flag bit
(TMRxIF) and if the timer’s interrupts are enabled,
the interrupt service handler will again branch to
the interrupt vector on the next instruction clock,
after leaving the ISR. If interrupts are not enabled,
the TMRx Overflow Interrupt Flag bit will be set,
however, the firmware will not branch to the
interrupt vector.

Work around
While inside the Interrupt Service Routine (ISR),
create a loop routine that tests the timer for a
minimum increment of one count. Once the timer
has incremented by a minimum of one count, test
the Overflow Interrupt Flag bit (TMRxIF) and clear
it if set before leaving the ISR.


Автор:  marcuka68 [ Чет Юли 02, 2015 6:01 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

Благодаря много за точния отговор!!!

Направих съответните промени в прекъсването на таймера и за сега изглежда, може би, задоволително добре - за 2-3 часа сякаш избърза спрямо компютъра с около 1s. Оставям го цяла нощ, да видя как ще е сабахлян.

Автор:  stoyanoff [ Пет Юли 03, 2015 1:27 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

Ами аз за сега не съм докарвал RTC да работи точно като швейцарски часовник(не че съм се и опитвал)! Винаги се разминава с реалното време. Така че някакви секунди на 24 часа ми се струват ОК!

Автор:  ToHu [ Пет Юли 03, 2015 2:41 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

Нама причина RTC-то да не работи, но всичко зависи от резонатора който се използва, дали е точен и дали е подходящ за съответното приложение. Нормално кварцовите часовници дават отклонение от 3-4 минути на година, но ако се компенсират температурно точността може да се повиши значително.

Автор:  stoyanoff [ Пет Юли 03, 2015 4:58 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

А м/у другото трябва да имаш една настройка в чипа. Имаше едно калибриране ама сега не мога да си спомня какво беше точно. Можеш там да бутнеш да видиш дали ще има подобрение. Макар че ако не си се постарал с хардуера, няма да има кой знае какво подобрение.
Поздрави!

Автор:  mitko_el [ Пет Юли 03, 2015 7:59 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

Бях правил часовник с 68705Р3 , та чалъма дето го вкарах за по финна корекция: На примерно 12345 минути , 'бутвам' 0.1 s напред(или назад) броилката :)

Автор:  ToHu [ Пет Юли 03, 2015 8:10 pm ]
Заглавие:  Re: PIC18F45K50 timer1 problem

Ами при кварцофите основната нестабилност идва от температурата, кварца може да го подбереш да е много точен, или пък да го компенсираш но не компенсираш ли температурата може много да мръдне, особенно ако не на цикли ами ами само в едната посока, примерно само топло или само студено. Някои микроконтролери имат вградеи тмеп. сензори на база на които може да се прави някаква компенсация, верно не е 100% актуална но върши работ за да знаеш дали си на 20 или на 40 градуса.

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