Fel vi beräkning av tidsintervall, Timer0, pic18f458

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Johel572
Inlägg: 53
Blev medlem: 5 juli 2006, 10:36:01
Ort: Linköping

Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av Johel572 »

Jag försöker få en LED att slå på/av varje sekund med en pic18f458. Jag använder Timer0 och ”togglar” en pinne vid interruput. Bekymret är att fördröjning är betydligt längre än en sekund (ca 5s eller något vilket är helt galet).

Jag kör med 16Mhz kristall och 16-bits timer 1:256 prescaler. TMR0H och TMR0L laddas som de ska. Jag beräknar värdet till TMR0H och TMR0L genom tid/(prescaler*periodtid) dvs 1/(256*(1/(16*10e6)))=62500 => TMR0=65536-62500=3036 dvs TMR0H=11, TMR0L=220.

Initiering av Timer0:

Kod: Markera allt

;------------------------------------------------------------------------------
;Funktion för att konfiguera Timer0
Configure_timer0
	bcf		T0CON,T08BIT	;16-bits timer
	bcf		T0CON,T0CS		;Internal instruction cycle clock (timer mode)
	bcf		T0CON,T0SE		;Räkna upp på låg-till-hög flank
	bcf		T0CON,PSA		;Enable prescaler
	bsf		T0CON,T0PS2		;1:256 prescaler, 111 på T0PS2-T0PS0
	bsf		T0CON,T0PS1
	bsf		T0CON,T0PS0
	bsf		INTCON,TMR0IE	;Enable Timer0 interrupts
	bcf		INTCON,TMR0IF	;Nollställer Timer0s interrupt flag-bit
	movlw	D'11'			;Sätter värdet på Timer0s register för fördröjning
	movwf	TMR0H	
	movlw	D'220'			
	movwf	TMR0L

;Observera att det inte går att stega med ICD2 vid uppdatering av TMR0H, det syns inte.
;Sätt en breakpoint efter och titta på värdet.	
	

	bsf		T0CON,TMR0ON	;Starta Timer0
	return
Tänker jag fel eller kan jag missat något vi initieringen av timern? Jag förstår inte riktigt varför det blir som det blir.
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Re: Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av JockeE »

Timern tickar med Fosc / 4, dvs 4MHz.
Användarvisningsbild
Johel572
Inlägg: 53
Blev medlem: 5 juli 2006, 10:36:01
Ort: Linköping

Re: Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av Johel572 »

Tack.
Nu när du säger det så ser jag att det är Fosc/4 i ett blockdiagram. Tycker dock att det är konstigt att det inte står i texten.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av TomasL »

Johel572 skrev:Tack.
Nu när du säger det så ser jag att det är Fosc/4 i ett blockdiagram. Tycker dock att det är konstigt att det inte står i texten.
Står garanterat i texten.

I Databladet för 18Cxx2, i stycket "Timer0 Operation"
Timer mode, the Timer0 module will increment every
instruction cycle (without prescaler).
Står säkert motsvarande text i xx8ans datablad
Exakt samma sak står i referensmanualen för 18C(F)XXX.
Det är samma referens manual för både 18FXXX och 18CXX.
Användarvisningsbild
Johel572
Inlägg: 53
Blev medlem: 5 juli 2006, 10:36:01
Ort: Linköping

Re: Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av Johel572 »

Hm. Nu ska vi se. Ja du har så rätt TomasL det står "increment every instruction cycle". Det var jag som blandade ihop Fosc och instruction cycle.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Fel vi beräkning av tidsintervall, Timer0, pic18f458

Inlägg av sodjan »

Ibland ser man det förkortat Fosc (d.v.s kristallen eller annan oscillator)
resp Fcyc (alltså cykelfrekvensen eller instruktionscykeln). Eller Tosc
resp Tcyc om det istället är tiden man anger (d.v.s 1/Fosc, resp 1/Fcyc).
Skriv svar