Debouncing, was: Brouk pro vstupy 24V
Pavel Hudecek
edizon na seznam.cz
Pondělí Říjen 19 15:11:21 CEST 2015
Např. ve většině mých FW je synchronizační proměnná, která se nastaví na 1
vždy při milisekundovém přerušení (to mám snad ve všech a tam kde ne, je zas
1/10, nebo 1/50 ms) a pak je čekací funkce, která se volá jako součást
jakéhokoli čekání a v ní je někde if, v rámci kterého se vykonávají věci, co
by se měly vykonávat každou ms, ale neměly by zdržovat přerušení. A mezi ně
typicky řadím i deboucing vstupů od kláves a jiných kontaktů. Různé vstupy
samozřejmě můžou mít různý počet ms pro vyhodnocení změn. Výsledek se zas
uloží do patřičných proměnných a jejich hodnoty už používají různé jiné
části programu po svém.
PH
-----------------------
From: Tomáš Hamouz
Filtrace zákmitů a vyhodnocování programem jsou snad dvě na sobě nezávislé
funkce, jen je třeba dodržet aby filtrace byla dostatečně rychlá i pro
ten nejrychlejší vstup.
Klidně bych nechal filtraci vstupů společnou, a nechal program ať si
hodnotu vyhodnotí kdy chce. Samozřejmě pokud je u těch pomalých vstupů
výslovný požadavek na pomalou filtraci, pak je to třeba filtrovat zvlášť.
> Ano, podobný algoritmus jsem si kdysi napsal v ASM a od té doby ho téměř
> beze změn používám. V tom odkazu to dělají trochu efektivněji.
> Problém nastane, když jsou vstupy zapojené bez hlubší znalosti logiky
> programu a liší frekvence čtení sousedních vstupů. Často se sejdou periody
> od 1s do 1 ms. Pak má někde smyl posuvný registr pro každý vstup zvlášť.
----------------------
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Tomáš
> Hamouz
> Znáte Vertical counters?
> Počítáte všechny vstupy najednou.
> např.
> http://www.compuphase.com/electronics/debouncing.htm
> Lze pozšířit na 3 bity, viz
> http://everything2.com/title/vertical+counter
Další informace o konferenci Hw-list