[elektro] Használtok valami free RTOS-t PIC-hez?
Elight
elight at gmail.hu
Fri Mar 30 09:42:53 CEST 2012
Szia,
Megbocsátom .!. :)
Na viccet félretéve..
közben a biztonság kedvéért
megnéztem néhány bill.kezelést én is..
Ez a shifteléses még teljesen ujszerű nekem,
bevallom hasonlót nem láttam az eddigiekben.
Jó ötlet, majd elmélázok rajta..
Az RTos, egyenlőre elhalasztva (örökös időhiányom..)
meg tényleg az ágyura veréb esete.
De nem mondtam le ,
hogy a keykezelést mostmár végleg ,
és döluxe letudjam a pic-re..
Eddig is kezeltem pusbuttonokat és keypadot..
de mindig valami hiányzott, fércelgettem ezt azt..
hol ilyen, holy olyan.. szóval idővel átláthatatlan.
Most az eddigieket egy modulba szeretném összehozni.
Később ha lehet , egy párhuzamos tapipad és
encoder kezeléssel is kiegészítve.
A prellhez pl egy egész jó anyagnak tűnik:
http://www.ganssle.com/debouncing-pt2.htm
és a repeat-hoz is találtam már anyagot,
de azt át kell még írni, mert Atmeles.
Tulajdonképpen egy grafikus, interruptos
menükezelő a cél, mert a Mikroe-s
amit eddig próbálgattam ,
egyenlőre nekem úgy tűnt , eléggé hergya.
Ill nem igazán jöttem rá az ízére.
Üdv István
2012.03.30. 09:03:06 dátumon Moravcsik Szilárd <mszilard at contarex.hu> írta:
> 2012.03.29. 19:17 keltezéssel, Skandar Graun írta:
>> Ezt én assemblyben írnám, egy timer0 IT-vel.
>> Vagy, ha sietek, basic.
>> Egy RTOS erre kissé ágyúval verébre kategória nekem.
>>
>
> Szia!
>
> Nálam a gombok portbemenetei általában a port belső felhúzó ellenállásán
> keresztül vannak a VCC-re kötve. Ehhez kapcsolódik a gomb egyik fele, a
> másik fele pedig a GND-re. Tehát a gomb megnyomva 0-át ad, elengedve
> 1-et.
>
> A gombokat pl. 50 ms-enként kérdezem le (már csak a prel kiküszöbölés
> miatt is), ez egy #define konstans is lehet.
> Minden gomb minimum 2 biten tarolja az állapotát.
> Az állapotot tároló változó RESET után a 11b bin. értékre inicializált
> (azaz mintha a gomb nem lenne megnyomva).
> Minden gomblekérdezéskor beolvasódik a gomb tényleges állapota (ez egy
> bit).
> A gomb aktuális logikai állapotát tároló 2 bites változó tartalma eggyel
> balra shiftelődik. Az alsó bit helyére beíródik a gomb éppen beolvasott
> értéke. Így a gombok kezeléséhez az alábbi állapotokat szoktam használni:
>
> 11 - felengedve, nyugvó állapot (FENN)
> 10 - éppen lenyomva, lefutó él (LE)
> 00 - lenyomott, nyugvó állapot (LENN)
> 01 - éppen felengedve, felfutó él (FEL)
>
> Minden gombhoz tartozik egy előző logikai állapotot is rögzítő változó,
> ami kezdetben szintén 11b-re van inicializálva (FENN).
> Ha az éppen aktualizált és az előző logikai gombállapot nem azonos,
> akkor egy logikai változó HAMIS-ról IGAZ-ra változik. Ezt azután a
> gombot kezelő egyéb magasabb szintű függvényekben kell majd törölni.
>
> Minden állapot aktualizálás után után a gombkezelő megvizsgálja, hogy az
> adott gombhoz kell-e hosszan (pl. > 5s) lenyomott állapotot is figyelni.
> Ha igen, akkor amíg a gomb állapota LENN, minden lekérdezéskor egy
> gombhoz rendelt timer változó előre feltöltött értéke eggyel csökken (ez
> pl. 50ms-es lépésekben történik). Ha ez az érték (pl. 100) eléri a
> nullát, egy szintén a gombhoz rendelt logikai változó HAMIS-ról IGAZ-ra
> vált, jelezve, hogy a gombot már hosszú ideje nyomják. Ha a gombot
> felengedik, akkor a jelző törlődik (itt, a lekérdező, vagy a feldolgozó
> rutinban), a timer ismét felveszi a kezdeti értékét, stb.
>
> Ha a gombismétlés is engedélyezve van, akkor ha a gomb már hosszan
> lenyomott állapotú, egy újabb gombhoz rendelt timerrel lehet kezelni az
> ismétléseket, stb.
>
> CvAVR-ben, ATmega2561-en, ahol van SRAM bőven, pl. ilyen struktúrát
> szoktam használni:
>
> typedef unsigned char BYTE;
> typedef unsigned int WORD;
>
> // Tasztatúra gomb struktúrája:
> typedef struct{
> char enabled; // TRUE, ha gomb kezelés
> mehet
> char prev_state; // Gomb előző állapota
> char act_state; // Gomb aktuális állapota
> char lng; // TRUE, ha gombot hosszan
> megnyom.
> WORD lng_tmr; // Hosszú gombnyomás
> időzítője
> char rep_en; // TRUE, ha repeat mehet
> WORD rep_tmr; // Repeat időzítője
> char changed; // TRUE, ha állapot
> változott
> } BTN_t;
>
> // Tasztatúra gombok struktúra tömbje:
> typedef struct{
> char enabled; // TRUE, ha gombok kezelése
> mehet
> char go; // TRUE, ha gombok
> lekérdezése mehet
> BYTE pol_tmr; // Polling időzítője
> BTN_t btn[ NUM_OF_BTNS ]; // Gombok tömbje
> } BTNS_t;
>
> extern BTNS_t btns; // Taszti gombok (main.c)
> //-----------------------------------------------------------------------------
> // Tasztatúra gombok lekérdezése:
> void scan_btns(void);
>
> Bocs, ha túl hosszú lett. :)
>
> Üdv:
> Szilárd
>
>> Elight<elight at gmail.hu> írta (2012. március 29. 9:32):
>>> Sziasztok,
>>>
>>> valamiféle nyomogombos időzítőhalmazt lenne jó
>>> hamarjában applikálnom.
>>>
>>> Nem tudom pl egy free RTOS bigyó megtanulása
>>> könnyítené e a dolgomat.
>>> Elsőre túl bonyinak találatott.
>>>
>>> Tulajdonképpen arra gondolok,
>>> egy interruptos KEY kezelő
>>> méretre szabása is kielégítő lehetne..
>>>
>>> Olyasmi pl mint ami a dos-os PC-é volt, van ..
>>> Tehát külön kód gomb megnyomásra, és elengedésre,
>>> repeat , állítható attack-al
>>> getkey() ; és input();
>>> Tizes bill szerűnek gondolnám,
>>> de az se baj ha skálázható
>>> lefele. (három - négy gombosra)
>>>
>>> Szóval nem is vagyok nagyigényű
>>> csak ma valahogy inkább 'kissé' lusta? :)
>>>
>>> De gondoltam nem árt előtte körülnézni,
>>> mielőtt még feltalálnám a spanyolvizet,
>>> vagy felesleges körökbe kergetném magam..
>>>
>>> Üdv István
>>>
>>> -----------------------------------------
>>> elektro[-flame|-etc]
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
>
> -----------------------------------------
> elektro[-flame|-etc]
--
Az Opera forradalmian új levelezőjét használva: http://www.opera.com/mail/
More information about the Elektro
mailing list