Raspberry Pi 32) Řízení displeje a klávesnice přes I2C V tomto článku spojím dohromady několik systémů, které jsem jednotlivě popisoval v minulých článcích: 1) Ovládání dvojřádkového displeje - (odkaz).
Spojením těchto tří částí vznikne jednotka, pomocí které je možné i bez televize a počítačové sítě (jen s použitím malé tlačítkové klávesnice a znakového displeje ) řídit běh různých programů. Například se pomocí takovéto jednotky může postavit kalkulačka, nebo se jednotka může využít pro spouštění různých programů pomocí několikaúrovňového menu. Zapojení na nepájivém poli vypadá trochu složitě, ale ve skutečnosti to nic složitého není - jak je vidět níže na schématu:
Základem je GPIO expander MCP23017. Jeho port "GPA" se stará o řízení displeje. Displej je k expanderu připojený "úsporným" (čtyřdrátovým) způsobem (má zapojené pouze 4 datové vstupy). To umožňuje využít zbylé GPA piny pro řídící signály (Strobe - E, RegistrySelect - RS a podsvět - A). Jeden pin (GPA7) dokonce zbyl a je možné ho využít pro další vstup (například tlačítko) , nebo výstup (třeba LED). Druhá polovina expanderu (GPB) se stará o čtení maticové klávesnice 4x4 znaky.
Když i přesto budete chtít použít pro svůj projekt tu fóliovou
klávesnici, dejte si pozor na to, že má trochu jinak uspořádané vývody, Displej a expander pracují s napěťovými úrovněmi 5V. Sběrnice I2C na RaspPi je ale třívoltová. Proto bylo třeba tyto napěťové úrovně oddělit. Ve schématu jsem použil obvod PCA9306, který je k tomu přímo určený. Pokud ho ale nemáte k dispozici, klidně můžete použít zapojení se dvěma FETy, jak je uvedeno v dřívějším článku o expanderu. Připojení celého tohoto systému k RasPi je provedeno pouze pomocí 5 drátů - SDA, SCL, GND, +3,3V a +5V. Toto zapojení tedy nepotřebuje žádný další GPIO pin na Raspíčku. Celé řízení jednotky probíhá pomocí komunikace I2C. Software Ke správné funkci je třeba mít v RasPi nainstalovanou podporu I2C a SMBUS pro Python. Program tady nebudu vypisovat celý (je dost dlouhý). Můžete si ho stáhnout zde: Na jeho začátku je několik ukázkových příkladů použití, s
jejichž pomocí by mělo být jasné,
jak fungují všechny podprogramy.
Ještě pár poznámek: 1) Program byl odzkoušen na dvouřádkovém displeji s šířkou 16 znaků. Nemám to sice vyzkoušené, ale když v podprogramech "pozice()" a "blikkurzor()" zrušíte komentáře, měl by program fungovat i se čtyřřádkovými displeji. 2) Definice položek v menu je jen ukázkový příklad a odpovídá takovémuto menu:
Akce vyvolané vybráním příslušných položek
jsou volně definovatelné. Já jsem v příkladu použil spouštění
programu:
3) Program v mnoha částech neobsahuje žádné kontroly na korektní vstupy. Problém nastane například v okamžiku, když se pokusíte vypsat český text:
Program využívá funkci ord() pro získání ASCII kódu písmene. Pokud ale tato funkce dostane znak s ASCII kódem větším než 127 (například "ž"), program zhavaruje.
|
úvodní strana webu AstroMiK.org |
|
poslední úprava stránky 27.2.2013 |