Vissza a főoldalra    Vissza a PIC főoldalra

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

 


16.2.4. A mérési intervallum kibővítése


      A Capture üzemmód időmérési tartományát felülről behatárolja a 16-bites Timer 1 számláló átfutási ciklusa. A mérési tartomány megnövelhető:
     ˇ a Timer 1 számláló elegendően alacsony frekvenciájú külső léptetésével, amelynek csökkentésével arányban természetesen a felbontás is kisebb lesz;
     ˇ a Timer 1 előosztójának alkalmazásával, amely 2-, 4- vagy 8-szorosára növeli a méréshatárt a felbontás (pontosság) ugyanilyen arányú romlása mellett;
     ˇ szoftveres számlálóregiszterek alkalmazásával; ezen a módon a méréshatár tetszőleges mértékben kiterjeszthető a felbontás romlása nélkül; a fejezet további része ezt a módszert mutatja be.

      A szoftveres számláló regiszterek (8-bites általános adatregiszterek) segítségével a 16-bites Timer 1-gyel kezdődő számlálólánc hossza 24-, 32-, 40-, 48-... bitesre növelhető az alkalmazott regiszterek számának megfelelően. A Timer 1 minden túlcsordulásakor meg kell növelni 1-gyel a soron következő regiszter (16..31. bit) értékét. Ha ez a regiszter is túlcsordul, akkor a rákövetkező regiszter (32..39. bit) értékét kell megnövelni... és így tovább.
      A kiolvasás megtörténte után a CCPRxx regisztereken kívül a szoftveres számlálóregiszterek értékét is menteni kell, valamint a helyes számítási eredményekhez minden műveletet a teljes bithosszon (24, 32, 40, 48...) kell végezni.

      A következő ábra egy 32-bitesre bővített számlálóláncot mutat be.

Egy 32-bites számlálólánc
16.2.4-1. Ábra

      A Timer 1 TMR1L és TMR1H számlálóregiszterei mellett ("felett") szoftveres kezeléssel működnek a TM1HH és TM1HHH általános adatregiszterek.
      A Timer 1 túlcsordulásakor a TM1HH regiszter értékét 1-gyel növelni kell, valamint meg kell vizsgálni, hogy ez a növelés okozott-e túlcsordulást a regiszternél, ha igen, akkor a TM1HHH értékét is meg kell növelni.
      A kiolvasáskor a TMR1L és TMR1H értékei a CCPRxL és CCPRxH regiszterekbe kerülnek. Ezután - még a következő kiolvasás előtt - a kiolvasott értékeket a TxL és TxH általános adatregiszterekbe kell menteni. Ezt követően (vagy megelőzően) a TM1HH és TM1HHH regiszterek értékét is menteni kell.

      A Timer 1 túlcsordulásának lehetséges kezelési módjai:
     ˇ a PIRx regiszterben elhelyezett TMR1IF túlcsordulás-jelzőbit folyamatos szoftveres figyelése;
     ˇ a Timer 1 túlcsordulás-megszakítás engedélyezése és kezelése.

Vissza a lap tetejére

      A következő folyamatábra jelzőbitfigyeléssel megvalósított folyamatos kiolvasásra mutat példát 32-bitesre bővített számlálólánccal. A végrehajtási sorrend biztosítja, hogy a kiolvasási esemény és a kiolvasott érték elmentése között a szoftveres számlálóregiszterek értéke ne változzon, ami a helyes működés alapfeltétele.

Folyamatos kiolvasás jelzőbitfigyeléssel, 32-bites számlálólánccal
16.2.4-2. Ábra

Vissza a lap tetejére

      A folyamatábrát megvalósító programrészlet:

... ...    
  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 TM1HH ;a szoftveres számlálóregiszter nullázása
  clrf TM1HHH ;a szoftveres számlálóregiszter nullázá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
UJRA btfss PIR1,CCPIF ;a CCP modul megszakításkérés jelzőbit vizsgálata; ugrik, ha "1"
  GOTO SZAML ;továbblép, mivel nem történt kiolvasás
  movf CCPR1L,0 ;W = CCPR1L
  movwf T1L ;T1L = CCPR1L (alsó bájt elmentve)
  movf CCPR1H,0 ;W = CCPR1H
  movwf T1H ;T1H = CCPR1H (második bájt elmentve)
  movf TM1HH,0 ;W = TM1HH
  movwf T1HH ;T1HH = TM1HH (harmadik bájt elmentve)
  movf TM1HHH,0 ;W = TM1HHH
  movwf T1HHH ;T1HHH = TM1HHH (negyedik bájt elmentve)
  bcf PIR1,CCPIF ;a CCPIF jelzőbit nullázása
       
      ;*** Időtartamszámítás ***
  ...    
  ...    
       
SZAML btfss PIR1,TMR1IF ;a Timer 1 túlcsordulás jelzőbit vizsgálata; ugrik, ha "1"
  GOTO UJRA ;visszalép, mivel nincs túlcsordulás
  bcf PIR1,TMR1IF ;a TMR1IF jelzőbit nullázása
  incf TM1HH,1 ;a TM1HH számlálóregiszter növelése
  btfss STATUS,C ;a TM1HH túlcsordulás vizsgálata
  GOTO UJRA ;visszalép, mivel nincs túlcsordulás
  incf TM1HHH,1 ;a TM1HHH számlálóregiszter növelése
  goto UJRA ;visszalép

 

  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