Volt ma szívás rendesen. Az egész napom elment vele.
Rájöttem, hogy a billentyűzetnek elfelejtettem kijelölni a digitális bemeneteket, de mivel nincs vagy nem is lenne elég szabad port, így marad az első terv kicsit módosítva.
Jobban utánanéztem a dolognak, és bár a legtöbb arduino lapon csak 6db analóg ki/bemenet van, viszont van 2db puszban még korlátozott funkciókkal, ami a pro mini lapon megtalálható. Ezeket csak és kizárólag ADC-ként lehet használni, magyarul feszültségérzékelésre használhatók.
Mivel úgymond egy "greyscale" analóg multiplexben gondolkodtam, tehát az 5x4 gomb nem úgy néz ki, hogy 5+4 digitális bemenet = 9 lefoglalódik, hanem 4 analóg bemenet 5 különböző feszültségszinttel, feszültségosztóval.
Mire találtam egy használható programot ehhez... megvettem a Fritzing-et mert úgy emlékeztem, hogy lehet vele szimulálni, de ha így is van, nem jöttem rá hogyan. Végülis a simulIDE-vel szimuláltam, a KiCAD-del terveztem az áramkört. Milyen áramkört? Arról nemsokára.
Szóval a feszültségosztót meg kellett tervezni, de szempont volt a mA alatti fogyasztás, számomra a polcon lévő alkatrészből lenne a legjobb, mert mindjárt ki is próbálhatom. Van az ATMEL chipekben pullup resistor, szóval akár egy részét az áramkörnek direktbe is lehetne kötni a bemenetekre, de sok olvasgatás után az jött le, hogy ahány chip annyi féle pullup, amiknek az értéke függ a hőmérséklettől, a feszültségtől, a csillagok állásától meg úgy mindentől... na erre nem lehet alapozni. Marad a külső ellenállás. Szóval éptígettem áramköröket, szimulálgattam, próbálgattam rengeteget és arra jutottam, hogy 2 opcióm van:
1. használom az elérhető A0-A3 portokat, ebből ki lehetne hozni a billentyűzetet.
Hátránya az, hogy a kódban végig analóg bemenetként kell őket kezelni, folyamatosan pásztázni kell a feszültségszinteket, de szűrni is kell, stb, stb... hardveresen egyszerűbb, szoftveresen picit bonyolultabb.
2. opció - és ez mellett döntöttem -, hogy az A0-A3 portokat lehet definiálni DIGITAL INPUT-ként, akkor igazából ugyanúgy logikai jelszintet vár a kontroller. Ilyenkor D14-D17 lesz a nevük. Ezt egy fokkal könnyebb leprogramozni, mert ha D14 == HIGH, akkor... valami. Különben más valami. Persze itt is kell szűrés amit majd a megfelelő időben részletezek. Viszont így csak 4 gombunk van igen vagy nem lehetőségekkel. Úgy terveztem az áramkört, hogy a legalacsonyabb feszültségszint is 2,5V felett legyen, így már logikai 1-nek veszi a kontroller és nem fog lebegni a port vagy nem lesz bizonytalan a kapcsolás. Próbáltam kicsit fölé lőni, de a gyakorlati mérések során 2,5V környéke lett meg, így a 27 K ellenállásokat valószínűleg lecserélem majd 33K-ra, így nyerek még ~0.7V-ot. Pont amennyi esik a diódákon. Na igen, ehhez a verzióhoz már az is kellett, mert lesz még egy bemenet. Itt jön képbe az A6. Gombnyomáskor ő fogja megnézni a feszültségszintet, így lényegében ő lesz a multiplexerünk. Szerencsére találtam 4db egyforma diódát itthon de nem volt egyszerű mert van egy marékkal de 4 egyformát alig tudtam előkeresni. Most IN4007 típus van, valószínűleg valami hasonló marad a végleges verzióban is.
Erről van szó:
Elkezdtem összerakni a próbapanelt, de 1-1,5 óra szórakozás után feltűnt, hogy nagyon nem fogok elférni, pedig kettőt összekapcsoltam. Az a baj, hogy a rengeteg kis kábel miatt esélytelen hozzáférni vagy eligazodni rajta később. Ezen a képen látszik nagyából, hogy mi a helyzet, pedig mire eszembe jutott fotózni már nagy részét visszabontottam:
Végül úgy döntöttem, hogy nincs nagyon más lehetőség, ki kell tennem vagy külön panelra vagy NYÁK-ra a gombsort. Bíztam annyira magamban a szimuláció után, hogy ha a fizikai részét nem rontom el készítés során, akkor működnie kell. Eljátszottam vele egy darabig, mert 3x terveztem újra a nyákot, mert mindig eszembe jutott valami közben. Szerencsére volt itthon műnyomó papír, maratósav meg úgy minden ami kellhet hozzá. Pár óra alatt sikerült életre kelteni:
A végleges verzió kisebb lesz meg más lesz a gombkiosztás, lemarad elméletileg 3 gomb, kisebb, SMD alkatrészekkel tervezem majd. A próbára viszont ez jó, stabil, beköthető az áramkörbe könnyedén és ha kell akkor az alkatrészeket is tudom cserélgetni. Most benne vannak a GND felé a 27K ellenállások. Multiméterrel méregettem, minden jónak tűnik csak kicsit karcsúnak találom a 2,5V környékét legalacsonyabb szinten. Ha nem, vagy csak bizonytalanul vált HIGH értékre a bemenet, akkor cserélem 33K-ra őket.
Az pedig, hogy a diódákon mennyi esik, irreleváns csak lehetőleg egyformák legyenek. A mérések alapján 0,03 V-on belül vannak, ami még szerintem elfogadható. Majd meglátjuk mennyi lesz a mozgásterem, de mindenképpen kell hagyni egy kisebb intervallumot majd az értékek olvasásánál a szoftverben is.
Mára ennyi. Majd valamikor folytatom.
A módosított lábkiosztást majd bedobom valamikor csak most nincs már lelki erőm.
UI.
Egyik kommentben írta valaki, hogy fizikai gomb a zseblámpának direktbe kötve -1 szükséges IO port. Az igaz, csak nem akarom, hogy a zseblámpát kikapcsolt állapotban is lehessen kapcsolni, nehogy mélykisülésbe vigye az akkut vagy véletlenül úgy marad aztán nem veszik észre, stb... csinálok is rá szerintem a menüben időzítőt 1,5,10 percet. Ettől függetlenül lehet a telefon oldalán toló kapcsoló. Majd az még eldől, nem találtam még ki, hogy hol és milyen formában legyen a gombja de erős a gyanúm, hogy nyomógomb lesz valahol, amit 1,5mp-ig nyomva tartva bekapcsol a zseblámpa. Majd adja magát