Pro Expanduino potřebuju řídit přístup ke sdílenému zdroji tak, aby, když s ním jedna strana skončí, bylo jasné, že s ním může druhá strana volně pracovat a naopak. Pro to by se hodilo hradlo RS.
Běžné hradlo RS má výstup Q (a často taky jeho negaci Q s čárkou nahoře), a dva vstupy Reset a Set. Je-li aktivní pouze Reset, nastaví výstup na nulu, je-li aktivní pouze Set, nastaví výstup na jedničku, není-li aktivní nic, tak se stav nemění a uchovává se poslední hodnota výstupu (kvůli tomu se hradlo RS používá) a jsou-li aktivní oba vstupy, jde o zakázaný stav a výstup není definován.
Tady ale každá strana používá pro manipulaci se zdrojem svůj signál Enable, který je aktivní v nule a když s ním skončí, tak se to pozná tak, že ten signál přejde do jedničky (a už tam zůstane). Takže potřebuju podobné hradlo, které ale nebude reagovat na úrovně, ale na vzestupné hrany vstupních signálů. Čili Edge Triggered Hradlo RS (víc to rozebírám tady).
Narazil jsem na podobnou otázku na StackExchange a jejich plně digitální řešení se mi líbilo víc než moje poloanalogové. A protože najít něco takového je dost problém (protože jakmile člověk zmíní hranu, tak mu tam Google nacpe hodiny, ale tady žádné hodiny nejsou), tak o tom píšu i sem.
Jejich schéma je jednoduché
a když jsem si to zkoušel nasimulovat, tak mi to chodilo.
Tak jsem si to ještě zkusil zapojit na breadboardu
a tam to chodilo taky. Klíčový uzel jsou dvě hradla D v jednom pouzdře, čili obvod 74HC74 (který jsem si musel vsadit do redukce, abych to mohl na breadboardu zkoušet).
Na něj navazují dvě hradla NOR (půlka obvodu 74HC02) a dvě LED pro indikaci výsledku.
Protože jsem potřeboval testovat, jak se to chová při přechodech vstupů z nuly do jedničky (a zpět a tak) a pouhé zastrkávání či vytahování drátku z/do breadboardu vždycky udělá celou sérii zákmitů, tak jsem si vstupy ošetřil pomocí dvou klasických RS obvodů (půlka 74HC279).
A protože jsem u těch vstupů chtěl vidět, co se děje a zárověň u nich mít pullup, tak jsem nepoužil citlivou indikaci, ale pouze diodu s odporem (teda dva malé indikátory napětí, též na RoboDoupěti ), krátký a dlouhý, jako klasické 2v1 🙂