hamik162

15. díl – OctopusLAB – I2C expandér a emulace logických hradel

V předchozích dílech jsme se několikrát zmínili o logických operacích a představili logická hradla, což jsou elektronické součástky, které pracují s logickými operacemi a přímo je vykonávají.

Pro náš projekt použijeme opět mikrokontrolér ATtiny na sběrnici I2C s osmibitovým (vstupně výstupním) expandérem, v zapojení podle následujícího obrázku.

Chceme nasimulovat libovolná dvouvstupová logická hradla (AND, OR, XOR) a tak emulovat některé logické obvody.
Rozdíl mezi simulací a emulací je především v tom, k čemu slouží – simulace k získání nových poznatků o určitém systému, zatímco emulace umožňuje zajištění jeho funkcí jinými prostředky.

Například zvládneme polovinu klasického obvodu 7400, což je čtveřice dvouvstupových NAND hradel. My máme v projektu pouze dvě, což nám ale postačí i k vyzkoušení jednoduchého RS (reset/set – flip/flop) klopného obvodu (KO).
Je tu ale ještě jedna komplikace. Náš obvod je koncipován vlastně invertovaně. Mačkáme tlačítko, tím připojujeme zem, ale pro pochopitelnou emulaci hradla to interpretujeme jako logickou 1. V programu si můžeme pro potřebu hradla snadno logický vstup negovat, ale pro simulaci elektronického propojení hradel by nám KO nefungoval, proč? Překlápí se sestupnou hranou (log. 1 do 0).

Pro správně fungující KO v našem projektu jsme místo hradel NAND museli použít hradla OR. Máme totiž hardwarově dané negované vstupy (každý zvlášť) – na obrázku červené kroužky v červeném rámečku.
Využili jsme vlastně De Morganův zákon, základní poučku výrokové logiky: negací konjunkce (AND) dvou vstupů je disjunkce (OR) negací těchto vstupů. Ověřte si v pravdivostní tabulce.

K výsledné realizaci jsme použili speciální desku FIRSTboard, která přímo propojuje ATtiny s expandérem. Na obrázku vidíte celé provedení, osazení tlačítek, led diod (pro výstup Q zelená, negovaný červená) a odporů, včetně využití SMD 0R, jako jumper-propojky (adresa 0xXXXXX000 odpovídá PCF_ADDRESS 0x20). Hřeben pod expandérem se dá využít k dalšímu propojování. Na spodní straně je pak pár drátových propojek pro připojení tlačítek k zemi a led diod k plusu.
Samostatným SELECT Tlačítkem (SR vpravo) cyklicky přepínáme mezi dvojicemi hradel: AND, OR, XOR.
AND signalizuje levá dvojice diod (zelená i červená), OR pak pravá dvojice (opět zelená i červená) a pro XOR svítí všechny výstupní svítivé diody.

// ukázka práce s i2c expandérem - zde: nastavení pinů na Output_byte
#include <TinyWireM.h>
#define PCF TinyWireM
#define PCF_ADDRESS 0x20

Output_byte = 0b10101010;  
PCF.beginTransmission(PCF_ADDRESS);
PCF.write(Output_byte);
PCF.endTransmission();

Na celý kód zde není prostor, najdete ho opět na githubu:
https://github.com/octopusengine/hamik_cz/tree/master/attiny/attiny-hamik162/TinyGatesEmulator