Takze chlapi znovu ozivujem starsiu temu ale potreboval by som poradit. Skusal som kod ktory tu dal Martin na vyhodnotenie nabeznej hrany. Vsetko funguje ako ma po par upravach. A to by som chcel zistit ze preco. Davam tu cast kodu (cely je o par riadkov vysie) popisem co som upravil. Takze namiesto POCET_TLACITOK som musel zvysit hodnotu na 5 (povodne bola 4 vid define vysie) ak som mal hodnotu 4 fungovali mi len prve 3 tlacitka. Stvrte vobec nereagovalo. Az po zvyseni hodnoty na 5.
Dalej snazim sa pochopit cely kod ako pracuje nerozumiem cyklu for. Ten mi spravi napr 4 cykly. V kazdom cykle sa dekrementuje premena casovac_tl* o jedno alebo o celý cas ktory je ulozeny v CAS_NABEZNEJ_HRANY. Lebo cykly su 4 a cas je 25 ktory sa musi dekrementovat. Dekrementuje sa 4x po 25? Dufam ze som sa zrozumitelne vyjadril
[code]
// kazdu ms pod prerusenim budes spustat nasledovny kod
void fn_vyhodnot_tl(void)
{
aktualny_stav_tl = fn_stav_tlacitok();
// POZOR, vsetko bude fungovat do poctu tlacitok 8. Pre 16 tlacitok treba zmenit typy premennych z bajtov na wordy. Casovace netreba, ak cas na ustalenu roznost stavov ma byt mensi ako 256ms.
for(uint8_t i = 0; i < POCET_TLACITOK; i++) {
// testujem pripadnu zmenu stavu
if ( TST(aktualny_stav_tl, i ) != TST(stary_stav_tl,i ) ) {
// samotna zmena stavu nestaci,
// este aj "casovac" musi dopocitat do nuly
if (casovac_tl*) (casovac_tl*--;
// ak roznost stavov trvala zelanu dobu,
// mozeme ju akceptovat a spravit prislusne vyhodnotenia
else {
if TST(aktualny_stav_tl,i) {
SET(stary_stav_tl,i );
SET(nabezna_hrana_tl,i );
casovac_tl* = CAS_DOBEZNEJ_HRANY;
}
else {
RES(stary_stav_tl, i );
SET(dobezna_hrana_tl,i );
casovac_tl* = CAS_NABEZNEJ_HRANY;
}
}
}
// ak by sa i na jednu vzorku oba stavy rovnali,
// "casovac" sa znovu nastavi na hodnotu predvolby tu
else {
if TST(aktualny_stav_tl,i) {
casovac_tl* = CAS_DOBEZNEJ_HRANY;
}
else casovac_tl* = CAS_NABEZNEJ_HRANY;
}
} [/code]*******