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