Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


16.2.1. Válaszidő mérése


Bevezetés
Válaszidő mérése a Timer 1 nullázásával, jelzőbitfigyeléssel
Válaszidő mérése a Timer 1 nullázásával, megszakításkezeléssel
Válaszidő mérése a Timer 1 kiolvasásával (nullázás nélkül), jelzőbitfigyeléssel
Válaszidő mérése a Timer 1 kiolvasásával (nullázás nélkül), megszakításkezeléssel
Válaszidő mérése két esemény közötti időtartam mérésére visszavezetve


      A válaszidő egy külső folyamat indításától annak visszajelzéséig terjedő időtartam. A mikrovezérlő valamely kivezetésének jelére indul a külső folyamat és a CCPx kivezetésre érkezik a válaszjel, illetve válaszjelek.
      A válaszjelek jelzik a külső folyamat állapotát (befejezettségét, bizonyos pontokon való áthaladását). A válaszidő mérése megadja a végbement folyamat, illetve a részfolyamatok időtartamát.
      A válaszidő mérés alkalmazási példái:
     ˇ ultrahangos távolságmérők;
     ˇ reakcióidő mérők;
     ˇ folyamatellenőrzés (időtúllépés esetén riasztás).

      Válaszidő-meghatározási feladatoknál a Capture üzemmód (CCP modul) használatára csak viszonylag pontos mérések esetében van szükség, ugyanis sok esetben bőven elegendő a beépített számláló áramkörök kiolvasásán alapuló időmérés pontossága.

      Mivel a mérés időalapját a Timer 1 számláló biztosítja:
     ˇ alapesetben a mérhető időintervallumot felülről a Timer 1 számlálási ciklusának hossza, alulról pedig a mikrovezérlő utasításciklusával összemérhető késleltetés által okozott hiba határolja be (az intervallum megnövelését egy későbbi fejezet mutatja be);
     ˇ a mérés pontosságát alapvetően befolyásolja a számláló léptető órajelének pontossága és állandósága.

      A közepes teljesítményű PIC mikrovezérlőkkel mérhető válaszidők minimális értékeit mutatja be a következő táblázat.

16.2.1-1. Táblázat
Pontosság Órajelfrekvencia
20 MHz (5 MIPS) 10 MHz (2,5 MIPS) 4 MHz (1 MIPS) 1 MHz (0,25 MIPS)
5% 4 µs 8 µs 20 µs 80 µs
1% 20 µs 40 µs 100 µs 400 µs
0,1% 200 µs 400 µs 1 ms 4 ms
0,01% 2 ms 4 ms 10 ms 40 ms

      A mérés hibátlan végrehajtásához biztosítani kell:
     ˇ hogy a mérendő időtartam kisebb legyen, mint a Timer 1 számlálási ciklusának hossza, ami FFFFh, vagyis 65535 léptető jel időtartamú;
     ˇ hogy a mérés ideje alatt a Timer 1 pillanatnyi értéke ne legyen szoftverből felülírva (nullázás, értékadás);
     ˇ hogy a mérés ideje alatt a mikrovezérlő ne kerüljön készenléti (SLEEP) állapotba.

Vissza a lap tetejére

      A válaszidő mérésének legegyszerűbb módját mutatja be a következő folyamatábra. A Timer 1 nulláról indul a kimenő indítójellel egyidőben, a válaszjel hatására a Timer 1 értéke kiolvasódik, így ez az érték arányos a mért időtartammal.

A válaszidő mérésének folyamatábrája
16.2.1-1. Ábra

      A következő programrészlet a feladat gyakorlati megvalósítását mutatja be. Az eredményregiszterek: TIMEL, TIMEH.

... ...    
  clrf CCP1CON ;a CCP modul kikapcsolása
  clrf T1CON ;Timer 1 kikapcsolva (előosztás 1:1, belső léptetés, szinkronizáció)
  clrf INTCON ;a megszakítások tiltása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  bsf TRISC,CCP1 ;a CCP1 kivezetés bemenetként való beállítása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf PIR1 ;a periféria megszakításkérő jelzőbitek nullázása
... ...    
... ...    
  clrf TMR1H ;TMR1H = 0; felső bájt nullázása
  movlw 0x01 ;W = 0x01
  movwf TMR1L ;TMR1L = 1; alsó bájt kezdőérték beállítása
  bsf PORTx,x ;külső folyamat indítása
  bsf T1CON,TMR1ON ;a Timer 1 léptetésének indítása
  movlw 0x05 ;W = 0x05
  movwf CCP1CON ;a Capture üzemmód indítása, kiolvasás minden felfutó élre
FIGYEL btfss PIR1,CCPIF ;a CCP modul megszakításkérés jelzőbit vizsgálata; ugrik, ha "1"
  GOTO FIGYEL ;visszalép, mivel nem történt kiolvasás
  movf CCPR1L,0 ;W = CCPR1L
  movwf TIMEL ;TIMEL = CCPR1L (alsó bájt elmentve)
  movf CCPR1H,0 ;W = CCPR1H
  movwf TIMEH ;TIMEH = CCPR1H (felső bájt elmentve)
  bcf PIR1,CCPIF ;a CCPIF jelzőbit nullázása
  clrf CCP1CON ;a CCP modul kikapcsolása
  bcf T1CON,TMR1ON ;a Timer 1 léptetésének leállítása
       
      ;*** Időtartamszámítás ***
  ...    
  ...    

Vissza a lap tetejére

      A következő programrészlet a fenti program megszakításkezeléssel megvalósított változatát mutatja be. A CCP modul megszakítás csak a kiolvasás megtörténtéig van engedélyezve. (A példaprogramban a CCP modul megszakításon kívül, minden megszakítás tiltva van.)
      A megszakításos kiolvasás-kezelés biztosítja, hogy a főprogram a lehető legtöbb időt tölthesse más feladatokkal, mivel így nincs szükség a folyamatos erőforrásigényű jelzőbit-figyelésre.

  ...    
  ...    
  clrf CCP1CON ;a CCP modul kikapcsolása
  clrf T1CON ;Timer 1 kikapcsolva (előosztás 1:1, belső léptetés, szinkronizáció)
  clrf INTCON ;a megszakítások tiltása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  bsf TRISC,CCP1 ;a CCP1 kivezetés bemenetként való beállítása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf PIR1 ;a periféria megszakításkérő jelzőbitek nullázása
  ...    
  ...    
  clrf TMR1H ;TMR1H = 0; felső bájt nullázása
  movlw 0x01 ;W = 0x01
  movwf TMR1L ;TMR1L = 1; alsó bájt kezdőérték beállítása
  bsf PORTx,x ;külső folyamat indítása
  bsf T1CON,0 ;a Timer 1 léptetésének indítása
  movlw 0x05 ;W = 0x05
  movwf CCP1CON ;a Capture üzemmód indítása, kiolvasás minden felfutó élre
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  movlw B'xxxxxxxx' ;megszakítás engedélyező maszk bevitele; CCPIE="1"
  movwf PIE1 ;a maszk érvényesítése
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  bsf INTCON,6 ;PEIE="1"; periféria megszakítások engedélyezése
  bsf INTCON,7 ;GIE="1"; globális megszakítás engedélyezés
  ...    
  ...    
MEGSZ movwf W_TEMP ;a W értékének mentése
  swapf STATUS,0 ;W = STATUS bitcserével
  movwf S_TEMP ;a STATUS regiszter bitcserélt értékének elmentése
  clrf STATUS ;a 0. adatmemória lap kiválasztása
  movf CCPR1L,0 ;W = CCPR1L
  movwf TIMEL ;TIMEL = CCPR1L (alsó bájt elmentve)
  movf CCPR1H,0 ;W = CCPR1H
  movwf TIMEH ;TIMEH = CCPR1H (felső bájt elmentve)
  bcf PIR1,CCPIF ;a CCPIF jelzőbit nullázása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf CCP1CON ;a CCP modul kikapcsolása
  bcf T1CON,TMR1ON ;a Timer 1 léptetésének leállítása
       
      ;*** Időtartamszámítás ***
  ...    
  ...    
  swapf S_TEMP,0 ;W = STATUS regiszter elmentett értéke
  movwf STATUS ;a STATUS regiszter értékének visszaállítása
  swapf W_TEMP,1 ;a W_TEMP értékének bitcseréje
  swapf W_TEMP,0 ;a W értékének visszaállítása
  retfie   ;visszatérés a megszakításból
  ...    
  ...    

Vissza a lap tetejére

      Ha a Timer 1 számlálónak egyéb feladata is van, akkor annak válaszidőméréshez történő nullázása hibákat okozhat más alkalmazások működésében.
      A válaszidő mérését mindig a Timer 1 túlcsordulásakor (nulla értékénél) kezdve, kikerülhető a probléma. Természetesen ez nem minden alkalmazásnál oldható meg.
      Egy másik megoldást mutat be a következő folyamatábra, ahol a külső folyamat indításakor a Timer 1 értéke mentésre kerül, így számítható a válszjelig eltelt időtartam. A számításhoz felhasznált két érték egymáshoz való viszonyait, a számítás megvalósíthatóságát és a számítási fogásokat a 16.2.3. fejezet mutatja be.

Válaszidő mérése a Timer 1 nullázása nélkül
16.2.1-2. Ábra

      A következő programrészlet a feladat gyakorlati megvalósítását mutatja be.
      A Timer 1 elmentett értékének tárolóregiszterei: TEMP1L, TEMP1H; a kiolvasott érték tárolóregiszterei: TEMP2L, TEMP2H.

... ...    
  clrf CCP1CON ;a CCP modul kikapcsolása
  clrf T1CON ;Timer 1 kikapcsolva (előosztás 1:1, belső léptetés, szinkronizáció)
  clrf INTCON ;a megszakítások tiltása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  bsf TRISC,CCP1 ;a CCP1 kivezetés bemenetként való beállítása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf PIR1 ;a periféria megszakításkérő jelzőbitek nullázása
  bsf T1CON,TMR1ON ;a Timer 1 léptetésének indítása
  ...    
  ...    
       
      ;*** A mérés indítása a Timer 1 kiolvasásával ***
       
  movf TMR1H,0 ;W = TMR1H; a felső bájt olvasása
  movwf TEMP1H ;TEMP1H = TMR1H; a felső bájt elmentése
  movf TMR1L,0 ;W = TMR1L; az alsó bájt olvasása
  movwf TEMP1L ;TEMP1L = TMR1L; az alsó bájt elmentése
  movf TMR1H,0 ;W = TMR1H; a felső bájt újraolvasása teszteléshez
  subwf TEMP1H,0 ;W = TEMP1H - TMR1H; ellenőrző kivonás
  btfsc STATUS,0 ;a zérusjelző bit tesztelése
  goto TOVA1 ;ugrik, ha az értékek megegyeznek
      ;ÚJRAOLVASÁS, ha az értékek különböznek
  movf TMR1H,0 ;W = TMR1H; a felső bájt olvasása
  movwf TEMP1H ;TEMP1H = TMR1H; a felső bájt elmentése
  movf TMR1L,0 ;W = TMR1L; az alsó bájt olvasása
  movwf TEMP1L ;TEMP1L = TMR1L; az alsó bájt elmentése
  goto TOVA2 ;a folytatásra lépés
TOVA1 nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
TOVA2 movlw 0x10 ;W = 0x10 (= 16d)
  addwf TEMP1L,1 ;TEMP1L = TEMP1L + 0x10
  btfsc STATUS,C ;a túlcsordulás vizsgálata
  incf TEMP1H,1 ;az átvitel végrehajtása
  bsf PORTx,x ;külső folyamat indítása
  movlw 0x05 ;W = 0x05
  movwf CCP1CON ;a Capture üzemmód indítása, kiolvasás minden felfutó élre
FIGYEL btfss PIR1,CCPIF ;a CCP modul megszakításkérés jelzőbit vizsgálata; ugrik, ha "1"
  GOTO FIGYEL ;visszalép, mivel nem történt kiolvasás
  movf CCPR1L,0 ;W = CCPR1L
  movwf TEMP2L ;TEMP2L = CCPR1L (kiolvasott érték alsó bájt elmentve)
  movf CCPR1H,0 ;W = CCPR1H
  movwf TEMP2H ;TEMP2H = CCPR1H (kiolvasott érték felső bájt elmentve)
  bcf PIR1,CCPIF ;a CCPIF jelzőbit nullázása
  clrf CCP1CON ;a CCP modul kikapcsolása
       
      ;*** Időtartamszámítás ***
  ...    
  ...    

      A program biztosítja, hogy a külső folyamat indításakor a TEMP1L, TEMP1H regiszterpár értéke a Timer 1 pillanatnyi értékével megegyező legyen.

Vissza a lap tetejére

      A következő programrészlet a fenti program megszakításkezeléssel megvalósított változatát mutatja be. A CCP modul megszakítás csak a kiolvasás megtörténtéig van engedélyezve. (A példaprogramban a CCP modul megszakításon kívül, minden megszakítás tiltva van.)
      A megszakításos kiolvasás-kezelés biztosítja, hogy a főprogram a lehető legtöbb időt tölthesse más feladatokkal, mivel így nincs szükség a folyamatos erőforrásigényű jelzőbit-figyelésre.

  ...    
  ...    
  clrf CCP1CON ;a CCP modul kikapcsolása
  clrf T1CON ;Timer 1 kikapcsolva (előosztás 1:1, belső léptetés, szinkronizáció)
  clrf INTCON ;a megszakítások tiltása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  bsf TRISC,CCP1 ;a CCP1 kivezetés bemenetként való beállítása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf PIR1 ;a periféria megszakításkérő jelzőbitek nullázása
  bsf T1CON,TMR1ON ;a Timer 1 léptetésének indítása
  ...    
  ...    
      ;*** A mérés indítása a Timer 1 kiolvasásával ***
       
  movf TMR1H,0 ;W = TMR1H; a felső bájt olvasása
  movwf TEMP1H ;TEMP1H = TMR1H; a felső bájt elmentése
  movf TMR1L,0 ;W = TMR1L; az alsó bájt olvasása
  movwf TEMP1L ;TEMP1L = TMR1L; az alsó bájt elmentése
  movf TMR1H,0 ;W = TMR1H; a felső bájt újraolvasása teszteléshez
  subwf TEMP1H,0 ;W = TEMP1H - TMR1H; ellenőrző kivonás
  btfsc STATUS,0 ;a zérusjelző bit tesztelése
  goto TOVA1 ;ugrik, ha az értékek megegyeznek
      ;ÚJRAOLVASÁS, ha az értékek különböznek
  movf TMR1H,0 ;W = TMR1H; a felső bájt olvasása
  movwf TEMP1H ;TEMP1H = TMR1H; a felső bájt elmentése
  movf TMR1L,0 ;W = TMR1L; az alsó bájt olvasása
  movwf TEMP1L ;TEMP1L = TMR1L; az alsó bájt elmentése
  goto TOVA2 ;a folytatásra lépés
TOVA1 nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
  nop   ;kiegyenlítő késleltetés
TOVA2 movlw 0x10 ;W = 0x10 (= 16d)
  addwf TEMP1L,1 ;TEMP1L = TEMP1L + 0x10
  btfsc STATUS,C ;a túlcsordulás vizsgálata
  incf TEMP1H,1 ;az átvitel végrehajtása
  bsf PORTx,x ;külső folyamat indítása
  movlw 0x05 ;W = 0x05
  movwf CCP1CON ;a Capture üzemmód indítása, kiolvasás minden felfutó élre
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  movlw B'xxxxxxxx' ;megszakítás engedélyező maszk bevitele; CCPIE="1"
  movwf PIE1 ;a maszk érvényesítése
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  bsf INTCON,6 ;PEIE="1"; periféria megszakítások engedélyezése
  bsf INTCON,7 ;GIE="1"; globális megszakítás engedélyezés
  ...    
  ...    
MEGSZ movwf W_TEMP ;a W értékének mentése
  swapf STATUS,0 ;W = STATUS bitcserével
  movwf S_TEMP ;a STATUS regiszter bitcserélt értékének elmentése
  clrf STATUS ;a 0. adatmemória lap kiválasztása
  movf CCPR1L,0 ;W = CCPR1L
  movwf TEMP2L ;TEMP2L = CCPR1L (alsó bájt elmentve)
  movf CCPR1H,0 ;W = CCPR1H
  movwf TEMP2H ;TEMP2H = CCPR1H (felső bájt elmentve)
  bcf PIR1,CCPIF ;a CCPIF jelzőbit nullázása
  bsf STATUS,5 ;az 1. adatmemória lap kiválasztása
  clrf PIE1 ;a periféria megszakítások tiltása
  bcf STATUS,5 ;a 0. adatmemória lap kiválasztása
  clrf CCP1CON ;a CCP modul kikapcsolása
       
      ;*** Időtartamszámítás ***
  ...    
  ...    
  swapf S_TEMP,0 ;W = STATUS regiszter elmentett értéke
  movwf STATUS ;a STATUS regiszter értékének visszaállítása
  swapf W_TEMP,1 ;a W_TEMP értékének bitcseréje
  swapf W_TEMP,0 ;a W értékének visszaállítása
  retfie   ;visszatérés a megszakításból
  ...    
  ...    

Vissza a lap tetejére

      A válaszidőmérés megoldható két bemeneti esemény időpontjának rögzítésével és ezek összehasonlításával is. Ehhez az indító eseményt vissza kell vezetni a mikrovezérlő CCPx bemenetére, amely egyben a válaszjelet is fogadja.
      Az alábbi ábra ennek egy kapuáramkörrel megvalósított megoldását mutatja be.

Az indító esemény visszavezetése a Capture bemenetre
16.2.1-3. Ábra

      Egy két CCP modult alkalmazó megoldás:

Válaszidőmérés két CCP modullal
16.2.1-4. Ábra

      A két bemeneti esemény közötti időtartam meghatározását a 16.2.3. fejezet mutatja be.

 

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra