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