AVR Input Capture rejtely

Fuzesi Arnold arno at externet.hu
Sun Jan 8 16:19:13 CET 2006


Sziasztok!


ICP labon az alabbi jelalak ms (azaz a proci jocskan gyorsabb) 
nagysagrendben:
000111100000000000000000111100000000000000000011

Kód:
uint icr1;

__interrupt void CAPT_handler(void)
{
 static uint
        rising=0;
    if(gbi(TCCR1B,ICES1) ){    //rising edge
        rising=ICR1;                    //save timestamp
        cbi(TCCR1B,ICES1);    //switch to falling edge
 }
    else if(!gbi(TCCR1B,ICES1) ){  //falling edge
  uint falling=ICR1;                    //save timestamp
        sbi(TCCR1B,ICES1);    //switch to rising
        icr1=falling-rising;            //calc dist
        icr1_update=1;
    }
}

Miért ad ez vissza vajon ilyen eredmenyt?
icr1, rising, falling
ICR:ffe1,27d,25e
ICR:ffe3,15e,141
ICR:17,e1,f8
ICR:14,200,214
ICR:ffef,3bf,3ae
ICR:ffef,2a0,28f
ICR:ffee,62,50
ICR:11,be,cf
ICR:11,2fc,30d

Azaz mit keresnek benne negativ, vagy ha ugy tetszik baromi nagy szamok?

A falling kesobb van mint a rising, azaz ha barmikor kivonom a fallingbol a 
risinget, akkor egy kicsi szamot kell kapjak.
Akkor is ha kozben a timer tulszaladt 65535-on...tulcsordul.

Nem ertem mit keres benne 27d, 25e....Mitől mér ilyen nagy időket? Mikor a 
falling élnél szamolok mindent, és az az megelőző rising él
10-20 távolsagra lehetett csak előtte...

A fenti algoritmusban lehet valami hiba?
Egyszerűen nem jövök rá micsoda...

Vagy a proci nem vesz észre minden élt?

Arnold 




More information about the Elektro mailing list