Připojujeme tlačítko
Autor: Zbyněk Winkler a Martin Dlouhý, 2005-07-24
jak fungují vstupy jednočipu
Pokud má robot reagovat na své okolí, potřebuje senzory. Nejjednodušším typem
senzoru je obyčejné tlačítko, kterým se dá realizovat třeba nárazník.
Nárazník byl i jediným senzorem robota Berta, který zvítězil
v uklízecí soutěži ve Švýcarsku. Jak tedy
fungují vstupy jednočipu a jak k nim připojit tlačítko tak, aby fungovalo
spolehlivě, se dozvíte v tomto článku.
TODO: fotku mikrospínače
Jednočip je schopen měřit napětí na svých vstupech a
to buď relativně hrubě (0/1) nebo jemněji (A/D převodník). První zásada proto
zní: každý vstupní pin musí být stále připojen k definovanému napětí.
Proč? Pokud tomu tak není, jeho vstup je nedefinován a jedná se o tzv.
floating input. Pin se pak chová jako anténa a čeká Vás spousta překvapení.
Budete-li mít např. takto zapojen melodický zvonek, tak Vám může „z ničeho
nic” o půlnoci začít hrát .
A pokud říkáme stále, myslíme tím opravdu stále. Na prvním obrázku vidíte
zapojení typu „anténa”, kdy je na pinu definovaný stav pouze při připojení k
5V. Na druhém obrázku je pokus o zlepšení, kdy je tlačítko zapojené jako
přepínač mezi 0V a 5V. Nicméně ani toto řešení není dokonalé. Vstup stále ještě
může být v nedefinovaném stavu při přepínání, kdy není k ničemu připojen.
Anténa
|
Robustnější zapojení
|
S pull-upem
|
Správné řešení je pomocí
pull-up odporů. Jejich
funkce je opravdu doslova „vytahovat nahoru” napětí v případech, kdy není
řečeno jinak (některé jednočipy mají dokonce tyto odpory zabudovány interně). K
pochopení jejich funkce nám pomohou vzpomínky na středoškolskou fyziku
(elektroniku). Zajímat nás bude zejména něco, čemu se říká odporový dělič
(anglicky
voltage divider).
Odporový dělič jsou v podstatě dva odpory zapojené do série. Odporový dělič se
tomuto zapojení říká z toho důvodu, že připojené napětí se mezi odpory
„rozdělí” v poměru jednotlivých odporů. Je to jednoduchá aplikace
druhého
Kirchhoffova zákona zákona, který říká, že součet napětí zdrojů v obvodu se
rovná součtu napětí na jednotlivých spotřebičích.
Zapojení jednočipu s pull-up odporem je v podstatě odporový dělič, kde se
jednočip chová jako velmi velmi velký odpor. Při rozpojeném tlačítku je napětí
na vstupním pinu blízké 5V, protože jednočip má řádově větší odpor než náš
pull-up. Při sepnutém tlačítku se nám vytvoří jiný odporový dělič. Náš pull-up
je stále jeho součástí, pouze jeho druhá část jaksi „degenerovala” na spoj s
minimálním odporem. Proto je na vstupním pinu napětí blízké 0V.
Možná vás to překvapí (až budete mít větší zkušenosti s robotikou, tak by už
nemělo ), ale ani při zapojení s pull-upem nemusíme mít úplně vyhráno.
Problém může být ještě i v samotném tlačítku. Při spínání a rozpínání tlačítka
může dojít k zákmitu a jednočip může detekovat několik rychlých zapnutí a
rozepnutí tlačítka. Hodnota napětí může přecházet relativně pomalu a v oblasti
2.5V se může lehce zachvět, což čip mylně interpretuje jako několik sepnutí.
Toto se stává zejména při použití starších či nekvalitních tlačítek.
Většina dnešních čipů je na něco takového již připravena. Vstupní piny jsou
typu
schmitt trigger. Od
obyčejných vstupních pinů se liší využitím dvou prahových hodnot pro detekci
logické jedničky a nuly. Pokud je na pinu logická jednička je třeba s napětím
klesnout např. pod úroveň 2V pro přepnutí do logické nuly. Obráceně, pro
přepnutí z logické nuly je třeba napětí zvýšit až třeba na 3V. Drobné zákmity
kolem jednotlivých hranic (
thresholdů) tedy nezpůsobují falešné přechody.
Obecně se tomuto principu říká prahování s
hysterezí a v robotice je to velmi
užitečný algoritmus.
Pokud nám nepomohou ani schmitt trigger vstupy, je čas na softwarové řešení (v
případě, že zákmity jsou tak velké, že je threshold s hysterezí nezachytí).
Metoda se nazývá softwarový debouncing (v překladu snad něco jako
„odstranění přeskoků”). Je velmi jednoduchá a spočívá v ignorování rychlých
změn pinu. Tj. pro detekci změny stavu vyžadujeme, aby pin v daném stavu zůstal
po určitý minimální čas.
Související odkazy
Závěr
Pokud se Vám něco z toho nepodařilo nebo Vám některá část přišla méně
srozumitelná, můžete se nám ozvat pomocí našeho
kontaktního formuláře.
Pošlete email redakci.
Všechny materiály, které máme k dispozici, jsou již součástí článku, na který reagujete (tj. pokud tam tedy není např. plánek na stavbu, je to proto, že nic takového nemáme).
Vaši zprávu se bohužel nepodařilo odeslat, ale můžete nám napsat sami na adresu webmaster-at-robotika.cz
Vaše zpráva byla úspěšně odeslána
Pro odeslání formulář je třeba mít zapnutý javascript.