Eljutottam odáig, hogy próbapanelon sikerült működésre bírni a cuccot, de lássuk a részleteket!
Ahogy az előző részben is említettem, olyan műszert szeretnék összehozni, ami segít centikre megközelíteni a garázs végében lévő tereptárgyakat (konkrétan egy padlásra vezető létra a legfőbb akadály) a kocsi orrával. Az említett ultrahangos távolságmérő szenzor adatait annál kicsit pontosabban szerettem volna megjeleníteni, hogy "jó/nem jó"! Az információ kijelzésének egyik legolcsóbb (de valószínűleg nem a legegyszerűbb) módja egy 7 szegmenses 4 számjegyű kijelző használata. Ez azért jó, mert relatíve nagy számokat lehet rajta megjeleníteni és nekem most amúgy sem kell túl szofisztikált grafikai megjelenés.
A képen látható eszköznek van 1-2 különlegessége, ami avatatlan szemnek talán fel se tűnik:
- minden számjegy után van tizedes pont
- a második és harmadik számjegyek között van kettőspont és tizedespont is
- a képen 6 láb látható, természetesen az eszköz felső oldalához közel is van még egy sor ezekből, vagyis összesen 12 láb jellemzi a terméket.
A neten sok olyan leírást lehet találni, ami ebből egy primitív digitális órát varázsol, azonban pont ilyen kijelzővel sehol nem találkoztam: legtöbbször 16 lábú példányt használnak mindenhol, ahol netán 12 lába van, ott viszont vagy tizedespontok nincsenek, vagy kettőspont nincs. Némi kutatás (értsd pár óra) után ráakadtam a következő sematikus ábrára, ami után már kicsit könnyebben mentek a továbbiak:
Ahogy a képen is látható ez az úgynevezett közös anódos 7 szegmenses 4 digites LED kijelző elég érdekesen van összedrótozva. Ha ugye az lenne az igényünk, hogy minden egyes szegmenst (azaz LED-et) egyszerre és külön-külön is meg tudjuk szólítani, akkor 4x8 (4 digit x 7 szegmens plusz a pont, vagyis 8 szegmens), azaz 32 katód mellé kellene legyen 1 anód, ami ezért elég sok láb egy ilyen egyszerű eszközön! Ebben az iparban egy bevett gyakorlat ilyen módon közösíteni a lábakat, vagyis a különböző digitekhez tartozó azonos szegmensek katódjai közös lábra vannak kivezetve. Ez elsőre bajosan hangzik, de mivel ledekről beszélünk, ezért a gyakorlatban ezeket elég csak egy nagyon rövid időre felvillantani és kihasználva az emberi szem lassúságát ha egymás után villogtatjuk a digitek szegmenseit, akkor a szem az összeset egyszerre látja égni.
Mivel a 12 láb még mindig nagyon sok (gyakorlatilag szinte az össze kimenetét csak a kijelző használná szegény kis Arduino-nknak) így erre is van iparági standard megoldás: shift register. A 74HC595 típust szokták erre leggyakrabban használni, ami röviden a következőkt tudja:
- vagy egy soros bemenete, mellette egy órajelet is fogad
- vagy egy olyan lába, amin keresztül érzékeli, hogy nem fog több üzenet jönni, vagyis amit eddig kapott azt kell kiraknia a...
- 8 kimenetére
- vagy egy kilencedik kimenete, ami azért jó, mert azon keresztül a beérkezett, de kimenetre nem helyezhető adatot továbbítani tudja, így sorba lehet kötni több ilyen IC-t is.
Praktikusan úgy érdemes ezt használni, hogy az első ilyen IC legyen a 8 darab katódra kötve, a második ilyen IC első 4 kimenete pedig a 4 darab anódra. Ezután kiküldünk mindig 2 darab 8 bites jelet, amiből az első azonosítja, hogy melyik karaktert fogjuk most megjeleníteni, a második 8 bit pedig, hogy melyik szegmensek égjenek. Egymás után rakunk 4 ilyen utasítást, amivel gyorsan kirakunk 4 karaktert, majd egy 5-ik ilyen utasítással kioltjuk az utolsó karaktert is. Ezután várunk kicsit, majd újra megtesszük ugyanezt a kört. (A várakozási idő változtatásával lehet azt beállítani, hogy mekkora fényerővel világítsanak a ledek, vagyis a kijelző.)
Eddig a pontig nagyjából 2 este alatt jutottam el, de innen már a könnyebb része volt csak hátra! Rá kellett akasztanom az Ardura az ultra szenzort, amit az első részben is magyaráztam és az arról érkező jelet kellett kirakni a kijelzőre.