Inkrementalni cidlo - cudlik

Pavel Hudecek edizon na seznam.cz
Sobota Červenec 23 15:06:00 CEST 2016


Dobrý den všem,

vím že se tu na to párkrát někdo ptal. No a já to občas do něčeho dělám. 
Zajímavé je, že mi to pokaždé vyjde jinak složité. Teď mi to zrovna zase 
vyšlo velice elegantně, tak se musím pochlubit a třeba se to někomu bude 
hodit:

static volatile uint8_t pinKol1a=1, pinKol1b=1, pinKol2a=1, pinKol2b=1;

void kol1test() { // 
==================================================================================
    pinKol1a=Chip_GPIO_ReadPortBit(LPC_GPIO, KOL1_aPort, KOL1_aPin);
    pinKol1b=Chip_GPIO_ReadPortBit(LPC_GPIO, KOL1_bPort, KOL1_bPin);
}

void PIN_INT0_IRQHandler() { // KOL1a 
=================================================================
    Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH(KOL1_aIntInd));
    kol1test();
    if (pinKol1a && pinKol1b || !pinKol1a && !pinKol1b) sysKol1n--; else 
sysKol1n++;
}

void PIN_INT1_IRQHandler() { // KOL1b 
=================================================================
    Chip_PININT_ClearIntStatus(LPC_PININT, PININTCH(KOL1_bIntInd));
    kol1test();
    if (pinKol1a && pinKol1b || !pinKol1a && !pinKol1b) sysKol1n++; else 
sysKol1n--;
}

Pak se ještě v milisekundovém přerušení testuje, zda je sysKolXn dělitelný 4 
a pokud ano, hodnota dělená čtyřmi se bere jako výsledek.

Funguje zcela spolehlivě a to i přesto, že se jedná o čudlík s mechanickými 
kontakty určený k ručnímu kroucení (testováno el. šroubovákem).

Jen u toho ifu mě warning otravuje, že prý by doporučoval závorky. Já si ale 
myslím, že by to jen znepřehlednily. Ale nevím, jak ho vypnout (nejlépe 
lokálně, aby jinde a jindy prudit mohl).

PH 



Další informace o konferenci Hw-list