Jste zde

Měření periody I

Uvedené 2 příklady představují několik možností měření PERIODY číslicového signálu pomocí procesoru

v rozsahu (100us - 50ms) s přesností alespoň 5us.

Příklad je koncipován tak, aby bylo možné si ukázat, jak časovače a specializované periferie usnadňují tuto úlohu. Analýzou problému zjistíme, že k měření doby periody postačí 16-bitový čítač. Problém měření periody můžeme řešit zcela programově, s využitím vnitřního časovače a přerušovacího systému nebo využitím specializované periferie - záchytného systému. 

Programové řešení 

  • Při čistě programovém řešení budeme programově čekat např. na vzestupnou hranu měřeného signálu. 
  • Po jejím dosažení bude program testovat logickou úroveň vstupního signálu (log.1) a zároveň za provedený počet instrukcí definované délky  započte do registru DPTR jedničku.(INC DPTR = 2 cykly, NOP = 1 cyklus a JB bit, adresa = 2 cykly, dohromady 5us pro 12MHz)
  • Analogicky program testuje i dobu log.0 a s novou náběžnou hranou signálu měření ukončí. 
  • Pro správnou činnost je třeba, aby vstupní signál setrval v každé úrovni alespoň dva strojové cykly, tj. 2us. 

Hlavní nevýhoda tohoto řešení spočívá ve 100% využití výkonu procesoru v době měření periody signálu. 
 


VSTUP EQU P1.2          ; Vývod, na který je přiveden měřený signál 

 ORG  0000h
 MOV  DPTR,#0 ; Nuluj počitadlo 5us 
NOVYME: 

 JB VSTUP,$ ; Čekej na konec log.1
 JNB VSTUP,$ ; Čekej na konec log.0
LOG1: 
 INC  DPTR ; Za každých 5us přičti jedničku 
 NOP   ; Korekce zpoždění smyčky 
 JB VSTUP,LOG1 ; Čítej dokud je VSTUP v log.1

 


LOG0: 
 INC  DPTR ; Za každých 5us přičti jedničku 
 NOP  ; Korekce zpoždění smyčky
 JNB VSTUP,LOG0 ; Čítej dokud je VSTUP v log.0
  ; ........
 CALL  ZOBRAZ ; Doba periody = DPTR ;5us 
  ; ........
 JMP NOVYME
 END

;Stazeno z www.HW.cz 
     ;    Autorem tohoto SW je Petr Skalicky - SKALICKY@feld.cvut.cz


Použítí přerušovacího systému 

Druhé použité řešení bude využívat přerušovací systém a vnitřní časovače. To umožní provádět měření doby periody nezávisle na hlavním progra-mu, protože programová obsluha (přerušení) bude pouze zajišťovat spuštění, zasta-vení a uložení hodnot. Po dobu vlastního měření pak může procesor vykonávat hlavní program. 


Předpokládejme, že využijeme časovač 0 v módu 1 (16 bitů) čítající vnitřní oscilátor o kmitočtu 12MHz /12. 
Měřený signál přivedeme na vstup vnějšího přerušení, např. INT0, a aktivitu přerušovacího systému nastavíme na sestupnou hranu tohoto signálu. Před prvním vyvoláním přerušení vynulujeme časovač. S první sestupnou hranou měřeného signálu na vstupu INT0 bude vyvoláno přerušení, které spustí činnost časovače. Druhé přerušení čítání časovače zastaví, zajistí jeho uložení a vynulování. Třetí přerušení zahájí další měření doby periody. Díky tomu bude program, stej-ně jako v předcházejícím případě, provádět měření každé druhé periody signálu. 


 

;Mereni periody s pouzitim prerusovaciho systemu
DRUHY BIT 00H    ; Vývod, na který je přiveden měřený signál 

 ORG  0000h
 LJMP  START
 ORG  0BH ; Adresa obsluhy přerušení INT0
 JMP MPERIOD
 ORG  30H

START: 
 MOV  TMOD,#21h ; Časovač 0 - mód 1, časovač 1 - mód 2
 MOV  TCON,#41h ; Spusť časovač 1, INT0 - sestupná hrana
 MOV  IE,#81h ; Povol přerušení INT0 a globální masku
 MOV  SP,#STACK ; Nastav ukazatel zásobníku
 CLR DRUHY ; Nastav indikátor přerušení na první cyklus
  ; ......
  ; Hlavní program
  ; ......

  ; Obslužné programy 
 ;NICI: ----- 

MPERIOD: 
 JB DRUHY,STOP ; Jedná se o druhou sestupnou hranu
 SETB TR0  ; První hrana, spusť časovač
 SETB DRUHY ; Nastav indikátor druhé sestupné hrany
 RETI  ; Návrat z přerušení

STOP: 
 CLR TR0  ; Druhá hrana, zastav časovač 
 CLR DRUHY ; Smaž indikátor druhé hrany
 MOV PERIOD,TH0 ; Ulož naměřenou periodu
 MOV  PERIOD+1,TL0
 MOV  TH0, ;0h ; Nuluj časovač 
 MOV  TH0, ;0h ;
 RETI  ; Návrat z přerušení

 DSEG         ;Rezervace datové paměti
             ORG 30h
PERIOD:      DS  2H       ;Paměť periody signálu
STACK:       DS  1H
END

;Stazeno z www.HW.cz 
     ;    Autorem tohoto SW je Petr Skalicky - SKALICKY@feld.cvut.cz


DOWNLOAD rutin v .ZIP souboru
Hodnocení článku: