2024. április 25., csütörtök

Gyorskeresés

Építsünk mobiltelefont - II. rész

Írta: |

[ ÚJ BEJEGYZÉS ]

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 :)

Hozzászólások

(#1) Gdi


Gdi
senior tag

Nice! Alakul ez :)

''Milliárdnyi meggyilkolt csillag sikolya elhal az éj békéjében, és a kétségbeesésnek csak néhány, törékeny, kőbevésett szó áll ellen.''

(#2) sketchifun


sketchifun
senior tag

Ha már feszültségosztó, és bemeneti jelszint érzékelés, akkor miért nem mátrixként épül a gombsor?

Mekkora léptéket képes jelszint gyanánt megkülömböztetni a vezérlő?

Mert akkor az adott sorra beadott jelszint, valamint az adott oszlopra beadott jelszintből szoftveresen könnyedén dekódolható az adott input, lényegesen kevesebb bemenetet felhasználva.

Gyerekek! Az a lényeg, hogy van pénz lóvéra! © Jakab Zoltán

(#3) Adamyno válasza sketchifun (#2) üzenetére


Adamyno
tag

Elméletileg pont ezt fogom csinálni.

10 bites az ADC, így összesen 1024 jelszintet tud megkülönböztetni viszont kell hagyni minimum 10%-ot plusz, mínusz irányban mert az alkatrészek is pontatlanok (bár elvileg 1%-os a tűrésük) és valamennyire hőmérsékletfüggő is a dolog, valamint az alkatrészek minimálisan eltérő értékűek, így ha +-10% ráhagyással dolgozom, akkor elméletileg mehet minden bemenetre ugyanaz a kód.

Jelenleg 0,19V van körülbelül a szintek között, így ha 3.3V a teteje, akkor 2,5V környékén lesz a legalsó szint ami még logikai 1-nek is megfeleltethető. Azért döntöttem a "hibrid" megoldás mellett, mert így elég csak a digitális bemeneteket figyelni és elég jelszintet mérni csak akkor, ha valamelyik input 1. Különben folyamatosan menne 4 ADC, ami szerintem jobban lefogná a CPU-t is és valszeg ezáltal erőforrásigényesebb is. Azért a kódban majd kipróbálom, mert a jelenlegi billentyűzet fizikai kialakítása megengedi, hogy az 5 helyett esetleg csak 4 lábat használjak, de akkor azok full analóg üzemmódban mennek. Így meg most 4 digital + 1 analóg.

- Indítsd újra a gépedet! - Az egészet? - Nem, a felét...

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.