Měření času od stisknutí tlačítka s přesností na sekundy

Dobrý den, chci se zeptat jak měřit čas s přesností na sekundy od stisknutí tačítka,po určitou událost v programu, který pak chci zobrazit na LCD displej. Mám PIC16F628 s frekvencí 4Mhz. Takže jeden cyklus trvá 1 mikrosekundu. takže až proběhne milion cyklů, má se mi přičíst do registru jednička ? Nebo radši sehnat nějaký program s realizací stopek, a inspirovat se u něj ? Díky za rady.

:arrow_right: administrator: přejmenováno z "Měření času"

ideální by bylo nastavit na to časovač s vhodným nastavením a v jeho obsluze to přičítat. MCU pak může dělat i něco jiného.

Myslel jsem udělat to nějak přes čítač časovač, a když by přetekl, došlo by k přerušení , který by se obsloužilo (přičtení hodnot do určitých registrů)… nevím jestli je ta moje myšlenka dobrá nebo ne.

Jinak program je psán v assembleru… Za jakoukoliv radu předem moc díky.

přesně, máš to dobře

Tak to přerušení bych asi měl… ale teď přijde ta pro mě horší část… a to zobrazení těch zapsaných hodnot na displej. Ve škole jsme dělali nepřímou adresaci přež registr FSR. Stačí si vytvořit registry pro čislo 0-9, do kterych zapišu data a ty pak používat pro jednotky a desitky sekund i minut?

vytvoris si registry jednotky/desitky pro sekundy ,minuty ,hodiny … do tech pak zapises hodnotu ktera odpovida zobrazeni znaku 0-9 na displej, lcd ci 7segment , kazdej displej potrebuje jinou hodnotu prozobrazeni

kompletni prevod pro lcd je tu [forum.mcontrollers.com/t/prevod-hex-na-ascii-pro-zobrazeni-hodnoty-ad-prev-na-lcd/751/1)

Např. reg. hodin uložíš do W, proženeš přes tohle, k reg. T2,1 přičteš 48 a pošleš na LCD.

[code];**************************************************************************
; Prevod Hex 8bit na DEC T3,T2,T1
;**************************************************************************
HexDec
banksel C3
movwf C3
clrf C1
banksel T1
CLRF T1
CLRF T2
Rad100
MOVLW .100
banksel C3
SUBWF C3,W ;C1-100
banksel C2
MOVWF C2 ;B1
BTFSC STATUS,C ;zaporne?
GOTO Uloz ;NE
MOVLW .1
banksel C1
SUBWF C1,W ;C2-1
BTFSS STATUS,C ;kladne?
GOTO Rad10 ;NE
banksel C1
MOVWF C1
banksel C2
MOVF C2,W
Uloz
banksel C3
MOVWF C3
banksel T2
INCF T2,F ;+1
GOTO Rad100
Rad10
MOVLW .10
banksel C3
SUBWF C3,W ;C1-10
BTFSS STATUS,C ;kladne?
GOTO End10 ;NE
banksel C3
MOVWF C3
banksel T1
INCF T1,F ;+1
GOTO Rad10
End10
banksel C3
MOVFf C3,T0 ;T0,1,2=vysledna hodnota

return[/code]

Takhle by to mělo jít že ? Vytvořím si registry čislo0-čislo9 , kam zapíšu odpovidajici data pro zobrazení čísla na displej a v registrch desitkys a jednotkys budu mít určité hodnoty…

movf	        desitkys,0	           ;zobrazení desítek sekund
movwf	pamet

movf		pamet,0
addlw	0x30
movwf	FSR
movf		INDF,0
call	        zapis

movf  	jednotkys,0	   ;zobrazení jednotek sekund
movwf	pamet

movf		pamet,0
addlw	0x30
movwf	FSR
movf		INDF,0
call	        zapis

a proc bys je furt vytvarel ?
k cemu ti budou ?

ze pricitas tech 30hex tak bude pouzit LCD …

já myslel, že do těch registrů musím zapsat data třeba pro zobrazení čísla 0 na LCD displeji potřebuji pro nulu b’0011000’ tak tuhle hodnotu zapišu do registru čislo0 a pak když budu mít třeba v registru jednotek sekund nulu, tak ta mi odkáže na adresu registru čislo 0 a to se zobrazi na displej… Nebo jsem tu nepřímou adresaci vůbec nepochopil :smiley:

Nepochopil. Nepřímá adresace je to, že to děláš pře FSR a INDF, tudíž se nemusíš starat o banky. U hodin je to si myslím v celku zbytečný.

clbock 0x20 Hodiny Minuty Vteriny endc
Ukázka FSR

	movlw	Hodiny
	movwf	FSR
	
	movf	INDF,w	;hHodiny do w
	call	HexDec	;prevod
	movf	T1,w	;Desitky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD
	movf	T0,w	;jednotky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD
	

	incf	FSR	;ve fsr bude reg Minuty

	movf	INDF,w	;minuty do w
	call	HexDec	;prevod
	movf	T1,w	;Desitky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD
	movf	T0,w	;jednotky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD
	

	incf	FSR	;ve fsr bude reg vteriny

	movf	INDF,w	;vteriny do w
	call	HexDec	;prevod
	movf	T1,w	;Desitky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD
	movf	T0,w	;jednotky do w
	addlw	.48	;+48
	call	LCD	;nevim jak posilas data na LCD