Sida 1 av 1

PIC24 Timer

Postat: 20 januari 2009, 11:10:58
av ricjon
Försöker lära mig PIC-programmering och läser olika böcker och tutorials på nätet.
Har nu kört fast vid timer-funkionen.

Jag försöker få en delay på 1 sekund, jag använder ett startkit som består av ett explorer 16 kort. Processorn har en 8MHz
kristall.

Jag har skrivit så här,(tog bort onödig kod )
------------------------------------------------------------------------------------------
#include <p24fj128ga010.h>

//-------------------CONFIGURATION BYTES-----------------------
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF);
_CONFIG2( FNOSC_PRIPLL & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_XT);
//---------------------------------------------------------------

#define DELAY 16000

T1CON=0x8030; //Timer1 on, prescaler 256

TMR1=0; //resets the count
while(TMR1<DELAY)
{
//Här vill jag att programmet står i 1 sekund. Men det väntar ca 256ms istället.
}

----------------------------------------------------------------------------------------------

DELAY-formeln har jag fått fram i en bok som heter Learning to fly the PIC24.
Jag misstänker att jag kanske har satt någon konfigurationsbit fel, Kanske någon kan hjälpa mig.

Re: PIC24 Timer

Postat: 20 januari 2009, 11:41:26
av Micke_s
Är det inte så att TMR1 är en 8 bitars timer??

Re: PIC24 Timer

Postat: 20 januari 2009, 12:28:01
av ricjon
Micke_s skrev:Är det inte så att TMR1 är en 8 bitars timer??
Nej, det är en 16 bitars.

Re: PIC24 Timer

Postat: 20 januari 2009, 12:42:33
av PHermansson
Med en 4MHz klocka tar det 65ms för timern att räkna till 65536. Med 8MHz tar det då ca 32ms. Att räkna till 16000 bör då ta 32/4=8ms.
Om vi antar att prescalern står på 1:32 så blir det 256ms.
Mao: Hur står prescalern?

http://www.piclist.com/techref/member/j ... TORIAL.htm

Re: PIC24 Timer

Postat: 20 januari 2009, 13:39:18
av ricjon
PHermansson skrev:Med en 4MHz klocka tar det 65ms för timern att räkna till 65536. Med 8MHz tar det då ca 32ms. Att räkna till 16000 bör då ta 32/4=8ms.
Om vi antar att prescalern står på 1:32 så blir det 256ms.
Mao: Hur står prescalern?

http://www.piclist.com/techref/member/j ... TORIAL.htm
Glömde ta med hur jag satt upp Timer registret :oops: Har lagt till det i mitt första inlägg nu.. Jag har satt prescalern till 256

Re: PIC24 Timer

Postat: 20 januari 2009, 13:50:56
av PHermansson
Hur är det med Period Register 1?

"5. Load the timer period value into the PR1 register."


Glöm inte grundregeln att aldrig anta några värden hos register.

Re: PIC24 Timer

Postat: 20 januari 2009, 15:28:04
av ricjon
Jag hittade problemet, det finns tydligen en PLL som dubblar kristallfrekvensen med 4.
När jag skrev konfigurationsbitarna så var det alternativet valt

//-------------------CONFIGURATION BYTES-----------------------
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF);
_CONFIG2( FNOSC_PRIPLL & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_XT);
//---------------------------------------------------------------


Ny setting
//-------------------CONFIGURATION BYTES-----------------------
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF);
_CONFIG2( FNOSC_PRI & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_XT);
//---------------------------------------------------------------

Re: PIC24 Timer

Postat: 20 januari 2009, 16:38:55
av PHermansson
Grattis!
Kul att det löste sig.