Portál AbcLinuxu, 21. května 2024 21:36


Dotaz: Raspberry-pi hw debouncing

the.max avatar 12.4.2020 21:16 the.max | skóre: 46 | blog: Smetiště
Raspberry-pi hw debouncing
Přečteno: 499×
Odpovědět | Admin
Ahoj,

určitě je tu mnoho těch, kteří používají malinu. Snažím se najít nějaký 'best of practice' ohledně ošetření bounce efektu u tlačítek a jiných spínačích připojených k malině, kdy načítání stavů je řešeno přes přerušení. Vyzkoušel jsem už toho velku dost ale vždycky se občas něco vykonalo vícekrát.

Má smysl používat vnitřní pull up nebo pull down? nebo je lepší to v tomhle případě řešit externě?

Předem díky.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.4.2020 23:14 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Odpovědět | | Sbalit | Link | Blokovat | Admin
Že se vykonalo něco dvakrát neznamená nutně, že Vám nefunguje debouncing... třeba někdo to tlačítko stisknul 2x :)

Prostě načtete hodnotu opakovaně několikrát a z naměřených hodnot určíte, zda považujete tlačítko za stlačené nebo nestlačené. Zajímat Vás bude asi ten algoritmus ale ten zase záleží na druhu tlačítka či sensoru. Takže to chce více detailů - jaké zařízení, ukázku kódu atd.

Jinak třeba tady: https://my.eng.utah.edu/~cs5780/debouncing.pdf a https://hackaday.com/2015/12/09/embed-with-elliot-debounce-your-noisy-buttons-part-i/

Pokud to má být nějaké profi zařízení tak bych šel spíš do HW řešení.
-- OldFrog
the.max avatar 13.4.2020 12:43 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Díky za linky, na ten druhý už jsem před několika dny také narazil, ale vzpomínám si, že jsem ho vlastně nedočetl celý.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
Jendа avatar 13.4.2020 02:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já si v interrupt handleru zapamatuju čas a pokud se znovu zavolal za míň než X ms, tak tu událost ignoruju.
Já to s tou denacifikací Slovenska myslel vážně.
the.max avatar 13.4.2020 12:44 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Můžeš sem prosím pastnout kus kódu? S tím jsem také experminetoval ale možná jsem na to šel špatně. Dǐky.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
Jendа avatar 13.4.2020 19:14 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Nedělám to na RPi, takže to asi bude k ničemu, ale je to něco jako
static volatile uint32_t last_intr;
ISR() {
  if(millis() - last_intr < 5) return;
  last_intr = millis();
  dělej_něco;
}
Jendа avatar 13.4.2020 19:16 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Hm, ale tohle teda neošetří pokud ti to dělá zákmity i při rozepnutí. Tam si budeš muset v podobném duchu udělat něco víc.
13.4.2020 08:57 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nějak nechápu co řešíš?

Každý mechanický kontakt při sepnutí zakmitává a vyvolá nějaké kmitání.

A teď se to musí ošetřit buď na HW stránce a nebo pokud CPU stíhá tak po SW stránce.

V domácích podmínkách to jde většinou řešit pomocí SW.

Prostě při vyvolání události musím stav překontrolovat minimálně 2x, jednou po hodně malém časovém úseku zda je událost skutečně vyvolaná a později za delší čas který musí být delší jak zakmitávání kontaktů.
the.max avatar 13.4.2020 12:36 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Řeším přesně to, co na co jsem se dotazoval. A ano, chci to řešit hardwarově, což jsem také psal. Také jsem psal, že už jsem toho vyzkoušel celkem dost ale s různou úspěšností, nikdy to ale nebylo ve výsledku 100%ně bez chyby. A proto se ptám na zkušenosti ostatních, co používají a jaké mají zkušenosti. Ale tohle všechno tu vlastně píšu úplně zbytečně, protože už jsem to psal v původním dotazu.

Snažím se ošetřit zákminy mikrospínačů do DPS.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
13.4.2020 19:31 Radovan
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Použij membránovou klávesnici, nebo hallovy snímače, nebo magnetické jazýčkové kontakty, nebo RC obvod, nebo přepínač s flipflopem, nebo to ošetři softwarově.

To máš přerušení pověšené přímo na ten spínač? To není dobrý způsob, radši tam dej časovač a čti vstup v pravidelných intervalech, a teprve když bude třeba několikrát za sebou neměnný, tak ho pošli dál.
14.4.2020 08:41 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Pouze kecy a žádný příklad....

Prostě když sem nedáš příklad tak se těžko může hledat chyba.

Většinou je problém pokud je tlačítko na dlouhém kabelu, a indukuje se do drátu rušení....

Další problém většinou je že někdy se zapomene kontrolovat i puštění tlačítka, takže sepnutí je OK ale puštění zase vyrobí kmitání.

Další snímání nového stavu by se mělo dělat zase až po době maximálního zakmitávání atd....

Vše je o tom co ovládáš a jak rychle musí SW zareagovat na tlačítko, pokud je to klávesnice ovládaná člověkem tak ty časy můžou být dostatečně dlouhé....
Řešení 1× (the.max (tazatel))
13.4.2020 21:06 mhepp
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsem si jistý, jestli pro HW řešení je toto vhodné fórum. Já hledal řešení před pár lety zde:

http://www.ebastlirna.cz/modules.php?name=Forums&file=viewtopic&t=81556&highlight=

Problém s mým zapojením, že jednoduchý RC obvod nefungoval kvůli kapacitní vazbě na vstupu PCF8583, takže pouze v kombinaci se Schmittovým klopným obvodem. Ale zase je to sichr.
the.max avatar 15.4.2020 23:27 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: Raspberry-pi hw debouncing
Oka, díky, tohle řešení jsem měl v záloze jako poslední variantu, ale pokud to funguje, nebudu to dál řešit ;-)
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.