Enterprise Forever

:HUN => Hardver => Topic started by: Z80System on 2018.October.13. 14:11:50

Title: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 14:11:50
Korábban az Arduino -s billentyűzet topikban (https://enterpriseforever.com/hardver/hw-keszites-arduino-val) próbapanelig eljutott PS/2 billtyű kezelési megoldásnak volt pár limitációja.

- A kiválasztott Arduino Micro 16 MHz -es jószág volt, amivel assembly -ben kezelt HW megszakítással
(ha nem következett be egyéb időzítési anomália a mikrokontrollerben) kb. 2.5 µS alatt tudok reagálni egy külső megszakításra GPIO lábról.
Ez a sebesség pedig az EP oldalon a megfelelő bill. mátrix sor beállítására még 4 MHz -es Z80 esetén is lehet sovi, 10 MHz esetén meg többnyire az.

- A cucc csak PS/2 eszközöket tudna kezelni, USB vagy bluetooth jószágokat nem.

- Maga az Arduino Micro egy nem túl nagy breakout board az AVR mikrohoz, de szerelni egy normál ház alá már problémás.

- Végül elég nehezen lenne a dolog konfigurálható, én első körben meg sem oldottam,
a konfigurálás a mikrokontroller programjában, fordítási időben történhetett csak meg.
Ha az ember rádugott egy másik billencset, akkor mehetett linux alá fordítgatni,
majd a binárist az Arduino -ra töltögetni. Ez nem annyira jó ... :)


Szóval kéne egy jobb megoldás, ami mindezeket orvosolja ...


A korábbi topikban már jól körberágtuk az egész témát,
szóval most csak fel kell venni újra a fonalat,
és az ott elhangzottakat alkalmazva,
el kell jutni egy következő megoldásig ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 15:14:24
Namost korábbi tapasztalataimból kiindulva nincsenek különösebb illúzióim, úgyhogy senkinek se legyenek.

Ebben a második nekifutásban sem lesz semmi konvencionális, vagy nagykönyv szerinti megoldás. Barkács lesz.

Mi lenne szerintem a nagykönyv szerinti ?

Ha valaki fogna vélhetően egy mokány kis mikrokontrollert,

meg egy USB és egy Bluetooth vezérlőt (gondolom a PS/2 -höz egyszerűsége miatt nem gyártanak dedikált kontrollereket),
mindezeket a legkisebb form faktorú SMD tokozásokból, meghajtaná, összehangolná ezeket a mikrokontrollerrel,

összeintegrálná őket valami fele, vagy inkább negyede akkora nyákon mint a kisebb fajta (1.0 -ás) EP SD kártya vezérlő,
vagy valami olyan egyéb elosztott módon, hogy a gépházban belülre szerelhető legyen,

és mindezt le is gyártaná ... :)


És akkor a barkács csupán annyi lenne, hogy az embernek ki kell szerelnie egy PS/2 meg egy USB csatlakozót a gép házára valahova,
vagy esetleg ki kelle lógatnia ugyanezeket 2 darab 4 drótos kábelen a házból. (A Bluetooth meg menne ugye drót nélkül is ...)


Mindennek olyan mélységű hw és sw ismeret igénye van, ami nekem még mindíg túl sok a házi feladathoz.

Kompakt megoldásokról pedig nem is tudok, amivel ezt csak simán össze lehetne legózni,
de mégha lennének is már megírt, kipróbált, USB és Bluetooth sw stack -ek valami nagyon modern,
olcsó és kis méretű vasakra,

még akkor is csupán a nyák tervezés, legyárttatás és az SMD szerelés olyan nagyságrendű feladat lenne,
ami talán nem éri meg.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 15:44:17
Szóval az előbiekre megoldásul szolgáló barkács koncepcióm (a régi topik alapján) a következő lenne.

Az EP -be (akár burkolat alá szerelhető méretben, vagy akár csak úgy a csupasz nyákra szerelve)
csupán egy olyan fokozatot rakunk, ami saját belső memória alapján,
nanoszekundomos nagyságrendű idő alatt képes együttműködni az EP jeleivel.


Ez az eszköz lehetne ugye lgb kolléga nagy kedvence, a Dual Port RAM.

Pld. egy ilyen:

https://www.maximintegrated.com/en/products/digital/memory-products/DS1609.html
https://www.maximintegrated.com/en/ds/DS1609.pdf

Már lejárt a szavatossága szerencsétlennek, de azért még be lehetne szerválni occsón (ha nem nézek be valamit):

https://www.ebay.com/itm/1PCS-NEW-DS1609-IC-integrated-chip/123369627060?hash=item1cb9671db4:g:KiUAAOSwXLNbm5O4:rk:1:pf:0


Ez valószínűleg megfelelő sebességgel ki tudná szolgálni az EP -t
(végülis nem néztem utána részletesen, hogy az EP oldali vezérlésének lenne -e valami olyan igénye, amit az EP nem tudna kiszolgálni),
de lenne egy bökkenő.

Ennek a cuccnak a másik oldalról is normális párhuzamos cím és adat drótjai vannak,
ami a mi esetünkben 12 drót, és én annyit akkor már nem akarok kihozni az EP -ből,
ha ennek a "nagysebességű kiszolgáló" fokozatnak egy külön elektronikát szentelek,
elszeparálva a tényleges HID eszköz kezelő részektől.

Szóval ide valami olyan Dual Port RAM kéne, ami EP oldalon a szokásos 4 cím + 8 adat vonalat nyújt olvasásra,
de a másik (input) oldalon egy síma 2 drótos soros interfészt nyújt.


Ez a síma 2 (táppal együtt 4) drótos interfész lenne aztán kivezetve az EP -ből,
és ezen a soros interfészen keresztül lehetne frissíteni ezt a (16 X 8 = 128 bites) billentyűzet mátrix buffert,
melyet az EP belülről saját jogán, függetlenül olvasgatna a párhuzamos interfészen,

kívülről a soros interfészen keresztül pedig ízlés szerinti komplexitású eszköz hajthatná meg.

Pld. egy Raspberry Pi.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 16:03:57
Azért az RPi mert:

- Hozzávetőlegesen olcsó

- Vannak rá szerelve by design, dedikált GPIO kivezetések

- Lehet rá tenni teljes értékű OS -t

- Van rajta USB és Bluetooth

- A HID eszközök olvasására lehet használni a legtriviálisabb magas szintű API -kat,
és így semmilyen ördöngös USB es Bluetooth hw + sw hekkelésbe nem kell belemélyedni

- Az EP -vel, a soros interfészen kommunikáló program csupán egy egyszerű alkalmazás
vagy szervíz lenne az RPi OS -en, így a konfiguráció kezelés triviálisan megoldható lenne,
nem beszélve arról hogy a HID eszkoz oldaláról a konfiguráció igény zéróba tartana,
mert az OS -től már eszköz független, virtuális billentyű infót kaphatnánk

- A PS/2 csatlakozást az ember megoldja a egy PS/2 -> USB konverterrel,
vagy esetleg megvalósít egy PS/2 inputot a GPIO lábakon,
oly módon ahogy azt Arduino -n már megoldottuk

- És még külön fejlesztői eszközök sem kellenek a használatához,
mivel az eszköz maga a saját fejlesztői eszköze is

- Ha az ember nem standard EP tápot használ,
akkor még a tápolása is megoldható az EP alaplapról,
külön tápot nem kell kapjon


Lehetne persze helyette bármi egyebet (a feladathoz sokkal jobban méretezett teljesítményű elektronikákat) is használni,
de szerintem ha valaki képes alacsonyabb szintű elektronikai komponensekből
(mint egy többszáz MHz -es, GPU gyorsított, fullHD fullblown számítógép :))
USB és Bluetooth támogatást implementálni a PS/2 mellé,
akkor annak már nem ilyen elosztott, hanem belülre szerelt cucc irányába kellene gondolkodjon.


Ide kívülre, a barkács keretrendszerben gondolkodva, valami ilyen RPi szerű dolog ideálisnak tűnik ...


A végeredmény az lenne, hogy a bill mátrix felülírása tökéletes sebességgel menne,
az EP -ből csak 4 drótot kell kivezetni,
amin egy viszonylag kis kocka lógna,
melyre tetszőleges modern HID eszközt kapcsolhatnánk,
beleértve a Bluetooth -t is.

Az RPi -hez lehet kapni sokfajta,
szépen kivitelezett dobozokat.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 16:36:54
Szóval a számomra legnehezebb feladat akkor az maradt,
hogy elkészüljön az a fokozat, ami a soros interfészt nyújtja kifele az EP -ből.

És ez akkor nem tud lenni egy sima Dual Port RAM, mivel azoknak vagy 2 soros, vagy 2 normal párhuzamos interfészük van.
Illetve ez még nem biztos, próbálok keresni olyat ami ide kéne, egyenlőre nem nagy sikerrel.

A soros interfész még esetleg lehetne kicsit bonyolultabb is, mert az RPi -nek lenne azért lóereje a kiszolgálásához.

Az ideális persze az a faék egyszerűség volna,
hogy ha csattintok egyet a clock dróton, akkor beír egy bitet a data drótról,
és arrébbugrik a következő bitre. Aztán 128 csattintás után visszaugrik az első bitre.

Ezt sima GPIO -n keresztül táplálnánk egy szálról az RPi -ből, és kalapkabát.


De most egyenlőre úgy tűnik, hogy simán lehet a helyzet az,
hogy mivel nem akarok ennek a fokozatnak se (ahogy soha semminek :))
nyákot terveztetni, meg több alkatrészből hekkelni össze,

ezért a lehető legkomplexebb megoldáshoz fogok jutni:

CPLD -t vagy FPGA -t programozva kell előállítanom ezt a fokozatot.


Ami legrosszabb azért, mert ezekhez a fránya alkatrészekhez
nem igazán nagy a választék kis méretű breakout board -okból.

Ami meg jó méretű lenne, az nem 5V toleráns.
Malacozni illesztőket nem annyira tetszene.

Arról nem is beszélve, hogy nem 5 perc lenne mire összeraknám a fentiekben tárgyalt működésű fokozatnak
megfelelő logikát, mivel ilyen programozható logikai áramköröket eddig még nem programoztam.


Szóval jön a jól megszokott keringő ... így ezért nem lehet, úgy meg azért ... semmi nem egyszerű ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.13. 23:01:29
Wow, mittaláltam ! (Legalábbis remélem ... :))


Ezt nevezném nekem való kis breakout -nak:

https://coratronics.com/cpld-core-minimum-system-development-board-with-jtag-interface-led-2mm-pin-epm30323064atc44-3-3v-50mhz


Van egy ilyen kicsit nagyobb is, de nekem nem kell annyi kivezetés sem, meg az USB se, szóval a kicsi sokkal jobb:

https://coratronics.com/3-3v-50mhz-cpld-minimum-system-development-board-core-board-module-jtagusbledldo-max3000-epm3064


Es ennek az ALTERA MAX 3000A családnak 5V toleránsak a kivezetései:

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ds/m3000a.pdf


Következő kérdés mondjuk az lenne, hogy ami nekem kell, az vajon belefér -e egy ilyen 32 vagy 64 makrocellás CPLD -be ?

Szóval az lenne a kérdés, hogy ezt tudja -e valaki ?


Kellene nekem minimum 80 de maximum 128 bitnyi "memória" egy ilyen alkatrészben,
amit egy soros interfészen írni tudok,
egy 8 bit adat + 4 bit cím interfészen meg olvasni.


Vajon ez a logika mennyi makrocellába férne bele ?

10 - 100 - 1000 makrocella ?

Mennyi lehet kb. nagyságrendileg ?

(32 makrocellára 600 felhasználható kaput írnak, 64 makrocellára 1250 kaput.)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.14. 01:05:44
Huh, nekem ez az előző blog (https://enterpriseforever.com/hardver/hw-keszites-arduino-val) :) mintha kimaradt volna... Észrevétel: nem bonyolítod te ezt egy kicsit túl? :ds_icon_cheesygrin:

Következő kérdés mondjuk az lenne, hogy ami nekem kell, az vajon belefér -e egy ilyen 32 vagy 64 makrocellás CPLD -be ?

Ha a terv az, hogy a billentyűzet felől jövő 4 sorkiválasztó jelet bekötöd ebbe, ez meg kifele majd generálja a 8 bitet, akkor számoljunk:

Ha az eredeti 10 sort implementálnád csak, ahhoz 10×8=80 bitnyi tároló kellene. Ha a lehetséges 16 sort mind ki akarod használni, akkor 16×8=128 bit kell. Ez elvan a CPLD-n belül, ahhoz hogy ki is jöjjön belőle, kell még 8 láb. A MAX3000 belső felépítése - ha jól fejtem a doksit - olyan, hogy a kimenetek keresztüljönnek egy-egy makrocellán (nyilván). Illetve egy makrocellában 1 db. tároló van, azaz 1 bit. Kellene 88 ill. 136 makrocella csak ehhez, a beírás megvalósítása ehhez még nincs is hozzászámolva. A 10 soros verzióhoz is az EPM3128 kellene, a nagyobbhoz az EPM3256, legalábbis ami a bittárolási képességet illeti.

Kellene nekem minimum 80 de maximum 128 bitnyi "memória" egy ilyen alkatrészben,
amit egy soros interfészen írni tudok,
egy 8 bit adat + 4 bit cím interfészen meg olvasni.

Vajon ez a logika mennyi makrocellába férne bele ?
10 - 100 - 1000 makrocella ?
Mennyi lehet kb. nagyságrendileg ?

A soros interfészhez kell legalább annyi bit, amennyibe a "mátrix" bitjeinek a címét, meg a beírandó adatot el lehet tárolni, az is mondjuk 12 plusz még pár.

(32 makrocellára 600 felhasználható kaput írnak, 64 makrocellára 1250 kaput.)

Ezt a kapuszámot azért írják, mert szép nagy szám. :-D Szokásos marketing, nem ebből szokott az ember kifutni tervezéskor. Hanem mondjuk a (z itt) LAB-nak nevezett blokkok bemeneteiből.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 01:28:24

Quote
uh, nekem ez az előző blog :) mintha kimaradt volna...

Hát már jó régen volt, de akkor pörgött rajta a nép jó sokat, mire összerakta nekem ... :)

Quote
Észrevétel: nem bonyolítod te ezt egy kicsit túl? :ds_icon_cheesygrin:

Márhogy melyik részét ?
Hogy lehet EP -re PS/2, USB, Bluetooth billentyűket kapcsolni egyszerűbben úgy,
hogy a cucc a gyári EP házban elférjen, és az EP -ből max. 4 drótot kelljen kihúzni (ha nem az egész cucc van belül) ?

Quote
Ha a terv az, hogy a billentyűzet felől jövő 4 sorkiválasztó jelet bekötöd ebbe, ez meg kifele majd generálja a 8 bitet,

Igen, ez lenne a terv. Max. még lehet hogy bele kell kombinálni a címzésnél a 4 sorkiválasztó drót mellé azt az 5. trigger drótot a lefutó éllel ...

Quote
A 10 soros verzióhoz is az EPM3128 kellene, a nagyobbhoz az EPM3256, legalábbis ami a bittárolási képességet illeti.

Basszus ... azokat nem fogom megtalálni ilyen kis breakout -ra kiszerelve ...

Lehet tényleg inkább az FPGA -k között kéne keresgéljek, ott a "kis kapacitású" is sokkal nagyobb mint itt a CPLD -knél a "nagy kapacitású" ...


Mondom én ... a jó öreg "ezt azér nem lehet, azt meg azért nem lehet" körök ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 02:30:06
Pedig magát a CPLD -t a 256 -osat meg 512 -eset is meg lehetne kapni elérhető áron:

https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=EPM3256&_sacat=0

https://www.ebay.com/sch/i.html?_odkw=EPM3256&_osacat=0&_from=R40&_trksid=m570.l1313&_nkw=EPM3512&_sacat=0


Csak egy ilyenhez nem lehet forrasztani ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.October.14. 10:24:45
Szerintem is túlkombinálod egy kicsit a dolgot. Nekem is egyszerűbbnek tűnik a 4-ről 10-re dekódolás után átvenni a fonalat és nem bonyolítani még azzal is az életedet.

Nem mondom hogy ne próbálkozz vele, de lehet érdemes lenne kezdésként kikerülni a CPLD-t is. Azért az elsőre nem teljesen triviális, ha nincs hardveres tapasztalatod.

Az FPGA-val meg az a prücök, hogy ahhoz meg szükséged lesz valami reset/programozó áramkörre, és programozó Flashre/ROM-ra, ami szintén helyigényes, így hát azzal sem igen jársz jobban. Szerintem.

Inkább érdemes lenne átgondolni, hogy nem lehetséges-e mégis AVR-rel összehozni. Egyrészt, ezeken van integrálva minden szépség, beleértve a RAM-ot, ROM-ot és UART-ot. Másrészt - ezt majd balagesz pontosítja - elég jól túlhajthatóak. Emlékeim szerint a SwinSID egy 16 MHz-es jószágon lett megvalósítva kétszeres órajel mellett. Harmadrészt azért még egy 10 MHz-en hajtott Z80 sem tud mikroszekundumonként billentyűt olvasni, arról nem is szólva, hogy értelme sincs. Önmagában egy IN (remélem port olvasással működik ez is :oops:) több mint 10 ciklus, és ekkor még semmit sem csináltál a kiolvasott adattal, márpedig legalább tárolni kellene későbbi feldolgozásra. Azt nem mondom, hogy elegáns lesz majd a kód amivel hajtanod kell a dolgot, de ezt szoftveres ésszel még viszonylag könnyű követni.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 11:13:01
Quote
Nekem is egyszerűbbnek tűnik a 4-ről 10-re dekódolás után átvenni a fonalat és nem bonyolítani még azzal is az életedet.

Ezt a gondolatot egyáltalán nem értem ...

Quote
Nem mondom hogy ne próbálkozz vele, de lehet érdemes lenne kezdésként kikerülni a CPLD-t is. Azért az elsőre nem teljesen triviális, ha nincs hardveres tapasztalatod.

Hát ezért akartam keresni diszkrét alkatrészt, de nem találok ... összerakni sem akarok IC -ből ... sőt ha csak 1etlen módot találok rá, nyákot sem akarok tervezni, gyártatni, forrasztani ...

Quote
Az FPGA-val meg az a prücök, hogy ahhoz meg szükséged lesz valami reset/programozó áramkörre, és programozó Flashre/ROM-ra, ami szintén helyigényes, így hát azzal sem igen jársz jobban.

Hát én is ezt olvastam az FPGA -ról mindenhol, de aztán mikor elkezdtem FPGA breakout board -okat keresni,
és olvasgatni a parametereket, meg a rájuk szerelt FPGA data sheet -eket,
észrevettem, hogy bár maga az FPGA technológiája továbbra is maradt volatile,
de ezekbe a modern FPGA -kba már beletesznek memóriákat, ami mégis eltárolja a logikát,
és az FPGA újratöltésre kerül ebből a beépített tárból.
Szóval egy nagyon kis töltési időtől meg a technológiából adódó nagyobb fogyasztástól eltekintve
ezek a mai FPGA -k már olyanok mintha nagy CPLD -k lennének.

Mindenhol hangsúlyozzák, hogy végeredményben ezek már nem volatile működésű FPGA -k.

(Persze csak ha jól értem ...)

Quote
Harmadrészt azért még egy 10 MHz-en hajtott Z80 sem tud mikroszekundumonként billentyűt olvasni,

Korábbi topikokban megállapítottuk(ták), hogy ha kitolsz Z80 -on egymás után egy OUT és IN utasítást, akkor a kettő között (4 MHz Z80 esetén) kb. 3 mikroszekundum lehet,
mire a bill. sornak a helyen kell lennie. Persze ha a kód nem közvetlenül olvas az OUT után, akármennyi is lehet, de működnie kell nyilván minden körülmények között.

10 MHz Z80 -nál meg annak a felénél is kevesebb ...

Valamint egy mikrón USB és Bluetooth billentyűzet, egér, jatékvezérlő (és franctudja mit találok még ki) támogatásokat lekódolni ...

Ezek nem mennek maguktol tudtommal ... mindkettőnél miután az ember megküzdött a hardveres problémákkal, kezdheti a 666 layer -es protokolljaik implementálását, mire eljut a HID szintig ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 12:21:35
Quote
A 10 soros verzióhoz is az EPM3128 kellene, a nagyobbhoz az EPM3256, legalábbis ami a bittárolási képességet illeti.

Egyébként most mérges is vagyok ... :)

Ha ilyen pár bit sem fér bele, akkor minek az a rengeteg láb a tokozáson, meg mi végre ez a nagy hűhó ?

A neve az, hogy CPLD. Ami a "Complex programmable logic device" rövidítése.

Mondom COMPLEX !!!

Hát kérdem én, mi ezen a complex akkor ? Attól complex, hogy tudnak írni egy 666 oldalas .pdf -et róla ?

Nem fér bele szaros 128 bit meg némi éskapu ? Hát 2-4 éskapuból már biteket szoktak csinálni ...

És aztán beleteszik egy 666 lábas tokozásba, akkora lábakkal mint a hangyafasza, ha egyáltalán tesznek rá lábat ... na grattula.


Szerintem ez akkor inkább az FFPLD névre hallgathana (Faking faék programmable logic device). :)


(Na, hát ehhez tartsák magukat a kedves CPLD gyártók ...)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 13:25:03
Jó kis tutorial site -nak tűnik:

http://www.pyroelectro.com

Van nekik mikrokontrolleres is:

http://www.pyroelectro.com/edu/microcontrollers



De ami itt most érdekelhet minket (már aki nincs ott a toppon PLD -kből):

http://www.pyroelectro.com/edu/fpga



Sőt, lehet hogy ez is hasznos lehet majd, mikor már tervezni kell a PLD -be:

http://www.pyroelectro.com/edu/digital

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.October.14. 14:36:11
Ezt a gondolatot egyáltalán nem értem ...
Valószínűleg én értettem félre a mondandódat és/vagy az EP billentyűmátrix kezelését.

... de ezekbe a modern FPGA -kba már beletesznek memóriákat, ami mégis eltárolja a logikát,
és az FPGA újratöltésre kerül ebből a beépített tárból. ...
Ja, hogy FPGA-mikrovezérlő hibridet akarsz! Az tényleg más, és a beágyazott processzor fel tudja programozni a memóriájából az FPGA-t, bár azoknak sem jobbak a kivezetéseik. Manapság már kezd kifutni minden ami nem BGA vagy CSP, akármiFP tokozással is egyre kevesebb dolog van.

Korábbi topikokban megállapítottuk(ták), hogy ha kitolsz Z80 -on egymás után egy OUT és IN utasítást, akkor a kettő között (4 MHz Z80 esetén) kb. 3 mikroszekundum lehet,
mire a bill. sornak a helyen kell lennie. Persze ha a kód nem közvetlenül olvas az OUT után, akármennyi is lehet, de működnie kell nyilván minden körülmények között.

10 MHz Z80 -nál meg annak a felénél is kevesebb ...
Valóban, de nem kell ezt folytonosan tudnia. Elég - bár nyilván az sem egyszerű - reakcióként tudni teljesíteni ezt az időt az olvasási kérelemre.

Valamint egy mikrón USB és Bluetooth billentyűzet, egér, jatékvezérlő (és franctudja mit találok még ki) támogatásokat lekódolni ...
Azt még nem mondtad, hogy ebben hogyan is segítene az FPGA, még ha hibrid is. És azt sem, hogy miért kellene ezt mindet a billentyűzetbe vagy annak helyére kötni. Vagy megint benéztem valamit.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.October.14. 14:45:02
... A neve az, hogy CPLD. Ami a "Complex programmable logic device" rövidítése.

Mondom COMPLEX !!! ...
Igen, pontosan van elnevezve. Ugyan is ezek kb. sima PLD-kből (GAL, PAL, akármi), valamiféle kapcsolómátrixból és esetleg néhány egyéb kiegészítő áramkörből vannak felépítve. Szóval ezek PLD-k, amik komplexek. Amikor ezeket először sikerült megkonstruálni és sorozatgyártani valamikor az 1970-es évek végén vagy a '80-asok elején, hidd el ennek a szintű összetettségnek is nagyon lehetett örülni.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 15:44:09
Quote
Ja, hogy FPGA-mikrovezérlő hibridet akarsz!

Hát, úgy első blikkre nekem úgy tűnt, hogy azokat hívják manapság FPGA -nak.

És itt most nem a PSOC -okra gondolok,
https://en.wikipedia.org/wiki/Programmable_system-on-chip

amik inkább mikrokontrollerek már mint PLD -k (PLD itt logikai értelemben akar állni),
de van PLD funkciójuk is, ami mondjuk nagyon jól jöhetett volna, ha tudom hogy létezik ilyen,
az első körben, mikor még mikrokontrollerrel csináltam sima PS/2 inputot.

Hanem olyan IC -kre, amiket nemes egyszerűséggel FPGA -nak hívnak, és korábbi tulajdonságokkal rendelkeznek.

Például:

https://tinyfpga.com

MachXO2 az non volatile:
https://www.latticesemi.com/Products/FPGAandCPLD/MachXO2#_3D24D0EEB97F430890D7AF24D20DF79A

iCE40™ LP/HX az is non volatile:
https://www.digikey.hu/product-detail/en/lattice-semiconductor-corporation/ICE40LP8K-CM81/220-1858-ND/3877704

stb ...


Quote
Azt még nem mondtad, hogy ebben hogyan is segítene az FPGA, még ha hibrid is. És azt sem, hogy miért kellene ezt mindet a billentyűzetbe vagy annak helyére kötni. Vagy megint benéztem valamit.

Jajj ... :) Remélem lesznek akik megértik ezt a koncepciót ... :)

Az FPGA nem segít ezeken.

A koncepcióm röviden a következő.

- Pici és olcsó mikrokontrollerrel nehézkes az EP igényeinek megfelelő sebességgel reagálni az EP IN/OUT jeleire.

- Pici és olcsó mikrokontrollerrel (sőt még drágával és naggyal is) marha nehéz (nagyon hosszas fejlesztés) USB és Bluetooth HID eszközöket kezelni.
PS/2 még okés, de a masik kettő az 666 nagyságrenddel nehezebb probléma (én úgy látom, szóljon aki szerint könnyű, akkor inkább arra megyek, nem barkácsolok).

- Vagyis inkább az EP -be belülre csak egy olyan fokozatot teszek, ami tökéletes sebességgel tud reagálni az EP IN/OUT jeleire,
egy 80-128 bitnyi bufferből, ami lefedi az EP billentyűzet mátrixot (és esetleg később még pár dolgot, mint pld. a reset, stb.)
és a lehető legkevesebb számú dróttal/pinnel/csatlakozóval lehet kihozni az EP -ből, egy soros interfészen.

- A mindenféle HID eszközök kezelése innentől opcionális, csinálhatod az EP -n kívülről olyan komplexitású hardverrel,
amivel csak akarod, es ki tudod vele szolgálni az előző pontban megnevezett soros interfészt.

- Ez a komplex hardver pld. lehet egy Raspberry Pi, ahol API -kat használva olvashatsz HID eszközöket, és GPIO -n pumpálhatod az EP -be a soros interfészen.


Mindezekhez azonban kell egy fokozat, hardver, az EP -be, ami 80-128 bitnyi infót bufferel,
soros interfészen engedi azt írni kívülről, és 4 cím + 8 adat párhuzamos interfészen engedi az EP -nek azt olvasni belülről.

De mi lehet ez a hardver ? Nem találtam ilyen diszkrét alkatrészt sajna eddig.

Itt jönnek a képbe a PLD -k. CPLD, FPGA, akármi, csak tudjam vele megcsinálni a fenti fokozatot.


Díl ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 16:26:50

Quote
Illetve egy makrocellában 1 db. tároló van, azaz 1 bit.

Ezt egyébként honnan vagy miből lehet látni ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 16:41:47
Quote
A 10 soros verzióhoz is az EPM3128 kellene, a nagyobbhoz az EPM3256, legalábbis ami a bittárolási képességet illeti.

A tutorial -okból úgy látom, hogy cégenként vannak ingyenes fejlesztőszoftverek ezekre a PLD -kre,
és azoknak beállítható egy konkrét PLD típus, amire a szoftverek fordítanak, validálnak.

Vagyis ha lenne egy konkrét logikai hálózatom tetszőleges formátumban (verilog, vhdl, schematic, akármi),
akkor elkezdhetném azt a különböző szoftverekkel fordítgatni a különböző PLD típusokra,
és így biztosat tudhatnék arról, hogy melyik típusba fér bele, melyikbe nem.

Szóval a következő lépés ezen "nyelvek" valamelyikén megfogalmazni a vágyott logikát.

Azt majd meglátjuk mennyi idő alatt jutok el odáig, hogy én azt meg tudjam csinálni,
de van egy ismerős aki azt állította, hogy ő azt seperc alatt összedobja. Meglássuk.

Addig is, ha valaki szintén úgy gondolja, hogy az neki seperc,
akkor nem tartanám vissza attól, hogy megfogalmazza ezt a hardvert ... :)

(80 bitnyi tároló, írni 2 drótos soros interfészen, olvasni 4 cím + 8 adat párhuzamos interfészen.)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 17:33:52
VHDL gyorstalpalók:


https://www.nandland.com/vhdl/tutorials/tutorial-introduction-to-vhdl-for-beginners.html

http://gmvhdl.com/VHDL.html

https://www.seas.upenn.edu/~ese171/vhdl/vhdl_primer.html

https://www.seas.upenn.edu/~ese171/vhdl/ESE170_Lec17_VHDL.pdf

http://www.srmuniv.ac.in/ramapuram/sites/ramapuram/files/EC308.pdf

http://users.itk.ppke.hu/~horan/fpga/pa-vhdl-tute.pdf



VHDL példák:


http://esd.cs.ucr.edu/labs/tutorial/

https://www.intel.com/content/altera-www/global/en_us/index/support/support-resources/design-examples/design-software/vhdl.html



VHDL bőlé:


https://edg.uchicago.edu/~tang/VHDLref.pdf

http://valhalla.altium.com/Learning-Guides/TR0114%20VHDL%20Language%20Reference.pdf


Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 17:55:01

Nézegetve pld. az Intel single port ram példáját,

hacsak nem az a helyzet, hogy az importált könyvtárakban lesz a lényeg,
és esetleg azok a könyvtárak változnak fejlesztőeszközről fejlesztőeszközre,

akkor valóban elég gyorsan mehet a munka ebben a VHDL -ben,
mert ez a ram péda csak ennyi:


Code: [Select]

library ieee;
use ieee.std_logic_1164.all;

entity single_port_ram is
port
(
data : in std_logic_vector(7 downto 0);
addr : in natural range 0 to 63;
we : in std_logic := '1';
clk : in std_logic;
q : out std_logic_vector(7 downto 0)
);

end entity;

architecture rtl of single_port_ram is

-- Build a 2-D array type for the RAM
subtype word_t is std_logic_vector(7 downto 0);
type memory_t is array(63 downto 0) of word_t;

-- Declare the RAM signal.
signal ram : memory_t;

-- Register to hold the address
signal addr_reg : natural range 0 to 63;

begin

process(clk)
begin
if(rising_edge(clk)) then
if(we = '1') then
ram(addr) <= data;
end if;

-- Register the address for reading
addr_reg <= addr;
end if;

end process;

q <= ram(addr_reg);

end rtl;


Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 18:16:19

Ilyet találtam ennél a MAX 3000A CPLD családnál:

Quote
MAX 3000A devices use CMOS EEPROM cells to implement logic
functions. The user–configurable MAX 3000A architecture accommodates
a variety of independent combinatorial and sequential logic functions.

The devices can be reprogrammed for quick and efficient iterations
during design development and debugging cycles, and can be
programmed and erased up to 100 times.


Namost ez mi a rák ? Max 100X írhatom csak bele a logikát ? Az nagyon sovinak tűnik nekem ... :(

Ha már kész a funkció, akkor ok, de amíg fejleszti az ember ... ez sovi ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 19:41:40
Van egy újabb aprócska kis bökkenő ezzel a megakoncepcióval ... :)


Ha az RPi -t az EP -ről tápolom, akkor az EP kikapcsolásnál az OS nem lesz boldog az RPi -n ... :)

Valamint egy EP kikapcs után az RPi olyan 30 másodperces nagyságrendig boot -ol, és addig nem lenne billentyűzet ... :)


Persze mondhatjuk, hogy akkor adunk külön tápot az RPi -nek, de akkor meg megborul a szinkron a soros kommunikációnál.


Szóval mondjuk azt a zsinórt, amin az EP tápolta volna az RPi -t, azt nem tápoltatásra kell használni,
hanem mondjuk arra, hogy jelezzük az RPi felé, hogy egy újraindulás történt, és ezért az első bittől kezdje inkább újra a kommunikációt ...


Semmi se 1cerű ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 21:50:00

Oksa, újabb orbitális benézés ... :)

Az RPi szintén nem 5V toleráns.

Mondjuk bemenetként nem is nagyon kellene használni a GPIO -kat,

az RPi csak "írná" a soros interfészt,

de az simán lehet, hogy ilyen "felhúzott" típusú input lábat kellene lehúzogasson ... és akkor az 5V -ra lenne felhúzva az EP oldalon nyilván ...


Szóval ezt az egész jel illesztgetést úgy látszik nem lehet elkerülni ...


Persze még mindíg egyszerűbb lehet az RPi oldalán illeszteni 2 vagy 3 drótot,
mint a billentyű mátrix buffer fokozat EP felőli oldalán 12 -t ...

Persze valójában ott is lehet hogy csak a 4 cím vonalat kéne visszafogni 3.3V -ra,
mert a 8 data vonal meghajtaná az EP TTL -t ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 21:58:34
Ha az előbbi viszont igaz, akkor nem kéne annyira ragaszkodjak az 5V toleráns komponensekhez,
és szabaddá válhatna az út a 3.3V -os FPGA -k felé, mint pld. ez:

https://store.tinyfpga.com/products/tinyfpga-a1


Tehát az RPi GPIO 3.3V -on, illesztés nélkül kommunikálna egy 3.3V -os CPLD/FPGA -val,
a CPLD/FPGA pedig 3.3V -al adná az adatvezetékeket az EP -nek (ahol ez már jó lenne TTL magasnak),

csak az EP 4 cím vezetékét kéne illeszteni (visszavenni 3.3V -ra) a CPLD/FPGA -hoz ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.14. 22:25:46
Ejj, mennyi olvasnivaló... :) De sorban.

Igen, ez lenne a terv. Max. még lehet hogy bele kell kombinálni a címzésnél a 4 sorkiválasztó drót mellé azt az 5. trigger drótot a lefutó éllel ...

A trigger ehhez "by design" nem kell, ha csak nem akarod magát a 4 bitet is saját magad tárolni a gépben levő U25/74LS273 helyett.

Lehet tényleg inkább az FPGA -k között kéne keresgéljek, ott a "kis kapacitású" is sokkal nagyobb mint itt a CPLD -knél a "nagy kapacitású" ...

Valóban, de ezt egy kissé "ágyúval verébre" megoldásnak érzem, ráadásul a jelszintekkel ott is bajban leszel. (Ha csak nem valami obsolote FPGA-t választasz.)

Inkább érdemes lenne átgondolni, hogy nem lehetséges-e mégis AVR-rel összehozni.

Én is inkább ezt tippelném, ez a legegyszerűbb (-nek hangzó) verzió. Egy hasonlót csináltam én is, akartam is róla írni, majd előszedem a témát.

Másrészt - ezt majd balagesz pontosítja - elég jól túlhajthatóak. Emlékeim szerint a SwinSID egy 16 MHz-es jószágon lett megvalósítva kétszeres órajel mellett.

Pontosítok: a SwinSID-ben egy 20 MHz-es AVR (ATmega88) van, és az megy 32 MHz-en, ez "csak" 1.6×-os túlhajtás. :-D

Harmadrészt azért még egy 10 MHz-en hajtott Z80 sem tud mikroszekundumonként billentyűt olvasni, arról nem is szólva, hogy értelme sincs.

Ez így van, Az OUT utasítás utántól az IN végéig van idő, ezt célszerű kiszámolni, hogy mennyi. Annyi alatt kell odaérni.

Hát ezért akartam keresni diszkrét alkatrészt, de nem találok ... összerakni sem akarok IC -ből ... sőt ha csak 1etlen módot találok rá, nyákot sem akarok tervezni, gyártatni, forrasztani ...

Ez így azért nehéz lesz ám! ;) Eléggé speciális a feladat, erre kész eszköz nem nagyon lesz.

Hacsak... Jut eszembe! Itt van az alkatrészed! (https://www.microsemi.com/document-portal/doc_view/127035-mt8812-datasheet-sept11). Kérdés, hogy beszerezhető-e? Mondjuk ehhez is kell némi körítés, de a lényeget megoldja. :-D

Korábbi topikokban megállapítottuk(ták), hogy ha kitolsz Z80 -on egymás után egy OUT és IN utasítást, akkor a kettő között (4 MHz Z80 esetén) kb. 3 mikroszekundum lehet,
mire a bill. sornak a helyen kell lennie. Persze ha a kód nem közvetlenül olvas az OUT után, akármennyi is lehet, de működnie kell nyilván minden körülmények között.

Na, itt is van az idő. Ha a 3 µSec az mondjuk csak 1, az akkor is 1000 nSec. Egy 20MHz-es mikrovezérlőnek az 20 órajelciklus, de egy 50 MHz-esnek már 50! Azzal azért elég sok helyre oda lehet érni.

Valamint egy mikrón USB és Bluetooth billentyűzet, egér, jatékvezérlő (és franctudja mit találok még ki) támogatásokat lekódolni ...

Az szép feladat, igaz.

Ha ilyen pár bit sem fér bele, akkor minek az a rengeteg láb a tokozáson, meg mi végre ez a nagy hűhó ?

A rengeteg láb mondjuk rengeteg bemenetnek jó ám! ;)

A neve az, hogy CPLD. Ami a "Complex programmable logic device" rövidítése.
Mondom COMPLEX !!!
Hát kérdem én, mi ezen a complex akkor ? Attól complex, hogy tudnak írni egy 666 oldalas .pdf -et róla ?

Nem, ez attól CPLD, hogy több SPLD (Simplex :-D Programmable Logic Device) blokk van benne, legalábbis nagy vonalakban.

- Pici és olcsó mikrokontrollerrel nehézkes az EP igényeinek megfelelő sebességgel reagálni az EP IN/OUT jeleire.

Szerintem pici és olcsó mikrokontrollerrel lehet ilyet csinálni, csak azzal megint az lesz a gond, hogy nem akarod majd se programozni, sőt: beforrasztani se. :-D Sajnos ezek az "új-hullámos" cuccok fura tokozásban vannak.

- Pici és olcsó mikrokontrollerrel (sőt még drágával és naggyal is) marha nehéz (nagyon hosszas fejlesztés) USB és Bluetooth HID eszközöket kezelni.

Ez viszont igaz.

- Vagyis inkább az EP -be belülre csak egy olyan fokozatot teszek, ami tökéletes sebességgel tud reagálni az EP IN/OUT jeleire,
egy 80-128 bitnyi bufferből, ami lefedi az EP billentyűzet mátrixot (és esetleg később még pár dolgot, mint pld. a reset, stb.)
és a lehető legkevesebb számú dróttal/pinnel/csatlakozóval lehet kihozni az EP -ből, egy soros interfészen.

Ez világos.

- A mindenféle HID eszközök kezelése innentől opcionális, csinálhatod az EP -n kívülről olyan komplexitású hardverrel,
amivel csak akarod, es ki tudod vele szolgálni az előző pontban megnevezett soros interfészt.
- Ez a komplex hardver pld. lehet egy Raspberry Pi, ahol API -kat használva olvashatsz HID eszközöket, és GPIO -n pumpálhatod az EP -be a soros interfészen.

Azért az nem semmi, hogy egy 8 bites gép billentyűzetét kiváltandó egy komplett, GHz-es sebességű számítógép lesz használva. :) Ekkor minek egyáltalán az eredeti gép? Az árpin futhatna egy EP emulátor, aztán kész is vagy. :-D

Mindezekhez azonban kell egy fokozat, hardver, az EP -be, ami 80-128 bitnyi infót bufferel,
soros interfészen engedi azt írni kívülről, és 4 cím + 8 adat párhuzamos interfészen engedi az EP -nek azt olvasni belülről.

De mi lehet ez a hardver ? Nem találtam ilyen diszkrét alkatrészt sajna eddig.

Itt jönnek a képbe a PLD -k. CPLD, FPGA, akármi, csak tudjam vele megcsinálni a fenti fokozatot.

A fent linkelt MT8812 ennek a jelentős részét megcsinálja. Ahhoz, hogy kevés jellel, "sorosan" tudj bele adatot tolni, kelleni fog mellé legalább egy shift-regiszter.

Makrocellába 1 tároló:

Ezt egyébként honnan vagy miből lehet látni ?

Az általad is linkelt doksi (https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ds/m3000a.pdf) 6. oldalán a Figure 2. pont erről szól.

Namost ez mi a rák ? Max 100X írhatom csak bele a logikát ? Az nagyon sovinak tűnik nekem ... :(

Itt inkább ilyen 1000 szokott lenni, de legalább nem hazudnak. :-D
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 23:19:50
Quote
A trigger ehhez "by design" nem kell

Hurra-hurra. Annál jobb.


Quote
ha csak nem akarod magát a 4 bitet is saját magad tárolni a gépben levő U25/74LS273 helyett.

Dehogy akarom. Minek az nekem. Csak legegyszerűbben. Szolgálja ki az EP -t annyi a lényeg.


Quote
Valóban, de ezt egy kissé "ágyúval verébre" megoldásnak érzem,

Hát ez már akkor is az volt, mikor 16 MHz -es 32 bites mikrót használtam PS/2 illesztéshez ... :) (Oszt mégse elég gyors ugye ...)

A CPLD/FPGA kérdés meg az én oldalamról nézve ugyanaz.
Venni akarok egy lehető legkisebb méretű (ilyen 30 mm X 20 mm, linkeltem már őket) breakout board -ot egy valami programozható logikai elemmel.
Amire lehetőleg nem is akarok malacozni már semmit. Azzal akarom megoldani ezt a fokozatot.

A logika, ami benne lesz, az ugyanaz, akármi is az a programozható alkatrész.

Nem mindegy akkor nekem, hogy azt az elemet a lapon, amit nem is én tettem oda, ugy hívják hogy CPLD vagy FPGA ?


Quote
Egy 20MHz-es mikrovezérlőnek az 20 órajelciklus, de egy 50 MHz-esnek már 50! Azzal azért elég sok helyre oda lehet érni.

Még az 50 Mhz -nél se olyan triviális, hogy mire kiváltódik az a megszak, mindenféle mechanizmusokon keresztül,
meg le push -olja azt a 2 regisztert, amit muszály, és kiírja végre a billentyűzet sor bájtját, addig nem csúszik ki az 1 mikroszekundumból.
Assembly megszakításkezelőre gondolok. Márpedig nincs több mint 1 mikroszekundum.
És az nem segít semmit, hogy ezt relatíve csak ritkán kell csinálnia, és nem visz CPU időt.
Amikor kell, ritkán, akkor a működés múlik rajta, ha 10 MHz Z80 kódban egymás után van az OUT és az IN.


Quote
Azért az nem semmi, hogy egy 8 bites gép billentyűzetét kiváltandó egy komplett, GHz-es sebességű számítógép lesz használva. :) Ekkor minek egyáltalán az eredeti gép? Az árpin futhatna egy EP emulátor, aztán kész is vagy. :-D

Na, ez egy komplex kérdés ... :)

- Először is, ennek az egésznek nincs semmi értelme ... :)
Az az értelme, hogy mikor olyanom van, akkor a legmodernebb (fém) Apple Bluetooth billentyűzettel fogom kattogtatni az EP -t ... a VAS EP -t ... :)
És gondolok azokra az időkre, mikor törött billentyűfóliával kellett vergődni ... :)

Ha emulátor, akkor mér mennék az RPi -re ? Elfut az a desktop gépeimen is tökjól ... :)

Nézd másképp ! Az RPi az csak egy shortcut itt ...

Az EP -be kerülő fokozat ugye egy logikailag igen egyszerű fokozat, hozzáértő gondolom fél nap alatt hekkelné össze, csak én bénázok vele ennyit.
666 nagyságrenddel egyszerűbb fokozat, mint a PS/2, USB, Bluetooth HID eszközök kezelése.
Egyszerűsége miatt kis mérete lesz, be lehet rakni EP házba is. És csak 4 drót jön ki.

Felfoghatjuk ezt egyfajta "EP keyboard" csatlakozásnak is.

És kívülre nem kötelező atomreaktort, szuperkompjútert, modern PC -t vagy akár még RPi -t sem kötni, hogy meghajtsd ezt az új "EP keyboard" bemenetet.

Ha valaki olyan frankó csávó (pld. múltkor óta már én is képes vagyok erre),
akkor fog egy kis mikrót, ami csinál egy PS/2 -> "EP keyboard" átalakítást,
amihez mostmár nem kell többé az 50 MHz,
hanem lassú, pici, olcsó, kevés GPIO lábú (4, mert mindkét oldalon soros) mikró is megteszi,

és azt az átalakítót egy kis lengő adapterré szerelve bedugja a PS/2 eszköze és az "EP keyboard" csatlakozója közé.

Tápot kap az "EP keyboard" csatlakozóról.

Ha valaki még faszább gyerek,
ugyanezt eljatszhatja USB vagy Bluetooth esetén is.
Lehet pár év múlva olyan kompakt cuccok lesznek, hogy még én is meg fogom tudni csinálni azt is.

Lehet csinálni HUB eszközt is, amire dughatunk 2 PS/2 és 2 USB eszközt is ... :)


Most viszont egy huszárvágással RPi, amivel alkalmazás szintű API -kkal pikkpakk kezelek minden fajta csatlakozót,
és minden típusú eszközt. (pld. game kontrollert bemappolok billentyűkre. billentyűre meg van írva minden játék. stb.)

De nem kell mindenki ilyen igénytelen és lusta legyen,
ha valakinek kell a kompaktabb megoldás,
mint a (mostmár nagyon úgy tűnik) külön tápról működő RPi,
akkor azt is meg tudja valósítani egy relatíve lassú, olcsó, kicsi eszközzel.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.14. 23:45:19
Quote
Hacsak... Jut eszembe! Itt van az alkatrészed!. Kérdés, hogy beszerezhető-e? Mondjuk ehhez is kell némi körítés, de a lényeget megoldja. :-D

Azt írja, hogy 40 -es DIP -be rakják. (Breakout board -ot valszeg nem fogok találni az SMD verziójából ...)

A 40 -es dip 52 mm X 15 mm, és azt írod még kellene valami mellé ...


A CPLD/FPGA breakout board -ok, amiket linkeltem olyan 30 X 18 -asok. És remélem hogy 4 vonalnak az 5V -> 3.3V -ra illesztésén kívül semmi más nem kell majd hozzájuk.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 00:18:42
Mondjuk 1 valami miatt folyamatosan gondokodok azon, hogy mégse csupán az 1 db programozható logikai áramkört tegyem belülre a géphaz alá.


Ugyanis ebben az esetben, alapból csak egy billentyűzet mátrix kivezetésem van.
A többi amit írtam mind igaz, de csak az EP billentyűzet mátrix -át tudom kívülről módosítani.

(Mondjuk, ha belegondoltok, már így is lehetne az RPi -ről távvezérelni az EP -t ... :))

De pld. alapból reszetelni nem tudnám a gépet.

Az már a korábbi PS/2 -s, mikrokontrolleres esetben is meg volt csinálva, hogy a mikrokontroller felismer különböző billentyűket,
és azok hatására mindenféle reszeteket hajt végre ( meleg, hideg, rohadt hideg (C + reset) :) )

Namost ez itt nem működne, mert a beszerelt elektronika már csak EP billentyűzet mátrixot kap, abban meg nincs reset.

Bonyolultabb dolgokat meg nem hinném hogy bele kéne rakjak a CPLD/FPGA -ba.
Egy esetleges protokoll értelmezést, vagy ilyesmit, amibe belefér a bill. mátrix, a reset, és még később akármi más is ...


Szóval, talán mégis inkább a mikrokontroller + dual port ram kombo volna jó.

Dual port ramot már linkeltem, és AVR mikrokontrollereket is lehet fillérekért kapni 24-28 láb körüli DIP tokban !


És akkor a dolog annyiban változna meg, hogy kívülről a soros vonalon bejövö anyagot először a mikrokontroller kapná meg,
vele kommunikálna a külső eszközkezelő elektronika,
a mikrokontroller először megrághatná a bejött anyagot,
és annak protokollja tartalmazhatná, hogy most a bill. mátrixot küldtük, vagy pedig egy reset command -ot.

A bill. mátrixot a mikrokontroller átpasszolná a dual port ram -nak,
a reset -et vagy egyéb kommandokat pedig végrehajtaná.


És akkor ebben az esetben, lehet hogy megválhatnánk a GPIO -n keresztül lebonyolított soros kommunikációtól,
és megkövetelhetnénk a soros kivezetésünkhöz valami szabványos HW protokollt,
mint az I2C, SPI, satöbbi ... :)


Persze még egyiket sem ismerem, és ki kéne választani hogy melyik legyen, mert többfélét támogatni nem lenne jó ...

Konfigurálgatni kéne az egységeket a két oldalon ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 00:27:52

Persze az is lehet, hogy nem kell ennyire messze menni,

hanem csak az üres felső 48 bit egyikét ki kell jelöljem reset bitnek,
és a CPLD/FPGA (hiszen ő tárolja a teljes mátrix -ot) csak azt az egy bitet kell figyelje,

és annak hatására reset -elnie.


Nade hogy tudok logikai áramkörökkel időzítve mondjuk dupla resetet kiváltani ? Valami számlálókkal ? De akkor kell órajel is ...

És hogy tudom elérni hogy beálljon a C gomb bitje a mátrixban reset előtt ...


Lehet hogy a mikrokontrolleres (+ dual port ram) verzió a jobb ...


Sok sok kérdés ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 21:22:57
Beszéltem ma egy ismerősömmel, és volt pár jó ötlete.

Ennek hatására egyenlőre úgy tűnik, hogy ebben az iterációban talán nem kell még visszalépjek
a mikrokontroller + dual port memory működésre. Amíg persze ez meg nem borul valahol ... :)

A működést a következőképp terveztük.


Az EP -be épített egységnek lesz ugye valahány bitnyi memóriája. Ezt nevezzük mondjuk "frame" -nek.

Egy két drótos, 1 clock + 1 data soros vonalon engedi ezt a frame -et felülírni,
valamint a 12 drótos, 4 cím + 8 data vonalon engedi a frame első 128 bitjét olvasni.

A frame lehet nagyobb is akár, mint 128 bit.
Első körben valószínűleg egyetlen bittel lesz több, az lesz a reset bit.
(Hely szűke esetén az is lehet hogy a 128 bit csak 80 bit lesz, ez majd elválik.)
A lényeg hogy a frame különböző területekből állhat,
amit addicionálisan, bővíteni is lehet a jövőben.


Pld. egy esetleges scenárió:

frame = billentyűzet mátrix elso 80 bitje + 1 reset bit + billentyűzet mátrix maradék 48 bitje + 8 bit mouse X + 8 bit mouse Y + 16 bit mouse X + 16 bit mosue Y

Ez egy olyan fejlődést írna mondjuk le, hogy:
- először csak a billentyű mátrix első 80 bitje fért az FPGA -ba
- később beletettünk egy reset bitet is, és az FPGA azt a reset -re teszi
- még később lett nagyobb FPGA, és beletettük a maradék billentyűzetmatrix biteket, és rámeppeltünk valamilyen dolgokat (amit az EP ugye tud olvasni natívból)
- még később beletettünk 8 bites egér inputot, és azt valahova belepumpáljuk az EP -be ...
- még később beletettünk 16 bites egér inputot, mer a 8 az már sovány volt, és azt megintcsak valahova belepumpáljuk az EP -be ...

Csökkenni nem tud a frame mérete, mindíg csak nő, a 8 bites egér input akkor is bennemarad, ha a 16 bites már feleslegessé teszi.

És természetesen nem nőhet az egekbe, nem pumpálhatunk be vele pld. hang mintát, szerintem úgy kb. soha nem fogja meghaladni a 256 bitet ...


A mindenkori teljes frame -et másodpercenként sokszor (mondjuk úgy 100 - 1000 frame/sec) frissítjük a soros bemeneten keresztül.

Ez ugye mindent maxra téve kb. 256 KHz -es frekvenciát követelne a soros vonalon,
és már egy 16 MHz -es AVR -en is simán toltam 4 MHz -et a GPIO -ra C nyelvből, sima ciklussal,
szóval a mikrokontrollereknek sem lesz az gáz, a többszáz MHz -es RPi pedig valszeg ki se röhögi.

A frame első bitje előtt lesz egy "frame kezdete" jel. Ez a soros vonalunk mindenkori órajelének töbszörös ideéig (mondjuk 10 - 20) lehúzott clock vonal.

Ez után a külső egység belepumpálja az általa ismert frame -et a belső egységbe.
Ha előbb jön az új "frame kezdete" jel, minthogy frissülne a belső egység összes bitje (a külső egység kisebb frame -et ismer még),
akkor a fennmaradó bitek nem frissülnek a belső egységben.
Ha később jön csak a "frame kezdete" jel, mint amit a belső egység ismer (a külső egység nagyobb frame -et ismer már),
akkor a "felesleges" biteket a belső egység elnyeli, és nem tárolja el.


A belső egység a bekapcsolás után a párhuzamos (kimeneti) portján egyből működik,
de a soros (bemeneti)porton jövő adatokkal addig nem csinál semmit, míg nem kap egy "frame kezdete" jelet.

Így ha a külső egységünk nem a belső egységtől kapja a tápot
(belső egységtől pld. egy "lengőre szerelt" billentyűzet konverter kapja),
hanem saját táppal működik
(mint pld. az RPi),

akkor ha az EP -t kikapcsoljuk, és a belső egység lekapcsol ettől,
mikor visszakapcsolják az EP -t, akkor a belső egység újra szinkronba kerül a külső egységgel,
ami a kikapcsolás alatt zavartalanul tovább tolta a biteket, és a szinkronból így kilépett.


Az olyan "komplexebb" dolgokat, mint pld. makrók vagy szekvenciák (pld. hideg reset, ahol 2 reset van egymás után)
azt mindíg a külső egységeknek kell megvalósítaniuk fenti interfészt használva.

Ez rossz azért, mert mindent mindíg meg kell valósítani minden külső egységben újra,
meg azért is mert lesznek limitációk, mint pld. a frame frissítési frekvenciája,
ami egy adott szekvencia (hideg reset) belső egységgel történő implementációjánál nem lenne.
(De a reszetre jó lesz az a frekvencia is ... :))

De ez jó is azért, mert az egyes megvalósítások lehetnek testreszabva a külső egységekre.
(Persze lehet, hogy ez sovány vigasz, de akkor is ez a helyzet ... :))


Hát így állnánk most ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 21:30:01

Két kérdés merült fel a dologgal kapcsolatban.

1,

A szinkron jel időméréséhez szükség lesz valami órajelre.

Van az EP -ben olyan órajel, ami nem változik meg a CPU húzásakor (tehát minden gépen lehet vele ugyanazt az időt mérni),
és felhasználható párhuzamosan egy másik inputon is ? Vagy erre saját órajelet kell generálni ?

2,

Tud -e valaki saccolni, hogy fenti logika belefér -e (lehet 80 bittel számolni továbbra is) ebbe az FPGA -ba:

https://store.tinyfpga.com/products/tinyfpga-a1

MachXO2-256

https://www.latticesemi.com/Products/FPGAandCPLD/MachXO2#_3D24D0EEB97F430890D7AF24D20DF79A

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.October.15. 21:57:07
Van az EP -ben olyan órajel, ami nem változik meg a CPU húzásakor (tehát minden gépen lehet vele ugyanazt az időt mérni),
és felhasználható párhuzamosan egy másik inputon is ? Vagy erre saját órajelet kell generálni ?
Pl Nick órajel.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 22:03:49
Quote
Pl Nick órajel.

És az mennyiaz ? :) (Thx. Zozo)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.October.15. 22:11:33
És az mennyiaz ? :) (Thx. Zozo)
14237536.27 Hz (https://enterpriseforever.com/hardver/nick/msg22123/#msg22123)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.15. 22:17:47

Quote
14237536.27 Hz

Hát ... akkor azzal már lehet mérni 256 KHz -es (és kisebb) frekiket ...

Egy gonddal kevesebb ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.15. 23:50:11
Hát ez már akkor is az volt, mikor 16 MHz -es 32 bites mikrót használtam PS/2 illesztéshez ... :) (Oszt mégse elég gyors ugye ...)

Eh... A 16 MHz határesetnek tűnik, de mi is volt ez a mikró pontosan? (32 bitesből ily' lassú? :-D )

Még az 50 Mhz -nél se olyan triviális, hogy mire kiváltódik az a megszak, mindenféle mechanizmusokon keresztül,
meg le push -olja azt a 2 regisztert, amit muszály, és kiírja végre a billentyűzet sor bájtját, addig nem csúszik ki az 1 mikroszekundumból.

Ez igaz, bármilyen "lassú" megszakításkezelő nem frankó.

Azt írja, hogy 40 -es DIP -be rakják. (Breakout board -ot valszeg nem fogok találni az SMD verziójából ...)
A 40 -es dip 52 mm X 15 mm, és azt írod még kellene valami mellé ...

Ha jó az, hogy 10 vezetékkel (plusz tápok) jössz ki a gépből, akkor nem kell mellé semmi. :) Én egy egyszerű mikrovezérlőt raknék oda, amivel a gépből kifele valamilyen egyszerű soros protokollt könnyű megvalósítani. De ha már µC, akkor az lehetne gyorsabb, amivel talán az MT is kihagyható. :-D Visszaértünk az elejére.

2,

Tud -e valaki saccolni, hogy fenti logika belefér -e (lehet 80 bittel számolni továbbra is) ebbe az FPGA -ba:
https://store.tinyfpga.com/products/tinyfpga-a1
MachXO2-256
https://www.latticesemi.com/Products/FPGAandCPLD/MachXO2#_3D24D0EEB97F430890D7AF24D20DF79A

Az oldalon (https://store.tinyfpga.com/products/tinyfpga-a1) a doksi azt írja, hogy 18 user I/O-d van. Az elég lesz? Amúgy 2 KBit RAM-ot is ír mellette, abba talán elférnek a tárolandók. (Mondjuk pont egy FPGA-ban van más mód is bitet tárolni, de ehhez jó lehet a direkt RAM is.)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.16. 22:29:42

Quote
Eh... A 16 MHz határesetnek tűnik, de mi is volt ez a mikró pontosan? (32 bitesből ily' lassú? :-D )

Hááát ... most hogy így rákérdeztél ... :oops:

Eléggé 8 bitesnek tűnik az adatbusz ... :)

De akkor is 16 MHz ! :oops:

(És benne van a nevében hogy 32 ...) :oops:


https://store.arduino.cc/usa/arduino-micro

ATmega32U4

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf


Quote
Ha jó az, hogy 10 vezetékkel (plusz tápok) jössz ki a gépből,

Hát dehogy jó ... ha jó lenne, akkor azt a pár lábas Dual Port RAM -ot kéne betenni az EP -be egyedül,
amit még úgy a topik nyitásánál linkeltem, és kalap kabát, minden kész volna ...

De az volt a kiinduló bonyodalom, hogy nem akarok sok drótot.


Quote
Az oldalon a doksi azt írja, hogy 18 user I/O-d van. Az elég lesz?

Hát ... gondolom ...

2 soros input+ 12 parhuzamos output+ 1 reset output = 15 drót

Akkor van még 3 felesleges ...

Nem ?


Quote
Amúgy 2 KBit RAM-ot is ír mellette, abba talán elférnek a tárolandók. (Mondjuk pont egy FPGA-ban van más mód is bitet tárolni, de ehhez jó lehet a direkt RAM is.)

Ez azt jelenti szerinted, hogy az FPGA -ba írható logikai funkciók

1,
Elérik írásra/olvasásra azt a dedikált 2 KBit RAM -ot ?

2,
És azok elérése, "címzése" kevesebb logikával jár, mintha a bitek úgy lennének megvalósítva szintén a programozható területen, logikai hálózatokkal ?


Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.17. 01:33:27
Hááát ... most hogy így rákérdeztél ... :oops:
Eléggé 8 bitesnek tűnik az adatbusz ... :)

Igen, a sima AVR az 8 bites. Azért csodálkoztam el, mert 32 bites mikróból ennyire lassúval még nem találkoztam, persze ez nem jelenti azt, hogy nincs is. :)

Hát dehogy jó ... ha jó lenne, akkor azt a pár lábas Dual Port RAM -ot kéne betenni az EP -be egyedül,
amit még úgy a topik nyitásánál linkeltem, és kalap kabát, minden kész volna ...

Akkor kell mellé egy kis µC, aztán abba már olyan kevés-vezetékes buszt implementálsz, amit akarsz.

2 soros input+ 12 parhuzamos output+ 1 reset output = 15 drót
Akkor van még 3 felesleges ...
Nem ?

Az a
Quote
12 párhuzamos output
az gondolom 8 ki meg 4 bemenet lesz. :)

Ez azt jelenti szerinted, hogy az FPGA -ba írható logikai funkciók
1,
Elérik írásra/olvasásra azt a dedikált 2 KBit RAM -ot ?

Ha nem érnék el, mire lenne jó a megléte? :)

2,
És azok elérése, "címzése" kevesebb logikával jár, mintha a bitek úgy lennének megvalósítva szintén a programozható területen, logikai hálózatokkal ?

Jó kérdés... Ki kell próbálni, aztán kiderül! Az jutott még az eszembe, hogy egyrészt itt is kell majd szint-illesztened legalább a 12 (+1) EP-be drótozandó jelet, másrészt meg a CPLD-s előző verzió is jó lehet, legföljebb nem egy tokba fér bele minden, hanem kettőbe. :-D De valahogy egyik sem egyszerűsíti a feladatot.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: lgb on 2018.October.17. 01:40:46
Quote
Eléggé 8 bitesnek tűnik az adatbusz ... :)

Igen, az AVR Atmega az 8 bites adatbusszal dolgozik, mondhatni "8 bites", bar az utasitashossza nem az, az (ha jol remlik) 16 bit. De ugye ott kulon address space van a kettonek, azaz kodot futtatni nem tud RAM-bol csak flash-bol, es a kettonek mas a szervezese (a flash 16 bites). De amikor adat olvasas/iras RAM/bol/-ba vagy IO/-rol/ba (ami vegulis hasonlo) az 8 bit, es ugye itt ez a lenyeg, nem a kod.

Quote
De akkor is 16 MHz ! :oops:

Es a legtobb utasitas legalabb valoban 1 orajelciklus (azert nem mind). PIC-eknel volt regebben legalabbis (most nem PIC32 meg ilyesmik), hogy irja a manual h 1 machine cycle, meg stb, csak azt felejtettek el sokan, hogy valahol le van irva: 1 machine cycle = 4 clock cycle ...

Quote
(És benne van a nevében hogy 32 ...) :oops:

Az azt jelenti az ATmega MCU-k neveben, hogy 32K flash. Pl az Atmega8 az 8K flash ...

Quote
Hát dehogy jó ... ha jó lenne, akkor azt a pár lábas Dual Port RAM -ot kéne betenni az EP -be egyedül,
amit még úgy a topik nyitásánál linkeltem, és kalap kabát, minden kész volna ...

Valoban, pl hasonlo (RAM-os trukkot) csinaltak primo-nal is, pl (ez itt eppen PIC-kel, de tok mind1, meg OK, ez nem epp pont uaz az eset mint EP-nel, de most csak nemi alapelv meg SRAM hasznalata miatt emlitem max):

http://primo.homeserver.hu/html/epitesps2bill.html
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: lgb on 2018.October.17. 10:08:41
Amugy hogy jon ki az a "2.5 usec" reakcioido 16MHz-es AVR architekturan interruptra? Nekem kicsit soknak tunik ... Meg regisztereket sem kell push-olni, van par regisztere AVR-nek, siman ne mentsd el, meg semmi. Max, nem szabad mashol hasznalni, mert nyilvan ha az ember nem menti, es interrupt handler is haszalja meg  mas is, akkor ciki van ... Persze, ez akkor (de ha jol ertem) AVR assembly szintu cucc lesz, nyilvan ha pl C-ben van irva, akkor persze szivas, mar eleve, az ilyen gyorsasagot lehet elfelejteni, hasonlo trukkokkel egyutt.

Amugy AVR-rel (most ertem itt az ATmega meg ATtiny csaladot, az ATxmega az mar mas, ahogy az AVR32 es/vagy ARM core-os cuccok is) erdekes projectek vannak, pl dedikalt hw nelkul VGA signal eloallitasa, tisztan software-bol, stb (spec itt hasznos az, hogy van benne shift-out register is, ami pl SPI-hoz is kell, es lehet "abuse-olni" ilyen celra is). Stb, szoval azert annyira lassunak nem neveznem, foleg ahhoz kepest, hogy nyilvan ez a 8 bit MCU kategoria, ahol azert altalaban nem par szaz MHz-es orajelet szokas hasznalni altalaban, akkor az mar inkabb a 32 bit/ARM core/stb kategoria szokott lenni.

A masik ami eszembe jutott, C64-en hasonlo PS/2 billencs kerdesekben hasznaltak pl "cross point switch" IC-t (MT8812 vagy mi volt ott konkretan egy megoldasban?). Ott raadasul az a baj, hogy C64-en megy "ket oldalrol" is a matrix scanning, azaz mondhatod hogy pl oszlopokra tolod ki a jelet, es sorokat olvasod be, de forditva is csinalhatod, EP-nel ugye ez fix. Az a crosspoint-switch IC az meg spec pont hogy egy matrixot valosit meg aminek vannak sorai/oszlopai, es aztan programozhatod, hogy a matrix melyik sora/oszlopa legyen osszekotve v ne legyen. Mondjuk ha jol remlik eleg ritka cuccok, es saja nem is tul olcsoak, lehet, ha mar mindenaron kell vmi kulso taroloeszkoz (azaz nem az MCU csinalja magaban ...) akkor vmi SRAM hasznalata olcsobb megoldas.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.October.17. 17:25:27
Amugy AVR-rel (most ertem itt az ATmega meg ATtiny csaladot, az ATxmega az mar mas, ahogy az AVR32 es/vagy ARM core-os cuccok is) erdekes projectek vannak, pl dedikalt hw nelkul VGA signal eloallitasa, tisztan software-bol, stb (spec itt hasznos az, hogy van benne shift-out register is, ami pl SPI-hoz is kell, es lehet "abuse-olni" ilyen celra is). Stb, szoval azert annyira lassunak nem neveznem, foleg ahhoz kepest, hogy nyilvan ez a 8 bit MCU kategoria, ahol azert altalaban nem par szaz MHz-es orajelet szokas hasznalni altalaban, akkor az mar inkabb a 32 bit/ARM core/stb kategoria szokott lenni.
Az egyik híresebb projekt (https://www.linusakesson.net/scene/craft/index.php).
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: lgb on 2018.October.17. 19:00:24
Az egyik híresebb projekt (https://www.linusakesson.net/scene/craft/index.php).

Jaja, nekem is az a kedvencem :) De amugy van mar kb "jatekkonzol" is hasonlo, na jo kis (na jo, nagy ...) tulzassal :D de a lenyeg, hogy egy szem - sot ha jol emlekszem - nem is ATmega hanem ATtiny, es VGA kimenet, hang, meg vmi iranyitas is hozza, hogy lehessen vele jatszani. Na jo, nyilvan nem a vilag legjobb jateka, az altalad is emlitett Craft ilyen szempontbol erdekesebb :) Ja, es ha jol remlik, az ATmega8/88 az csak 1K SRAM-al rendelkezik, szoval meg csak framebuffer se nagyon fer el a RAM-ban, nem is olyan elven mux, hanem on-the-fly tallaja ki mi legyen a kepen, ahogy generalja a kepet, nincs video RAM meg semmi. HA ... jol emlekszem, regen neztem mar, de nem semmi azert ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Povi on 2018.October.18. 09:03:41
Az egyik híresebb projekt (https://www.linusakesson.net/scene/craft/index.php).
hohó, és a Craft végén Julia halmaz morpher :-)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 00:49:18
Quote
Az jutott még az eszembe, hogy egyrészt itt is kell majd szint-illesztened legalább a 12 (+1) EP-be drótozandó jelet,

Szint illesztesre az lenne most a (legutobbi) koncepcióm,

hogy akkor az RPi 3.3 -al tud menni, es akkor 3.3 -as áramkort (ami jelenleg ugye egyetlen FPGA -nak a legvalószínűbb) teszek az EP -be,

- vagyis az RPi és az FPGA között nem kell majd illeszteni,
- az FPGA és az EP közötti adat vonalakat (8 drót) szintén nem kell illeszteni, mert a 3.3V már magasba hajtja majd az EP TTL inputjait,
- csupán az FPGA és az EP közötti cím vonalakat (4 drót) kell majd illeszteni, mert az EP 5V -os cím drótjait majd vissza kell fogjam 3.3V -ra ...

Szerinted ez nem igaz ?

Szóval összesen 4 drótot kell illesszek, és ha minden igaz, azt is a legegyszerűbb típusú, akár passzív illesztéssel,
mivel ezek a jelek (mind az adat, mind a cím drótok az FPGA és az EP között) fixen bekötött,
nem nyitott kollektoros, semmi extra típusú vonalak lehetnek ...

Nem ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 01:53:02
Hmmm ... hát ez a "logikai áramkör programozás" ez lehet hogy egyszerűbb lesz, mint hittem ...

Mer nem is kell majd logikai hálózatokat tervezzek valójában ...

Most lett egy olyan benyomásom,
hogy valójában nekem nem is kell megtanulnom logikai hálózatokat tervezni,
hanem megfogalmazhatom szekvenciális programokkal is a logikámat,
és azt nekem majd "lefordítja", leegyszerűsíti, kioptimalizálja logikai hálózatokká valami program ...

Így akkor persze kevesebb kontrollod lesz az elkészült logikai hálózat részleteit tekintve,
de az elkészült hálózatnak lesznek olyan pontjai, amik úgy viselkednek, ahogy te azt leírtad ...

Persze ha ez nem így van akkor csak benéztem valamit, de szerintem ez lesz a megoldás ...

Ez majdnem olyan, mintha az ember nem akarna assembly -t tanulni, ezért inkább BASIC -be tolja ...
Itt ebben az esetben én nem akarok megtanulni logikai kapcsolásokat, hálózatokat tervezni, optimalizálni,
és ha jól értem, ezt a fejlesztőeszközök elvégzik majd helyettem ...

Ha így van ... az naggyonfassza ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 02:07:43
Ha az előbbi állításom igaz,

akkor viszont megírni egy csak PS/2 kezelő logikát nem lenne egy nagy kunszt ...


Szóval ugyanazt megcsinálni,
mint amit az egy szál mikrokontrollerrel már megcsináltam,
azt egy szál FPGA -val simán újra lehetne implementálni (csak most tökéletes sebességgel) ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 02:20:50
Ha az előbbi igaz,
akkor meg lehetne csinálni azt is,

hogy egy síma PS/2 bemenetet csinálnék,
ami akkor nem lenne annyira nyitott, mint amit eddig terveztem,
benne lennének lekódolva olyan dolgok, mint a makrók, reset szekvenciák, stb.,

és egy sima PS/2 billentyűzetről hajtva nem lenne konfigurálható sem különösebben,

de egy szabvány bemenet lenne, amit PS/2 -ről meg lehetne hajtani,
egy szabvány PS/2 billentyűzetet már rá lehetne dugni,


és engem még mindíg nem akadályozna meg semmi,
hogy pld. egy RPi -t használva továbbra is beolvassak minden típusú input eszközt
amit csak az RPi képes kezelni,

majd azt ne direkt "EP billentyűzet mátrix" formátumban toljam az EP -be,
hanem "PS/2 formátumban" ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.21. 13:02:48
Akkor sorban:

- vagyis az RPi és az FPGA között nem kell majd illeszteni,
- az FPGA és az EP közötti adat vonalakat (8 drót) szintén nem kell illeszteni, mert a 3.3V már magasba hajtja majd az EP TTL inputjait,
- csupán az FPGA és az EP közötti cím vonalakat (4 drót) kell majd illeszteni, mert az EP 5V -os cím drótjait majd vissza kell fogjam 3.3V -ra ...

Az árpi I/O vonalai valóban 3.3V-osak, az FPGA felé emiatt nem kellene külön illeszteni. Az esetleges hosszabb vezetékek viszont bezavarhatnak a képbe, (az ESD (https://en.wikipedia.org/wiki/Electrostatic_discharge)-ről meg még nem is volt szó, ) emiatt én mindenképpen tennék oda valamit. (Az FPGA meg az rPi felőli oldalra is!)

Az FPGA és az EP közötti 8 adatvonallal az a gond, hogy azok az EP-ben nem csak belemennek simán egy bemeneti kapuba. Hanem - mint ahogyan az ilyen, OC-s jellegűen hajtott bemeneteknél illik - fel vannak húzva egy ellenálláshálóval a +5V-ra. Tehát az FPGA-nak ezeket az alapban +5V-os feszültségen levő vonalakat kellene alacsonyra húzni. Az is idekívánkozik, hogy ha meg akarod tartani az eredeti billentyűzet működőképességét is, akkor az FPGA felől ugyanúgy OC-s kimenettel illene ezt a 8 vonalat hajtani. Ezt valószínűleg meg lehet csinálni önmagában az FPGA-val is, de a nem húzott kimenetek ilyenkor +5V-ra kerülnek, ami nem egészséges az FPGA lábaira nézve. (Ha van bennük védődióda, akkor talán nem lesz ezzel gond, de ott meg az fordulhat elő, hogy a komplett I/O táp megemelkedik, ami még nagyobb galibát okoz.)

Tehát nem csak azzal a 4 dróttal van probléma...

Hmmm ... hát ez a "logikai áramkör programozás" ez lehet hogy egyszerűbb lesz, mint hittem ...
Mer nem is kell majd logikai hálózatokat tervezzek valójában ...

Na, erre azért majd kíváncsi leszek. :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 13:42:15

Jajj már balagesz ... te aztán nagy mestere vagy az ember bíztatásának ... :)


Quote
Az FPGA és az EP közötti 8 adatvonallal az a gond, hogy azok az EP-ben nem csak belemennek simán egy bemeneti kapuba

Francba ... akkor uána kell nézzek ezeknek az illesztési szaroknak is ... 12 illesztés az már elég sok (nagy) lehet gondolom ...

Ezért akartam azt, hogy belül az EP -ben csak 5V -os alkatrészek legyenek ... hogy ne kelljen ilyenekkel törődni ...

Ha lenne 5V -os FPGA kis méretű breakboard -on, vissza is térnék arra az irányvonalra,
még akkor is, ha közben kiderült hogy az RPi 3.3V -os ...

akkor az a 2 külső vonal illesztve lenne és joccakát ...

De nem találtam 5V -os FPGA -t ... most akkor illeszthetek 13 vonalat (reset is) ... francba má ... :)

(Ilyen ESD -s "hülyeségekkel" meg még csak gondolni se akarok ... majd rövid drótra teszem az RPi -t.
Ezek még csak kilóhercek, nem mega meg gigahercek ...)


Quote
Na, erre azért majd kíváncsi leszek. :)

Hopp, ezt azért kicsit részletesebben, plíz ...

Tökhulyeség amit gondolok ?
A VHDL -be nem lehet szekvenciális kódokat írni,
és nem fogja azt nekem valamilyen logikai hálózatokkal megvalósítani a fejlesztőeszköz ?

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.21. 14:47:33
Jajj már balagesz ... te aztán nagy mestere vagy az ember bíztatásának ... :)

Á... Csak a személyi sérülés nem történt, az anyagi kár jelentős típusú szalagcímet próbálom elkerültetni. :-D

Francba ... akkor uána kell nézzek ezeknek az illesztési szaroknak is ... 12 illesztés az már elég sok (nagy) lehet gondolom ...

Ezt a legegyszerűbben talán két 74LS06-tal lehetne megoldani. Egy ilyen tokban van 6 db. OC-s kimenetű inverter. A 8 kimenetre ugyan csak 8 kapu kellene, itt az inverterek bemenetére simán köthető az FPGA kimeneti lába, a '06 kimenetei meg mehetnek közvetlenül a billentyűzet 8 bemeneti vonalára. A fennmaradó 4 inverterkapu viszont pont jó lehet az EP-ből jövő 4 jel FPGA-hoz illesztéséhez: ott az inverterek bemeneteire jön az EP 4 sorkiválasztó jele. A kimenetek mehetnek közvetlenül az FPGA bemeneteire, de mivel ezen kapuk OC-s kimenetűek, ezért csak alacsonyat fognak oda kapcsolni. Hogy a magas is meglegyen, az FPGA ezen lábait a saját VCCio-jára, tehát 3.3V-ra fel kell húzni ellenállásokkal, ilyen 2.2-4.7 KOhm-ra gondolnék itt. A maradék RESET jelhez már így nem marad illesztés, de azt egy egyszerű ellenállás + tranzisztor kombóval el lehet sütni. Összességében annyira nem sok alkesz kell hozzá.

A VHDL -be nem lehet szekvenciális kódokat írni,
és nem fogja azt nekem valamilyen logikai hálózatokkal megvalósítani a fejlesztőeszköz ?

A VHDL egy hardver-leíró nyelv, ott általában nem sorban, hanem párhuzamosan "történnek a dolgok". Ha valamit szekvenciálisan akarsz csinálni, akkor annak a feltételeit meg kell teremteni először. Persze szinte tuti, hogy vannak készen ilyen modulok, ezért is írtam, hogy kíváncsi leszek, nem tudom ugyanis, hogy mit találtál ki. :-D
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 16:45:31
Quote
Ezt a legegyszerűbben talán két 74LS06-tal lehetne megoldani. Egy ilyen tokban van 6 db. OC-s kimenetű inverter. A 8 kimenetre ugyan csak 8 kapu kellene, itt az inverterek bemenetére simán köthető az FPGA kimeneti lába, a '06 kimenetei meg mehetnek közvetlenül a billentyűzet 8 bemeneti vonalára. A fennmaradó 4 inverterkapu viszont pont jó lehet az EP-ből jövő 4 jel FPGA-hoz illesztéséhez: ott az inverterek bemeneteire jön az EP 4 sorkiválasztó jele. A kimenetek mehetnek közvetlenül az FPGA bemeneteire, de mivel ezen kapuk OC-s kimenetűek, ezért csak alacsonyat fognak oda kapcsolni. Hogy a magas is meglegyen, az FPGA ezen lábait a saját VCCio-jára, tehát 3.3V-ra fel kell húzni ellenállásokkal, ilyen 2.2-4.7 KOhm-ra gondolnék itt. A maradék RESET jelhez már így nem marad illesztés, de azt egy egyszerű ellenállás + tranzisztor kombóval el lehet sütni. Összességében annyira nem sok alkesz kell hozzá.

Hát persze ... négy marék IC ide, négy marék IC oda ... azt megfűszerezzük fél marék ellenállással, és csipetnyi tranzisztorral,
mindezeket ízlés szerint bedisznózva, vagy egy kisebb focipálya méretű nyákra rendezgetve tálalható is a cucc ...

Hrrrrrr ... na most mentem vissza 5V -os FPGA -t keresni ... :)


Quote
Ha valamit szekvenciálisan akarsz csinálni, akkor annak a feltételeit meg kell teremteni először. Persze szinte tuti, hogy vannak készen ilyen modulok, ezért is írtam, hogy kíváncsi leszek, nem tudom ugyanis, hogy mit találtál ki. :-D

Az égvilágon semmit nem találtam még ki.
Csak olvasgattam (egyenlőre ippenhogycsak) a VHDL nyelv leírását (mellyel mindenhol pariban emlegetik a VERILOG -ot),
és abban egy alapvető nyelvi elem a "behavioral description":

"There are three different paradigms for describing digital components with VHDL, structural, data flow, and behavioral descriptions.
This chapter dicusses the behavioral approach." :

http://gmvhdl.com/process.htm

mely ha jól értem, akkor a jól ismert szekvenciális programozási koncepciókkal operál:

https://www.allaboutcircuits.com/technical-articles/introduction-sequential-vhdl-statements-VHSIC-hardware-description-language/
https://www.allaboutcircuits.com/technical-articles/sequential-vhdl-if-and-case-statements/
https://www.csee.umbc.edu/portal/help/VHDL/sequential.html


Namost ha ezek szerves részét képezik fenti programnyelv(ek)nek,
és az ezekkel megfogalmazott működéseket állítólag programozható logikai eszközökbe lehet írni,

akkor valakinek a logikai hálózatra történő konverziót el kell végeznie közben ...


Nem ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.October.21. 19:46:50
Hát persze ... négy marék IC ide, négy marék IC oda ... azt megfűszerezzük fél marék ellenállással, és csipetnyi tranzisztorral,
mindezeket ízlés szerint bedisznózva, vagy egy kisebb focipálya méretű nyákra rendezgetve tálalható is a cucc ...

Pontosan. :) Visszakanyarodtunk megint ide, ahol az elején tartott a projekt: a "csak kész eszközöket bedrótozunk" verzió kevésbé működőképes, mivel elég speciális a feladat. Nem véletlen, hogy manapság ezt a fajta billentyűzetkezelést nem csinálják. :-D

Namost ha ezek szerves részét képezik fenti programnyelv(ek)nek,
és az ezekkel megfogalmazott működéseket állítólag programozható logikai eszközökbe lehet írni,
akkor valakinek a logikai hálózatra történő konverziót el kell végeznie közben ...

Szerves részét képezik, de azt ne felejtsd el, hogy a VHDL / Verilog az nem programnyelv, hanem hardver-leíró nyelv. Soros "végrehajtás" itt akkor lesz, ha a lépések állapotát eltárolod magad. De ha tovább csavarjuk a megfogalmazást, eljutunk odáig, hogy lesz egy FPGA-ba implementált processzorod. :-D
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 20:28:58
Quote
Pontosan. :) Visszakanyarodtunk megint ide, ahol az elején tartott a projekt: a "csak kész eszközöket bedrótozunk" verzió kevésbé működőképes, mivel elég speciális a feladat. Nem véletlen, hogy manapság ezt a fajta billentyűzetkezelést nem csinálják. :-D

Ja. De nekem most kell csinálni.

Ha nem lenne ilyen érdekes ez az FPGA dolog, és nem akarnám egy alkatrészből, akkor már mennék is vissza az arduino micro/nano + dual port ram verziohoz.
Azokból van 5V mindkettőből, összesen 2 db alkatresz lenne, és korábban rájöttem, hogy a PS/2 porton is be tudok tolni minden extrát amit akarok,
ha oda nem egy PS/2 billentyűt tolok, hanem pld. egy RPi -vel előállított PS/2 "kimenetet".

Csak hát olyan érdekes már ez az FPGA dolog ... képes leszek ezért a szutyokért beilleszteni 13 vonalat ... :)

Pedig ha belegondolsz, akkor a 13 vonal illesztes még csak az egyik fele a dolognak,
mert ha kifele mégis inkább a PS/2 interfészt akarnám nyújtani, akkor a PS/2 2 drótját is illeszteni kéne, hisz az is 5 V -os,

és! :) akkor viszont az RPi meghajtásnál is illeszteni kellene a szimulált PS/2 kimenet 2 drótját,
hisz az RPi az 3.3 V -os ...

Szóval a tökéletes megoldas 13 + 2 + 2 illesztés lenne a teljes rendszeren ... :)

(És ekkor lehetne 3.3V -os elektronikával, támogatni az 5V -os EP -t, 5V -os PS/2 bemenetet és az arra rakott 3.3V -os RPi -t ...)

Na, ezt nevezném szívásnak ... :)


Quote
Szerves részét képezik, de azt ne felejtsd el, hogy a VHDL / Verilog az nem programnyelv, hanem hardver-leíró nyelv. Soros "végrehajtás" itt akkor lesz, ha a lépések állapotát eltárolod magad. De ha tovább csavarjuk a megfogalmazást, eljutunk odáig, hogy lesz egy FPGA-ba implementált processzorod. :-D

Hát ... most nem értem mér tekered,
van a VHDL -ben "változó" absztrakció, csak felveszed, és operálsz velük, mint rendesen egy szekvenciális programnyelvben.
Ja, a változóidnak különböző időpillanatokban más lesz az értéke, ezt nevezheted "eltárolásnak".

És ha a szekvenciális algoritmusom hatását a kimenetekre a bemenetek függvényében
nem lehet másképp előállítani, csak ha befordít az FPGA -ba egy olyan logikai hálózatot,
amit egyébként intel core i10 fedőnéven ismerünk (vagy legalábbis az intel),
akkor úgy oldja meg, miért érdekel az engem ...

Férjen bele az FPGA -ba, oszt joccakat ...

Nekem valami azt súgja,
ha ebben a VHDL -ben kódolnám össze a vackom,

- akkor tutkó hogy nanoszekundomos nagyságrendű válaszidők lennének az EP fele, teljesen független, párhuzamos működéssel,
- és tutkó hogy a PS/2 feldolgozás oldalán is nagyságrenddel lenne gyorsabb a feldolgozás (nem mintha arra nagy szükség lenne),
mint amit akár assembly -ben összehekkelnék egy mikrovezérlőn.


Nem ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.21. 20:58:39
Nézegetem ezt a dual port ram dolgot:

https://www.maximintegrated.com/en/ds/DS1609.pdf


Ennek az olvasása úgy műxik, hogy a címbuszra ráakasztgatod a címet,
majd 2 masik lábat egyszerre le kell huzni alacsonyra,
es akkor megjelenik az adatbuszon a címzett bájt,

de csak addig, míg az a 2 láb alacsonyan marad.

Ha felengeded, akkor elveszik az adatbuszról a címzett bájt.


A billentyűzet port beolvasásnál igaz ez az EP -re ?

Mikor ott a trigger flag (ami a 4 bites címzést triggereli) le van húzva zeróba,
az mindvégig ki van ott tartva, amíg az adat kell neki ?

Vagy közben fel van engedve, és attól még várja, hogy én folyamatosan ott tartsam a billentyűzet sor értékét ?

Mert ha felengedi, akkor a dual port ram -os verzióhoz is kellene plussz elektronika,

- ami átveszi, és folyamatosan ott tartja a billentyűzet sor 8 bitjét,
- vagy legalább ott tartja a triggert az új trigger érkezéséig,
akkor egy pillanatra elengedi, és újra ott tartja,
így kényszerítve a dual port ramot az adatbusz folyamatos kitartására ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.22. 02:54:23
Na, úgy döntöttem prioritást váltok ...

Először összerakom újra, amim már volt.
A 16 MHz -es, AVR mikrokontrolleres verziot ...
De mostmár nem csak a próbapanelen,
hanem ráheggesztve egy vasra.

Akkor már lesz egy szabvány PS/2 bemenetem,
nem biztos hogy tökéletes reakcióidőkkel az EP fele
(de mostmár van 10 MHz -es EP -m, úgyhogy azzal is le tudom majd tesztelni),
valamint konfiguráció is csak az AVR újraprogramozásával lesz lehetséges.

Behuzalozok valami alap PS/2 működést és kész.
Ez nem fog menni majd minden billentyűzettel,
csak azzal az egy fajta PS/2 kódolással
(emlékeim szerint abból is van több, majd felfrissítem).

Eddig tehát ugyanaz lesz, ami már volt is.

Aztán külső eszközzel (ami itt az RPi lesz),
nekiállok PS/2 output -ot (pontosan azt amit behuzaloztam) emulálni,
az RPi -re kapcsolt összes input eszközből.
(Elektronikailag csak 2 drótot kell majd illesszek.)

Ezt már meg tudom majd csinálni konfigurálhatóra.

Ezen a ponton már fogok tudni USB és Bluetooth billentyűzeteket is használni az EP -vel.

Na, ha idáig elértem, akkor áttesztelem ezt a válaszolási sebesség kérdést, és ha zavaró valahol,

- akkor vagy szerzek egy gyorsabb mikrovezérlőt:

https://www.pjrc.com/store/teensy35.html

ez pld. egy 120 MHz -es ARM, csak gyorsabb valamennyivel, mint a 16 MHz -es AVR ...

olcsó, 5 V kompatibilis, nem kellene mellé semmi más,
bár kicsit nehéz lenne rendes EP ház alá szerelni, mert nagyocska
(6 cm hosszú, az kéteszer akkora mint az eddig kinézett lapok. a szélessége ugyanaz.),

- vagy kezdődhet elölről a most elhalt folyamat, hogy kitaláljam hogyan rakjak össze magamnak kicsi hardvert.


És ha annak a folyamatnak mégis az lesz a vége, hogy mégsem fogok PS/2 kimenetet nyújtani a végső verzióban,
hanem csak valami egyszerűbbet (mert pld. egy FPGA -ba mégsem lesz olyan egszerű belerakni egy PS/2 kezelőt),

az sem lesz nagy baj, mert az RPi oldalon konnyen és gyorsan fogom tudni változtatni a kommunikációs protokollt az EP fele.


Ámmen.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.22. 22:43:01

Na, ma egész nap pakoltam, rendezgettem a dolgokat,
hogy az elkövetkező hetekben és hónapokban egyáltalán hozzáférjek az EP -s és szerelős cuccaimhoz ...

De ha minden igaz, sikerült valahogy úgy pakoljak, hogy hozzáférhessek amihez kell,
és még a normális élet se mindenképp álljon meg ettől ...


Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.23. 16:03:05
Megy a küzdés ... :) :
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.23. 16:04:08
És még egy kicsi ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.23. 22:34:51

Hát nem megy gyorsan ...

Mindenesetre a "mechanikai" szerelés része megvan,
és mostanra elvben sikerült "kigubancolnom" újra a mikrovezérlő oldalt (így jár aki nem készít dokumentációt a bekötésről),
ha minden igaz, akkor holnap még kigubancolom az EP oldalt (talán az gyorsabb lesz),

aztán beforrasztok 16 drótot,

és ha a mikrovezérlőben még mindíg megvan a program, akkor mennie kell annak a PS/2 működésnek, ami már megvolt ...


Néztem közben a mikrovezérlő kódjának forrását is ... hát ... eléggé összecsaptam a végét ... :)

Szóval lesz mit tunningolni még rajta ...


Már alig várom hogy 10 MHz -es EP -n futtathassam a speed tesztet vele ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.24. 22:27:11
Khmmm ... khmmm... :oops:

Hát összeraktaaaaammm ... :oops:


De baszik menni. :evil:


Nem teljes kukaság, ledek villognak összevissza, arduino -n is, meg billentyűzeten is,
sőt, ha reszetelem az arduino -t, akkor még N betűket is elkezd az EP írogatni egy darabig (3-4 sornyit),

de értelmes működés az nem jön belőle ...

Vagy megmakkant benne a software a sok állásban, vagy utoljára valami vackot hagytam rajta (de mér tettem volna),
esetleg valahol rosszul barkobáztam össze a bekötést, vagy valahogy rosszul heggesztettem valamit ... :(


Szal most kezdhetek nyomozni ...


Kívanjatok sok szerencsét ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.27. 23:40:00
Na ...

Közben beszerváltam egy RPi -t ... Ketyeg a 14 nap, szóval először azt kellett kipróbáljam ... :)

Mivel megfelelő házat nem kaptam hozzá (elfogyott itt a magyar boltban, kintről meg fene tudja mikor ér majd ide),
ezért úgy döntöttem, ezt is lábakra állítom, mint az EP -t ...

Ami azért is elhibázott gondolat, mert ez az RPi még annál is kisebb mint gondoltam, úgyhogy elég könnyű is ...
Nem nagyon áll a lábán, a zsinórok elemelik ... :)

Meg azért is elhibázott gondolat, mert csak 3 -as csavarjaim vannak itthon, ebben meg 2.75 -ös a furat ...
Ilyen se volt még, hogy egy "számítógépnek" legelőször fúrógéppel essek neki ... :)

Na de áll a lábán ...


És ha már áll, és működik is, és vár arra, hogy legyen az EP -nek vére egy PS/2 bemenete, amit meghajthat,
és ráadásul van rajta egy Linux is, akkor már feltelepitettem rá az AVR csomagokat,
és lefordítottam a PS/2 -es AVR kódokat, meg fel is töltöttem az Arduino -ra vele ...


Szóval AVR -es (Arduino -s) fejlesztői gépnek is tökéletesen meg fog felelni,
így most lett egy külön hardverem az EP -s fejlesztésekhez,
nem kell virtuális géppel veszkődni ... csuhajj.


Holnap már kezdődhet az érdemi munka: megpróbálni rájönni mi a baja a PS/2 vezérlőmnek ...
mert az újra flash -elés semmit nem ért ... :(


Az EP megy közben, az RPi megy közben, az Arduino is villog jobbra balra, és az RPi -n az avrdude azt mondja,
hogy visszaellenőrizte a feltöltött cuccot ... szóval nagy baja nem lehet hardveresen sztm az Arduino -nak sem,
hiszen azon szoftveres az USB bootloader, és én azon keresztül flash -eltem ...


Szal csak valamit félredrótozhattam ... vagy nemtom ... :shock:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 00:35:00
Hmmm ... kipróbálni ma már nem tudom, de lehet megvan a (egy) hiba ...

Korábban én mindíg az USB -ről tápoltam az Arduino -t,
az EP -ről gyakorlatban nem tápoltam ...

Az Arduino doksija azt írja, hogy az Arduino -t 2 helyről lehet tápolni, USB -ről vagy a VIN lábáról.
Ha a VIN lábra elég feszejt tettél, akkor elkezdi onnan tápolni a lapot, akkor is ha az USB táp is rajta van.

De a VIN lábra 7V - 12V közötti feszkót kell tenni, nem elég neki az 5V ... Na szerintetek én honnan próbálom tápolni ?

Helyes, az 5V -os TTL áramkörök táplábáról ...


Ez most akkor 2 kérdést vet fel :

- Hol lehet az EP -ről leszippantani többet, mint 5V ?

- Ezt az Arduino Micro -t úgy tervezték, hogy ha nem USB -re dugom, akkor köteles vagyok neki 7V - 12V -ot nyújtani ?
Hát honnan szedjen olyat egy rendes TTL áramkör, akinek már csak a (regulált) 5V -ja van ?
Vagy lehet hogy a regulált 5V -omat ráköthetem akkor is az USB tápfesz bemenetre,
ha egyébként csak tápolni akarom onnan, és adatkommunikációt nem végzek ?
Ami akkor azért lenne érdekes, mert ehhez meg nem nagyon látok kivezetést ...
nem fogok csak ezért egy micro USB csatlakozóval cuppanni rá az Arduino -ra az EP alaplapról, igaz ?

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 01:48:01

Na, találtam 2 doksit, nem csodálom, hogy mindenki összezavarodik,
ha ekkora doksik kellenek a tápoláshoz :) :

https://www.open-electronics.org/the-power-of-arduino-this-unknown/
https://www.rugged-circuits.com/10-ways-to-destroy-an-arduino/


Én azt vonom le belőle, hogy lehet ugyan 5V -ról tápolni a cuccot az 5V nevű kivezetésen
(ami nem csak egy síma VIN, mert akkor is megjelenik rajta az 5V ha te nem teszed oda, hanem másik pontokról tápolod),
de akkor aztán tényleg 5V -od legyen, ne 5.5V vagy 6V, pláne akkor, ha még az USB csatit is rá akarod tolni egyszerre ...
(És mér ne akarnám, fogom frissíteni a programot rajta még 1000X.)

De a legszebb mód az volna, ha egy 7V-12V közötti tápot tudnék szerezni az EP -ről neki a VIN lábára,
és akkor mindenki boldog lenne.

És nem, azt még véletlen sem akarják, hogy valaki szembekössön egy külső feszültségforrást egy USB kimenettel :),
ezért nyilván nem vezették ki tüskére IS az USB táp érintkezőjét. Oda csak USB csatlakozón keresztül kerülhet az 5V.

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 12:25:47

Na, a jó hír, hogy beindult a PS/2 vezérlő,
a rossz hír, hogy a ramtest viszont elkezdett vacakolni ... :(

Nem a tápfesz volt feltétlen rossz, egy speckó módon működtettem utoljára,
amihez nem volt jó a normál bekötés.

Viszont most akkor meg kell küzdeni ezzel a memória dologgal ...

Összevissza minden bekapcsolásnál más és más összes memóriát,
és más és más hibás memóriát jelez ki ... :(


Gyanítom, hogy valahol itt áll meg a tudományom majd ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.October.28. 13:41:10
Összevissza minden bekapcsolásnál más és más összes memóriát,
és más és más hibás memóriát jelez ki ... :(
A többször tárgyalt fantom rossz RAM (https://enterpriseforever.com/hardver/kezdo-hardver-kerdesek/msg45636/#msg45636), felhúzó ellenállás témakörnek tűnik. Van azon a lapon?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 14:04:31
Nincs, de miért csak most kezdte el a fantom fájást ? Eddig semmi baja nem volt ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.October.28. 15:46:50
Nincs, de miért csak most kezdte el a fantom fájást ? Eddig semmi baja nem volt ...
Nem rákötöttél mindenféle cuccot? Az felborítja az eddigi véletlenszerű egyensúlyt.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 15:52:06
Quote
Nem rákötöttél mindenféle cuccot? Az felborítja az eddigi véletlenszerű egyensúlyt.

Ja, rá. De mostmár leszedtem mindent. Az vissza kéne állítsa, nem ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 20:26:05
Bakker,

Most ugye először semmi baja nem volt a 10 Mhz -es EP alaplapomnak,
aztán ráhekkeltem a PS/2 vezérlőmet, végre el is kezdett működni, gépelni tudtam már vele,

de akkor láttam, hogy mindenféle véletlenszerű mennyiségű és hibásságú ramokat kezd el detektálni a memtest.

Akkor is detektált 1 MB -os nagyságrendben, nagy százalékban hibás ramot,
ha nem is volt ram bővítő dugva már bele,
és lekötöttem róla a teljes PS/2 vezérlőt,
egyetlen drótot se hagytam meg ...

Aztán pár órát szenvedtem egy másik alaplapommal (szintén belső bővítő gondok),
és utána visszaraktam az eredeti 10 MHz -es alaplapba ugyanazt az 512K -s ram bővítőt,
ami előtte is benne volt:

Tökéletesen megy, el se tudom rontani.
Nincsnek fantom fájások ... :)


Na ezt ki érti ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.28. 20:31:26
Mostmár csak azt sajnálom, hogy szétszedtem ... :)

Napokig raktam összefele ... :)

Na mindegy, legközelebb remélem már gyorsabban megy ...

Csak annyira bexartam, hogy ezt az alaplapomat is lezúztam ... :)

Pedig csak szivat ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.October.29. 21:36:17
Zozo, ez a fantom ram dolog, ez csak akkor tud hibát okozni, ha nincs benne ram ?

Tehát ha mondjuk csak az alaplapi 64K van, akkor tud ugye fantom detektálni a 64 K fölé ...

De ha berakok 1M bővítést, a felhúzóellenállások hiánya tud olyankor is hibás memtest -et eredményezni ?


Mert ha igen, akkor még az is lehet, hogy a másik gépemen is
(nem a 10 MHz -esen ami most lett fantomos),

mostmár csak ez a felhúzás hiány okoz hibát attól függően hogy állnak a drótok ?

Vagy az tutkó kontakt hiba lesz ?

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 16:22:16

Na, beszereltem a múltkor a hirtelen, derült égből támadó fantomfájás miatt, ijedtemben kiszerelt PS/2 vezérlőmet.

Íme:

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 16:32:20

Az tisztán látszik, hogy ezt nem most szereltem össze utoljára,
még akkor sem ha egyébként az elektronika nem változna meg.


Az ilyen módon simán beforrasztott PS/2 foglalat ugyanis pont semmit nem ér mechanikailag.
1etlen bedugást sem bírna ki szerintem, ha nem támasztanék neki ellent a bedugáskor kihúzáskor.

Vagyis ilyen módon semmit nem ér. Kell találjak valami mechanikailag stabilabb kiszerelési formát.
Ennél még az is jobb lenne, ha kábelre szerelném a PS/2 foglalatot ... :( Azt legalább tehermentesíteni lehetne ...


Másik a kábelezés ... nem akartam olyan vékony kábelekkel szüttyögni, amit Zozo javasolt,
de így meg fel kellett emeljem 3-5 milimétert még a proto panelt,
mert a két csavar a két szélén nem tudta a panelt párhuzamosan tartani az EP nyákkal,
annyira feszültek alatta a kábelek.

Ha lenne csavar a panel másik oldalán, akkor az párhuzamosra húzta volna,
de jó szorosra van tervezve az EP nyák, nem lehet csak úgy mindenhova furkálni rajta sajnos ...

Szóval így most kicsit magasabb lett a szerelés, mint szerettem volna ...


Szóval át kell ezt még gondolni sajna ... hogy is lenne ez szép meg jó ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 16:45:32
A mechanikai szerelésre tehát majd még visszatérek, de lássuk akkor a működést. Ott sem rózsás a helyzet ...

Beállítottam úgy az AVR programját, hogy a főprogramban csak a PS/2 jel feldolgozásával foglalkozik,
és az EP irányába a billentyűzet mátrix sort csak a megszakításban frissítse, válaszul arra a trigger jelre,
melyet az EP küld neki minden olyan OUT utasítás után, amely a billentyűzet mátrix sorát allítja be.

Még nem írtam meg EP -re a direkt teszt programot (de mindjárt írom azt is),
hanem csak az EXOS billentyűzet kezeléséval teszteltem
(ami egyáltalán nem biztos hogy komoly válaszsebesség igénnyel rendelkezik),

de már itt is elkésik a válasz 10 MHz -en ! :(

Tehát sima EXOS -al gépelve (BASIC,WP,EXDOS interpreter, akármi) 4, 6 ,7.12 MHz -eken jól működik a gépelés,

de 10 MHz -en már másik billentyű mátrix sor -ban érzékeli a lenyomott billentyűt,
vagy éppen 2 különböző sorban is egszerre ...

Space helyett pld. következetesen * karaktert ír, a D betű az neki R betű, és a C betű helyett DC karaktereket lehet EXOS -sal gépelni ... :)


Szóval mindenek előtt valahogy azt kell kipróbáljam, hogy ez hogy módosul (gondolom romlik ... :(),
hogy ha saját, nagy válaszsebességet igénylő beolvasót írok, nem pedig az EXOS beolvasóját tesztelem ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 18:03:04
Na meglett a direkt teszt is. Az eredmény az EXOS -oshoz képest nem is annyira rossz, mint amire gondoltam ...

Így néz ki (EP -n a jó kis PS/2 billentyűzetemmel gépeltem be ... :)) :

Code: [Select]

di

ld c,0b5h
loop:
ld a,0
out (c),a
in a,(c)
cp 255
jp nz,err

ld a,1
out (c),a
in a,(c)
cp 255
jp nz,err

ld a,2
out (c),a
in a,(c)
cp 255
jp nz,err

...
...
...

ld a,7
out (c),a
in a,(c)
cp 192
jp nz,err

...
...
...

ld a,8
out (c),a
in a,(c)
cp 255
jp nz,err

ld a,9
out (c),a
in a,(c)
cp 255
jp nz,err

ld a,10
out (c),a
in a,(c)
cp 255
jp nz,err

...
...
...

ld a,15
out (c),a
in a,(c)
cp 255
jp nz,err

jp loop

err:
ei

ret



(A ... -ök helyén természetesen mind a 16 billentyű mátrix sor szépen végig van írva.)


Ezt úgy használom, hogy ASMON -nal befordítom a memóriába, meghívom G -vel,

de mikor az ENTER -t lenyomtam a híváson, akkor nyomva is tartom,

vagyis az ENTER folyamatosan le van nyomva, és semmi más nincs, amíg a program fut.


A program pedig az általam ismert lehető legyorsabb módszerrel vált mátrix sort és olvas be róla.
A program többi része nem számít, mert a sebesség csak az OUT és IN közötti eltelt időre vonatkozik.
(Ha valaki tud Z80 -on gyorsabb OUT/IN párt, az légyszi szóljon, mert akor nem a leggyorsabbat tesztelem ...)


Vagyis ha az elejétől rajta tartom a kezem az ENTER -en (és semmi máson) ez a program nem fog kilépni,
ha pedig bármi mást lenyomok, vagy az ENTERT felengedem, akkor ez a program azonnal kilép.


A PS/2 illesztőm akkor lenne tökéletes, ha bármilyen frekvencián akármeddig nyomom az ENTERT nem lép ki,
ha pedig felengedem akkor azonnal kilép.


A valóságban ez
- 4 és 6 MHz -en teljesül,
- 7.12 MHz -en néhány másodperc után kilép (hosszú másodpercek elteltével végülis valami úgy jön össze a vezérlőnek, hogy nem tud idejében válaszolni),
- és 10 MHz -en meg el sem tudom indítani a progit, mert már az EXOS billentyűzetolvasás sem megy, de ha elindítom kisebb frekin,
és már mikor fut a programom, akkor kapcsolom fel az EP -t 10 MHz -re, akkor azonnal kilép ... :(
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 18:15:32
Azt kéne tehát megvizsgálni, hogy mikor anno írtam a vezérlőm EP oldalt kezelő megszakításának a kódját,
azt mennyire bénáztam vajon el ...

Az biztos hogy a legnagyobb prioritású megszakításra állítottam, és assembly -ben van,
de kérdés, hogy lehet -e annyira felgyorsítani, hogy működjön 7.12 MHz -en vagy 10 MHz -en is ...

(Maga az AVR ugye 16 MHz -en fut ...)

Így néz ki a megszakítás kódja jelenleg:

Code: [Select]

//
// EP interrupt ...
//

.global INT0_vect
INT0_vect:

push 26

in 26, _SFR_IO_ADDR(SREG)
push 26

in 26, _SFR_IO_ADDR(PINF)
andi 26, 0xf0

push 27
ldi 27, hi8(g_EPBuff)

ld 26, X
out _SFR_IO_ADDR(DDRB), 26 // Ez az a pont, ahol végülis kiíródik a billentyűzet sor,
                           // a többi már csak az újabb megszakítás indulásához számíthat ...

pop 27

pop 26
out _SFR_IO_ADDR(SREG), 26

pop 26

reti

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: pear on 2018.November.01. 19:06:02
I'm sorry to watch you get tired ;)
You can always speed up. To certain limits.
Count the CPUs tacts and check what you can optimize.
Below is the PS/2 service code from EnterMice (MCS'51 assembler) after optimalization:
----
Sajnálom, hogy fáradt vagyok ;)
Mindig felgyorsíthatja. Bizonyos korlátok.
Sorolja fel a CPU-kat, és ellenőrizze, hogy mit tud optimalizálni.
Az alábbiakban az optimalizálás után az EnterMice (MCS'51 assembler) PS/2 szolgáltatáskódja található:
Code: ASM
  1. ;*** PS/2 low layer service ****************************************************
  2.                                         ; tacts limit 60 @12MHz (120 @24MHz)
  3. ps2service:                             ; +4 interrupt system delay + jump
  4.         HDW_INT_START   2               ; +6  using set #2 of GPR
  5.         jb      PS2TxON,ps2host         ; +2
  6. ps2receiver:
  7.         cjne    r7,#11,ps2rx_ctrl2      ; +2  is START bit ?
  8.         clr     PS2RxPE                 ; +1  init parity
  9.         sjmp    ps2rx_dec               ; +2
  10. ps2rx_ctrl2:    
  11.         cjne    r7,#2,ps2rx_ctrl1       ; +2  is parity bit ?
  12.         mov     c,PS2DAT                ; +1  get parity bit
  13.         jnc     ps2rx_dec               ; +2  parity control
  14.         cpl     PS2RxPE                 ; +1  if data_bit=1 then complement
  15.         sjmp    ps2rx_dec               ; +2
  16. ps2rx_ctrl1:
  17.         cjne    r7,#1,ps2rx_data        ; +2  is STOP bit ?
  18.         jb      PS2RxPE,ps2rx_store     ; +2  if not correct parity
  19.         setb    PS2Error                ; +1  then set error flag
  20. ps2rx_store:
  21.         mov     @r0,PS2RxBUF            ; +2  store byte in the buffer
  22.         inc     r0                      ; +1  increment buf ptr
  23.         mov     r7,#11                  ; +1  init bit counter for next service
  24.         sjmp    ps2rx_end               ; +2
  25. ps2rx_data:
  26.         mov     c,PS2DAT                ; +1  get PS/2 DATA bit
  27.         jnc     ps2rx_odd               ; +2  parity control  
  28.         cpl     PS2RxPE                 ; +1  if data_bit=1 then complement
  29. ps2rx_odd:
  30.         mov     a,r5                    ; +1  get buffered data
  31.         rrc     a                       ; +1  shift next data bit
  32.         mov     r5,a                    ; +1  store data
  33. ps2rx_dec:
  34.         dec     r7                      ; +1  decrement bit counter
  35. ps2rx_end:
  36.         jnb     PS2Error,ps2rx_end2     ; +2  if error
  37.         inc     r2                      ; +1  then increment error counter
  38. ps2rx_end2:
  39.         HDW_INT_END                     ; +6 = 27..37 tacts
  40. ;-------------------------------------------------------------------------------
  41. ps2host:                                ; +12 host mode
  42.         cjne    r6,#12,ps2tx_ctrl3      ; +2  is START bit ?
  43.         setb    PS2TxPE                 ; +1  init parity
  44.         sjmp    ps2tx_dec               ; +2  
  45. ps2tx_ctrl3:    
  46.         cjne    r6,#3,ps2tx_ctrl2       ; +2  is parity bit ?
  47.         mov     c,PS2TxPE               ; +1  set parity bit
  48.         sjmp    ps2tx_set               ; +2  
  49. ps2tx_ctrl2:
  50.         cjne    r6,#2,ps2tx_ctrl1       ; +2  is STOP bit ?
  51.         setb    PS2DAT                  ; +1  set STOP bit
  52.         sjmp    ps2tx_dec               ; +2  
  53. ps2tx_ctrl1:
  54.         cjne    r6,#1,ps2tx_data        ; +2  is ACK bit ?
  55.         mov     c,PS2DAT                ; +1  get ACK bit
  56.         mov     PS2Error,c              ; +1  store ACK as error flag
  57.         clr     PS2TxON                 ; +1  disable transmitter
  58.         sjmp    ps2tx_end               ; +2  
  59. ps2tx_data:
  60.         mov     a,r4                    ; +1  get data to send
  61.         rrc     a                       ; +1  shift next bit to send
  62.         mov     r4,a                    ; +1  store rest of data
  63.         jnc     ps2tx_set               ; +2  parity control    
  64.         cpl     PS2TxPE                 ; +1  if 1 then complement
  65. ps2tx_set:
  66.         mov     PS2DAT,c                ; +1  set PS/2 DATA bit
  67. ps2tx_dec:
  68.         dec     r6                      ; +1  decrement bit counter
  69. ps2tx_end:
  70.         jnb     PS2Error,ps2tx_end2     ; +2  if error
  71.         inc     r2                      ; +1  then increment error counter
  72. ps2tx_end2:
  73.         HDW_INT_END                     ; +6 = 27..37 tacts
  74. ;*******************************************************************************
  75.  
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 19:43:40
Quote
I'm sorry to watch you get tired ;)

You got it wrong ... :)

I'm just started ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: pear on 2018.November.01. 19:47:12
OKAY.
I'm silent and I'm watching :D
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.01. 22:18:54

Oké, a 7.12 MHz már megvan, azzal már jól működik.

Most a 10 MHz -ért küzdök ... hátha ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.01. 23:13:31
Az biztos hogy a legnagyobb prioritású megszakításra állítottam, és assembly -ben van,
de kérdés, hogy lehet -e annyira felgyorsítani, hogy működjön 7.12 MHz -en vagy 10 MHz -en is ...

(Maga az AVR ugye 16 MHz -en fut ...)

Optimalizálási lehetőség az van sok. :) Három dolog is eszembe jutott:

Az AVR inicializációs kódját nem láttam, a megszakításod melyik élre van beállítva? Ha jól sejtem (a rajz alapján), a regiszter beíró jelek aktív alacsonyak. A sorszámot tároló tároló :) felfutóélre tárol, azaz az írási ciklus végén jelenik meg a kimenetén a beírt adat. Ha az AVR megszakítása már a lefutóélre indul, azzal lehet nyerni egy kis időt.

Az IT rutinodból azt veszem ki, hogy az "F" port aljára van bekötve a 4 sorkiválasztó vonal. Ha meg tudod azt tenni, hogy a felső 4 lábát az "F" portnak nem használod semmire, akkor állítsd be ezeket kimenetre és kapcsold őket alacsonyra. Így amikor a portot majd beolvasod, a kapott BYTE teteje mindig 0 lesz, nem kell majd maszkolni, azaz kihagyhatod az ANDI-t, -1 utasítás. :)

Azért is jó az AVR mint CPU-mag, mert van neki rengeteg regisztere. Simán meg lehet tenni, hogy kiválasztasz közülük párat, amit csak a megszakítás használ, illetve annyit, hogy a megszakítás mást ne is használjon, csak a kiválasztottakat. Így kihagyható a regiszter-mentés / visszaállítások zöme az IT rutinból. Hardkór változatnak én azt csinálnám, hogy kiválasztanám csak az IT használatára az r26/r27 regiszterpárt. Ez az XL/XH, vagy egésznek az X. A 16 BYTE-nyi billentyűtáblát mondjuk 0x0100..0x010F memóriaterületre raknám, a főprogram valahol az elején beállítaná az XH-t ennek a címnek megfelelően 0x01-re. A megszakítás rutin akkor így nézne ki:

Code: [Select]
  IN   XL,PINF     ;Kiválasztott sor számának beolvasása, 0x00..0x0F
  LD   XL,X        ;Táblázatból felszedve a kiválasztott sor adata
  OUT  DDRB,XL     ;Oszlop-érték beállítása a billentyűzet felé
  RETI

Aztán a megszakítási rutin ennyi is. Azért elég ez, mert egyrészt csak olyan regisztert használ, amit a főprogram nem, másrészt magát a státusz-regisztert sem kell menteni / visszaállítani, mert a fenti utasítások közül semelyik sem módosít egy státusz-bitet sem. Ha az "F" port felső 4 bitje használatban van, akkor a maszkoláshoz kell az ANDI, az viszont bántja a státusz-regisztert, akkor annak a mentése / visszaállítása még kell, de ahhoz is célszerű kinevezni egy csak erre a mentésre használt regisztert, így nem kell vermelni / visszaolvasni, a PUSH/POP az 2-2 órajelciklus.

Ezekkel azért eléggé sok idő nyerhető, viszont az XL/XH regiszterpár lefoglalásával lehet gond; milyen nyelven is programozod azt a tokot? :) Assembly-ben sima liba, de ha az Arduino saját nyelvét használod zömében, az - ha jól tudom - végül is az avr-gcc-vel forgat. Abba jó kérdés, hogy ezt a két regisztert lehet-e lefoglaltnak definiálni, hogy máshol ne használja. (Ugyan ezen regiszterpáron kívül van még kettő, ami így összevonva pointerként használható, de na. :) )

Ha ezen kívül is kellene másik megszakítást használni, az annyiban mindenképpen bonyolítja a szituációt, hogy annak az IT rutinjának egy SEI-vel kellene kezdődnie minimum, de az megnövelné a reakcióidőt mindenképpen, szóval az ellenjavallt. :) De az AVR kódját lehetne nagyon egyszerűnek tartani; úgyis az volt a terved, hogy majd az rPi fogja neki tolni a teendőket. Azt a legegyszerűbb úgy megcsinálni, hogy az AVR-en a sima soros portot, az USART-ot használnád, annak a bemenetére (RxD) az rPi usartjának a kimenetét (TxD) még rá is lehet kötni közvetlenül. Így egy vezetékkel az AVR irányába lehet küldeni bármit. Visszafele irányra valószínűleg sok szükséged nincs is.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 01:14:30
Quote
Az AVR inicializációs kódját nem láttam, a megszakításod melyik élre van beállítva? Ha jól sejtem (a rajz alapján), a regiszter beíró jelek aktív alacsonyak. A sorszámot tároló tároló :) felfutóélre tárol, azaz az írási ciklus végén jelenik meg a kimenetén a beírt adat. Ha az AVR megszakítása már a lefutóélre indul, azzal lehet nyerni egy kis időt.

Ezt az okfejtést sajnos még nem értettem meg,
de az EP oldali megszak az lefutó él érzékenyre van konfigolva.
(Mert annó azt mondták, hogy mikor kész a bill. sor 4 bites címe, akkor ezt egy lefutó él jelzi az 5. dróton.)

Ez most akkor jó így szerinted vagy nem ?

Quote
Hardkór változatnak én azt csinálnám, hogy kiválasztanám csak az IT használatára az r26/r27 regiszterpárt. Ez az XL/XH, vagy egésznek az X. A 16 BYTE-nyi billentyűtáblát mondjuk 0x0100..0x010F memóriaterületre raknám, a főprogram valahol az elején beállítaná az XH-t ennek a címnek megfelelően 0x01-re.

Ez már megtörtént, ettől kezdett el menni a 7.12 MHz. Csak én az Y regiszterrel oldottam meg, mert az X és Z regiszterekhez jobban ragaszkodik az avr-gcc.
(Le lehet azokról is beszélni, de az Y -ról volt a legkönnyebb.)

Quote
azaz kihagyhatod az ANDI-t, -1 utasítás

másrészt magát a státusz-regisztert sem kell menteni / visszaállítani

Na ezen megy most a szívás, mert ehhez a PS/2 data jelet át kellett vakarjam a pf0 -ról (máshova) a pd4 -re,
és ettől vártam volna, hogy akkor kiszehetem a statusz mentést meg az andi -t
(ami összesen -2 órajelciklus lesz, és kész, tehát ettől a 2 órajeltől vagy működni kezd a 10 MHz vagy nem),

de valamiért nem műxik ...

Elromlott az egész ...

Nem értés van ...

Quote
hogy az AVR-en a sima soros portot, az USART-ot használnád, annak a bemenetére (RxD) az rPi usartjának a kimenetét (TxD) még rá is lehet kötni közvetlenül. Így egy vezetékkel az AVR irányába lehet küldeni bármit. Visszafele irányra valószínűleg sok szükséged nincs is.

Nem lesz külön interfész az RPi -nek ...

Az RPi PS/2 -t fog küldeni az Arduino most elkészülő PS/2 bemenetére ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 02:29:16
Hmmm ... nem tudom mi lehet a baj ...

Eddig a D port 4 -es bitje nem volt használva ... most arra kötném a PS/2 data vonalat ...

Lehet hogy a D port 4 -es számú (ötödik) bitjének digitális bemeneti felhasználásához valami kontrol porton le kell tiltani valami magasabb szintű funkciót ? ? ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 13:48:10
Á bakker, ez így eleg gáz !

Azon szívtam idáig, hogy ahhoz hogy szoftveresen máshogy tudjak működni,
ahhoz át kellett forrasszak 1 db drótot egyik lábról a másikra.

Ehhez viszont ugye le kellett szereljem a kontroller lapját az EP alaplapról,
és meg kellett bolygassam a jól összeszorongatott drótokat,
és ettől még vagy 4 másik drót kezdett el kontakthibázni,
vagy konkrétan leszakadni a zsugorcső alatt (ami ugye nem látszik) ...

Pedig esküszöm mindíg mikor felforrasztok egy lábra egy drótot,
utána megrángatom, hogy frankó lett -e, és utána húzom csak rá a zsugorcsövet ...

De ahogy így össze vannak zanzálva, törve a kábelek a felrakásnál, szépen töredeznek is lefele a levételkor ... :(


Na mindegy, megkeresgéltem mi halt le, visszaforrasztgattam,
de valamit csak ki kéne találni erre ...

Hogy csináljam hogy a drótok stabilabbak legyenek ? ! :shock:

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 13:51:36
de az EP oldali megszak az lefutó él érzékenyre van konfigolva.
(Mert annó azt mondták, hogy mikor kész a bill. sor 4 bites címe, akkor ezt egy lefutó él jelzi az 5. dróton.)

Valójában a felfutó él fogja a tárolást elvégezni, akkor kerül ki a 4 vonalra a beírt érték. A lefutás viszont a ciklus elején, egy kicsit előrébb van időben, de mire az AVR kódja a kiolvasáshoz ér, addigra a felfutás is meglesz, ha csak nem túl gyors a Z80. :)

Csak én az Y regiszterrel oldottam meg, mert az X és Z regiszterekhez jobban ragaszkodik az avr-gcc.
(Le lehet azokról is beszélni, de az Y -ról volt a legkönnyebb.)

Ez azért jó hír. Közben ránéztem a Z80 adatlapjára, azért látok érdekességet... :) Az IN r,(C) utasítás a doksi szerint 12 ciklus alatt fut. Az IN A,(n) meg csak 11, ez alapján a valódi címet tartalmazó utasítás gyorsabb, mintha a cím a C regiszterben lenne, és azzal történne az olvasás. (Ugyanez vonatkozik az OUT-ra is.)

(Ha valaki tud Z80 -on gyorsabb OUT/IN párt, az légyszi szóljon, mert akor nem a leggyorsabbat tesztelem ...)

Akkor szólnék, :oops: az IN A,(0b5h) a fentiek szerint gyorsabb, de ez nekem egy kicsit furcsa. Mindkét utasítás 2 BYTE-os, a (C)-s címzésűnél a második BYTE tartalmazza a regiszter számát. A Z80 ezt a BYTE-ot is úgy olvassa be, mintha op-kód lenne? (Tulajdonképpen az is. :) ) Ezt azért valaki megerősíthetné, hogy tényleg így van-e. :-D

Az IN utasítás 11 órajelciklus, de az a komplett végrehajtás, én inkább számolok most 10-zel. A 10 MHz-es Z80 ezt 1 µSec alatt futja meg, ennyi idő alatt 16 órajelciklus fog végrehajtódni az AVR-en. Nem mondanám, hogy rengeteg idő, de a "mini" IT rutin lényegi része 4 alatt megvan, rossz esetben egy 4 ciklusos utasítás szakítódna meg, az eddig 8. A maradék 8 csak elég arra, hogy az AVR oldalán elkezdődjön a végrehajtás, de ezt most nem kerestem ki.

Lehet hogy a D port 4 -es számú (ötödik) bitjének digitális bemeneti felhasználásához valami kontrol porton le kell tiltani valami magasabb szintű funkciót ? ? ?

Milyen µC van ezen a board-on? ATmega32U4? Most nézem az adatlapját (http://ww1.microchip.com/downloads/en/devicedoc/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf)... Ennek az "F" (meg az "E") portja nincs is teljesen kivezetve a tokon kívülre?! Az "F"-nek hiányzik a 2 + 3 bitje. Azt hogyan szeded fel? Persze beköthető helyette a 4 + 5, de akkor a billentyűtábla egy kicsit megkavarodik. :) A PD4 egyrészt timer funkció lehet, ezen kívül meg még analóg bemenet. RESET után egyik sem lesz aktív, a kérdés az, hogy az arduino mit konfigol be induláskor.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 14:02:26
Na, de hogy valami jót is írjak, ne csak mindíg a nyafogást,
majdnem jók vagyunk. Majdnem ...

Ezzel a megszak kóddal:

Code: [Select]

//
// EP interrupt ...
//

.global INT0_vect
INT0_vect:

in 28, _SFR_IO_ADDR(PINF)

ld 28, Y
out _SFR_IO_ADDR(DDRB), 28

reti



már teljesen stabilan lehet 10 MHz -en is gépelni az EXOS -szal
(eddig legalábbis nem vettem észre hibázást,
érdekes volna tudni vajon az EXOS billentyűzet olvasó kódja mennyire válaszidőérzékeny),

és a korábban leírt tesztprogramban sem olyan rossz.

Ugye abban a tesztben akkor szerepelne tökéletesen, ha addig nem lépne ki, amíg nyomom az ENTER -t,
és 10 MHz -en általában 10 másodperc körüli idő után lép ki, ritkábban van hogy 1 másodperc,
és volt már hogy 30 másodpercig is bírta.

Szóval tökéletesnek nem tökéletes.


Ez az AVR megszak dolog úgy van,
hogy ugye nekünk kb 1 us altt kéne a válasz, ami ugye 16 MHz -es AVR -nél 16 darab órajel,

namost a megszakítás kiváltódásától minimum 5 órajel az AVR -nek mire ráugrig a megszak vektorra,
ahol egy további ugrás van a megszak kódra, ami még 3 órajel,
szóval 8 órajel már eltelt, mire elindul a megszak kód,
és ugye az a megszak kód az 4 órajel.

Tehát elvben mi megvagyunk 12 órajel alatt, mégsem tökéletes ...
valahol közbe tud jönni valami keh, és akkor nem lesz idejében válasz ...


Megpróbálom ellenőrizni, hogy mi van a megszakításokkal, ugye párhuzamosan van 2 megszak, plussz a főprogram,
hátha ki tudok okoskodni még valamit, ami megakadályozza hogy az EP megszak teljesítse a 12 órajeles idejét,

mert azt nem nagyon hiszem, hogy ezen a megszakítás kezelési időn még szignifikánsan faraghatnánk lejjebb ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 14:17:54
Quote
Akkor szólnék, :oops: az IN A,(0b5h) a fentiek szerint gyorsabb, de ez nekem egy kicsit furcsa.

Hát ez marha jó ... akkor majd ha azzal ami most van már stabilan megy
(menne, mert most csak kevéssé hiszem hogy fog menni),

akkor kipróbálom majd azzal is.

Quote
Milyen µC van ezen a board-on? ATmega32U4?

Igen.

Quote
Az "F"-nek hiányzik a 2 + 3 bitje. Azt hogyan szeded fel?

Az F portot korábban úgy használtam, hogy az egész portot felhúzott bemenetre állítottam,
és felső négy bitet használtam az EP -től jövő 4 bites bill mátrix sor cím beolvasására,
a 0. biten pedig jött be a PS/2 data vonal.
(A korábbi EP megszakban ez a PS/2 data vonal ((és akármi más az alsó 4 bitről)) volt ANDI -val semlegesítve.)

Most pedig úgy használom, hogy a port felső 4 bitje csak a felhúzott bemenet, az alsó 4 bit az lenullázott kimenet,
és csak a felső 4 bitet használom az EP megszakban, a PS/2 data vonal átkerült a D port 4. bitjére.

Quote
A PD4 egyrészt timer funkció lehet, ezen kívül meg még analóg bemenet. RESET után egyik sem lesz aktív, a kérdés az, hogy az arduino mit konfigol be induláskor.

Végülis nem ez volt a baj, hanem hogy szétszakadtak a kábeleim.
Ugyanúgy lehet használni digitális felhúzott inputnak a D4 -et is, mint eddig bármit amit próbáltam.

Csak ez az állandó kábelszétszakadás megőrjít már ... :evil:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 14:27:45
Most (hogy így csattogok itt a külső billentyűzettel 10 MHz -en :)),
veszem észre hogy milyen jó is ez a 10 MHz ...

Az ember elkezd idegenkedni tőle mikor ez ENTERPRISE felirat furán villog,
meg a billentyű hang sem a megszokott,

de mikor elkezdi használni, és a directory -k tök jó gyorsan jelennek meg,
a lomha ASMON funkciók megtáltosodnak, stb ... :)

Tök jó ! :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 14:40:31
Ez az AVR megszak dolog úgy van,
hogy ugye nekünk kb 1 us altt kéne a válasz, ami ugye 16 MHz -es AVR -nél 16 darab órajel,

namost a megszakítás kiváltódásától minimum 5 órajel az AVR -nek mire ráugrig a megszak vektorra,
ahol egy további ugrás van a megszak kódra, ami még 3 órajel,
szóval 8 órajel már eltelt, mire elindul a megszak kód,
és ugye az a megszak kód az 4 órajel.

Tehát elvben mi megvagyunk 12 órajel alatt, mégsem tökéletes ...

Upsz, erről a plusz ugrásról meg is felejtkeztem. :oops: Ha jól értem az IT rutinod, az INT0-t használod, aminek a belépési címe a $0002, ide kerül most az ugrás. Ha a következő vektort, az INT1-et nem használod (ne használd! :) ), akkor az ugrás helyére, tehát $0002-re közvetlenül odarakhatod a jelenlegi komplett megszakítás rutint, ami összesen 4 utasítás, tehát csak az INT1 ugrásának a helyére lóg rá. Így megspórolod az ugrás 3 órajelét, ami szerintem pont elég.

Megpróbálom ellenőrizni, hogy mi van a megszakításokkal, ugye párhuzamosan van 2 megszak, plussz a főprogram,

Mivel ennyire határeset lett a dolog, attól a másik megszakítástól ideje megszabadulni. :)

Most pedig úgy használom, hogy a port felső 4 bitje csak a felhúzott bemenet, az alsó 4 bit az lenullázott kimenet,
és csak a felső 4 bitet használom az EP megszakban, a PS/2 data vonal átkerült a D port 4. bitjére.

Akkor így a billentyűtábla egy 256 BYTE-os területre van szétszórva, minden 16. BYTE az értékes? Így is jó! :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 15:21:15
Quote
Upsz, erről a plusz ugrásról meg is felejtkeztem. :oops: Ha jól értem az IT rutinod, az INT0-t használod, aminek a belépési címe a $0002, ide kerül most az ugrás. Ha a következő vektort, az INT1-et nem használod (ne használd! :) ), akkor az ugrás helyére, tehát $0002-re közvetlenül odarakhatod a jelenlegi komplett megszakítás rutint, ami összesen 4 utasítás, tehát csak az INT1 ugrásának a helyére lóg rá. Így megspórolod az ugrás 3 órajelét, ami szerintem pont elég.

Ú vazze, na látod ezért jó itt írogatni, előbb utóbb mindíg jön valaki, aki odébblök ...

Magam is gondoltam, hogy a megszak kódot a megszak vektorba kéne tenni direktben,
de mikor láttam hogy a megszak vektorban csak 4 byte van, ami kell neki egy szaros ugráshoz,
akkor láttam, hogy na, ide nem lesz az bepakolva ...

De most hogy mondod, hogy szerinted ez a megszak kód csak a második vektorba lógna bele,
(és a lista file tanúsága szerint valóban csak 8 byte),
valóban tehetem (újabb forrasztás vazze :evil: ) én a PS/2 megszakot akár az INT3 -ra is,
és akkor 12 byte lehet az INT0 -nak ...

Kúlság - faszaság, azzal talán akkor valóban meglesz ...


Quote
Mivel ennyire határeset lett a dolog, attól a másik megszakítástól ideje megszabadulni. :)

Most ezt hogy érted ?

Az 1 dolog, hogy ez EP oldalról jön egy akár 1 MHz -es nagyságú megszakítás, amit villámgyorsan ki kell szolgálni.
De hát jön a PS/2 oldalról is egy (jóval kisebb, általában 10 KHz - 30 KHz esetleg 100 KHz körüli megszak),
amit ha nem is olyan gyorsan, de azért észre kell venni, és kezelni kell ...

Ez még szerintem nem főprogram kategória ... hogy főprogramból pollozzam a PS/2 órajelet ...

Szóval szerintem kell az a második megszakítás is, csak annyi a különbség,
hogy amíg a PS/2 megszakítás kezelő (ami most fog átkerülni INT1 -ről INT3 -ra) egy SEI -vel kezdődik,
addig az EP oldali kezelő nem ad ki SEI -t, hanem csak a RETI fog újra engedélyezni.

Így az INT0 meg fogja tudni szakítani az INT1(3) -et, míg fordítva nem igaz.

Persze vannak ott valami ármányok az AVR megszakítás leírásában,
hogy az elso 5 órajelciklus közben bekövetkező megszakítás priotitásos lesz ahhoz a megszakhoz képest,
akinek az első 5 ciklusa (kiváltódás eleje) fut,
tehát ezek szerint a PS/2 megszak mégis bele tud szakítani az EP megszakba,
ha jól értettem ...

Szal ezeket próbálom még olvasgatni az AVR -nél ...

Mert megszüntetni a PS/2 megszakot szerintem nem nagyon lehetne ...


Quote
Akkor így a billentyűtábla egy 256 BYTE-os területre van szétszórva, minden 16. BYTE az értékes? Így is jó! :)

Ja, mivel minden más portot elszartak valamire ...


A - portot nem is láttam, asse tom létezik -e, nincs belőle kivezetés ...

B -port az egyetlen összefüggő 8 bit, az kell a billentyűzet sornak ...

C- portból 2 bit van, azon is 2 SMD led lóg a lapon gyárilag ...

D -port az teljes, de az alsó 4 bitjére tették a 4 hardver megszakítást, amiből nekem 2 kell, szal ott sem szabad az alsó 4 bit ...

E -portból 2 bitet hagytak csak meg szintén ...

F -porton is csak a felső 4 és az alsó 2 van kivezetve ...


Oszt nincs több port bakker ... Szal maradt a felső bitezés a cím beolvasáshoz.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: szipucsu on 2018.November.02. 15:32:49
10 MHz ... a billentyű hang sem a megszokott
A billentyűhangot szerintem meg lehet csinálni mélyebbre.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 15:56:09
Az 1 dolog, hogy ez EP oldalról jön egy akár 1 MHz -es nagyságú megszakítás, amit villámgyorsan ki kell szolgálni.
De hát jön a PS/2 oldalról is egy (jóval kisebb, általában 10 KHz - 30 KHz esetleg 100 KHz körüli megszak),
amit ha nem is olyan gyorsan, de azért észre kell venni, és kezelni kell ...

Ez még szerintem nem főprogram kategória ... hogy főprogramból pollozzam a PS/2 órajelet ...

Pedig... :) Ha a másik megszakítás előbb esik be, amire ha ritkán is, de lesz alkalom, akkor az megnyújtja az EP-s megszakítás reakcióidejét. Egyrészt a fent említett +5 órajelciklussal, amihez még hozzájön az, ameddig a SEI érvényre is jut. Az összesen akár lehet vagy 8 órajel... :oops: Még akkor is, ha a másik IT rutinnal is eljátszod azt, hogy a SEI-t (vagy a komplett rutint) ugyanúgy a belépési pontra rakod.

Így az INT0 meg fogja tudni szakítani az INT1(3) -et, míg fordítva nem igaz.

Ez még jó is lenne, ha azt a +8 órajelciklust elviselné az EP-re reagálás. Elviseli? ;) A programod amúgy most mit is csinál? Egyrészt reagál az EP-re, másrészt kezeli a PS/2 portot. Ezen kívül? A PS/2 kezelésén kívül a kapott adatokkal annyira kevés feladat van, hogy az simán belefér a bill. felől jövő bitek kezelése közé időben. Ha csak nem akarsz ott is valami nagyot trükközni.

A portot nem is láttam, asse tom létezik -e, nincs belőle kivezetés ...
B -port az egyetlen összefüggő 8 bit, az kell a billentyűzet sornak ...
C- portból 2 bit van, azon is 2 SMD led lóg a lapon gyárilag ...
D -port az teljes, de az alsó 4 bitjére tették a 4 hardver megszakítást, amiből nekem 2 kell, szal ott sem szabad az alsó 4 bit ...
E -portból 2 bitet hagytak csak meg szintén ...
F -porton is csak a felső 4 és az alsó 2 van kivezetve ...

"A" port ezen a tokon nincs. A "B" teljes, a "C"-ből csak 2 van kivezetve, a "D" teljes, az "E"-ből 2, az "F"-ből meg 6 van. Bár, ahogy a blokkvázlatot nézem, az "F"-nek van köze a "D"-hez meg a "B"-hez is, de hogy mi, azt most nincs türelmem kikeresni. :) Ezért is hátrány ezeknek a "kész" paneleknek a használata, ha valamire valamelyik láb el van használva, akkor így járás van.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 16:31:07
Quote
A programod amúgy most mit is csinál?

Feldolgozza a PS/2 bejövő bitjeit, és beállítja az EP billentyű mátrix -ot, hogy az EP megszakítás vihesse.

(Ha sebességileg egyben leszek, akkor még majd azt is meg kell oldania, hogy frissítse a kimeneti billentyűzet sort akkor is,
ha EP -megszak épp nem érkezett, de megváltozott az épp aktuális sor.)

Mindezt úgy kéne csinálja, hogy ne maradjon le soha egy PS/2 bitről sem ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 16:33:10
És ami még nehezebb, valahogy meg kéne oldani, hogy egy beérkező EP megszak után a főprogram ne frissítse vissza a régebbi billentyű sort,
amit az EP megszak épp megváltoztatott ...

És ezt persze lehetőleg megszakítás letiltás nélkül ... nem triviális ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 16:34:34
De egyenlőre sajnos még azzal is meg vagyok lőve,
hogy a megszak vektort módosítsam ...

Ugyanis azt nem lehet runtime, mert a program memóriában van ...

Csak compile time lehet, az AVR-GCC -ben meg mintha nem nagyon gondoltak volna erre ...
(Még nem találtam meg ...)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.November.02. 17:58:09
De egyenlőre sajnos még azzal is meg vagyok lőve,
hogy a megszak vektort módosítsam ...

Ugyanis azt nem lehet runtime, mert a program memóriában van ...

Csak compile time lehet, az AVR-GCC -ben meg mintha nem nagyon gondoltak volna erre ...
(Még nem találtam meg ...)
Azt nem azért nem lehet, mert Harvard architektúrájú az AVR?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 18:15:19
Quote
Azt nem azért nem lehet, mert Harvard architektúrájú az AVR?

Gőzöm nincs mi az ...

Lényeg hogy van ez a megszakítás vektor, ami compile time áll elő,
pontosabban linking time, és ott van az AVR -be feltöltendő "bináris" (HEX) állomány legelején ...

Az AVR flash -elése meg csak kívülről történhet, nem tudja át flash -elni magát, azt írták.

Magyarul nem fogod a kódterületet módosítgatni.


Vagyis nekem fordítási időben kell megoldanom, de úgy tűnik erre nem adtak kiskaput, hanem csak az std C library módosításával érhetném el,
hogy ne jmp -k legyenek a megszak vektorban, hanem tetszőleges kód.


Gondoltam kézzel ráhekkelem a HEX file -ra, de abban meg soronként checksum van ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 18:29:28
Na de sebaj, a neten van Intel hex checksum calculator, úgyhogy megoldottam azzal a kézzel hekkelést ... :)

Szóval most van a rendes kód, ami még ugrótáblával fordul le,
az is működik, csak kicsit lassabb ugye ...

És ha akarok egy gyors build -et, akkor feltöltés előtt a hex file első sorában felülmásolok 8 bájtot,
és a sor végén átírom a checksum -ot ... :)

Na és mit kapunk ebből ? :)


:smt041 :smt026 :ds_icon_cheesygrin:   Megy a cucc 10 MHz -en !   :smt041 :smt026 :ds_icon_cheesygrin:


(Legalábbis eddig még nem lépett ki az ENTER -es tesztem, akármeddig is nyomtam ...
éjszakára lehet rateszek valamit hogy nyomja reggelig ... :))


balagesz a kiraly !
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 19:43:05
Na, összeszereltem megint, imádkozva hogy még utána is működjön,
és ne szakítsak az összeszerelés végére szét mindent benne.

De működött hála istennek:



Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 19:45:22
Úgyhogy most ha minden igaz jön végre az a fázis,
amiben végre nem lesz szerelés,
hanem csak az AVR kódját kalapálom össze hogy minden klappoljon rajta.

Eddig ugye a sebességen vergődtem, az úgy tűnik, mostanra jó lett,
még 10 MHz -es Z80 -nál is:

[attach=1]


Nem lép ki ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 20:58:32
Na jó,

Az elmúlt 1 órában rajta volt a forrasztó ón az ENTER -en, és nem lépett ki ... :)
(Csak mikor most levettem róla ... :))

Majd éjszakára még rajta hagyom, de még ha ki is lépne, az se nagyon számítana talán (legalábbis nekem) ...


Úgy értem, nagyságrendileg másodpercenként 1 milliószor kérte most el az EP a billentyűsorokat az AVR -től,
egy órán keresztül, és egyszer sem hibázott ... ezt szerintem nevezhetjük már egy jó hiba aránynak ... :)


Most még belehekkelem, hogy főprogramban is frissüljön a billentyűzet sor,
meg megpróbálok kitalálni valami jó alapértelmezett billentyűzet konfigurációt
(ugye itt beégetett billentyűzet összerendelés van, az nincs megoldva,
hogy EP oldalról, mondjuk file -ból lehessen konfigurálni a vezérlőt,
csak flash -eléssel, USB porton keresztül lehet módosítani),

és aztán kész is van ... :)


Mehetek Linux -ra mindenféle HID eszközöket olvasni,
azokat összemixelni valamiféle nagy globális virtuális HID eszközzé,
és PS/2 kimenetet valósítani meg neki GPIO -n keresztül.

Hardveresen még nem tudom összerakni,
mert a jelszint konverterek az RPi és a PS/2 bemenet közé még nem érkeztek meg,

de hát nem lesz az sem öt perc, míg a fenti program előáll ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 21:05:08
És most üt meg a guta ... :smt010 :smt011 :smt013


Rájöttem hogy megint szedhetem szét az egész cuccot ...

Ugyanis az előbb szó volt ugyan róla, hogy 12 bajtos helyet hagyok ki az EP megszakítás kódjanak az interrupt vektor táblában,
de aztán úgy gondoltam, mivel úgyis csak 8 bájt, elég lesz neki a 8 bájt hely is, és ezért az INT1 -ről csak INT2 -re költöztettem át a drótot ...

De most jövök rá, hogy a főprogram és EP megszakítás szinkronizálásához kéne az EP megszaknak egy flag -et állítania,
miután kiírta a módosított billentyűzet sort ... amire a főprogram tudna figyelni ...

De ehhez most nincs helyem ... :) Ehhez át kell költözni az INT2 -nek az INT3 -ra ... :evil:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 21:15:40
No, jó hírek! :)

És most üt meg a guta ... :smt010 :smt011 :smt013

Még mielőtt szétbombázod... :) Megmaradt végül a PS/2 IT-d is? Mert ha azt a késleltetést elviseli, akkor talán ennyi lenne a főprogramos frissítés:

Code: [Select]
  CLI
  IN   YL,PINF
  LD   YL,Y
  OUT  DDRB,YL
  SEI

Ezt a rutint minden táblázatfrissítés után lefuttatod, akkor kb. jó is lesz. Ha nem, akkor van értelme tovább gondolkozni az algoritmuson.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 21:44:28
Quote
Ezt a rutint minden táblázatfrissítés után lefuttatod

Hát igen ... azt a ronda CLI/SEI párost akartam volna a flag -gel kiküszöbölni ...

Mondjuk az sem lett volna 100% -os, mert hiába vizsgáltam volna a főprogramban a flag -et
közvetlenül a főprogramban lévő kiírás előtti utasításban,
az ugrás és a kiírás között elvben lehettet volna EP megszakítás ...
De azért az szerintem elég ritka lett volna,
hogy emiatt a főprogram mégis visszaír korábbi, már érvénytelen sort ...

A letiltogatós módszerhez nem kell a flag, valóban,
de akkor meg be van blokkolva az EP megszakítás ...

Fene tudja melyik ujjamba harapjak ... :)


Na kipróbálom ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 22:04:31
Érdekes eredmény ...

Ha beteszem a letiltogatós verziójú főprogramos frissítést,
és nem teszem bele az interrupt vektor táblázat hekkelést,
hanem hagyom az ugrást benne,

akkor (gépelni ugyan lehet EXOS -sal),
de az ENTER -es teszt programom azonnal kivágja, hogy ez sz**.

Tehát ez sokkal rosszabb helyzet, mintha nem lenne benne a főprogramban a frissítés.


De ha berakom a főprogramos frissítés mellé az interrupt vektor hekkelést is
(ami ugye elvben csak 3 szaros órajel),

akkor viszont simán megy az ENTER -es teszt, nem tér vissza ...


Szóval interrupt vektor hekkeléssel meg mintha eszre sem venné ...


Ki érti ezt ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 22:06:59

Valamint szerintem azon érdemes volna elgondolkodni, hogy kell -e egyáltalán az a letiltogatás oda ...

Lehet hogy a gyakorlatban letiltogatás nélkül is (csak a frissítéssel) elég jó eredmény lenne,
nem blokkolva az EP oldali megszakítást ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 22:12:23
Hmmm ... most megrendült a hitem az ENTER -es tesztem tökéletességében ...

Ugye most az ENTER -es tesztet nem köpi ki,

de ahogy a BASIC képernyőn gépelgetek, ill. mászkálok,

ilyen szemét karaktereket hagyogat / ír néha ...


Francba ...


Mondjuk ezt eddig nem csinálta, a főprogramtól lesz, csak akkor ezek szerint az ENTER teszt nem fed le minden szitut ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 22:14:36
Kell az a tiltás, mert ha a 4 bit felolvasása után esik be egy megszakítás, akkor miután visszatér belőle, még az előző állapot alapján fogja a főprogram frissíteni a kimeneti 8 bitet. De lehet hogy ez így már ismét lassú lesz, akkor valami egyéb megoldást kell nézni a frissítésre. Még gondolkozok.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 22:49:58
Quote
Kell az a tiltás,

Igazad van ...

Az előbbi kalamajka úgy tűnik csak azért volt, mert

- kiszedtem a tiltást ...
- és ráadásul továbbra is a főprogramban is az Y regisztert használtam (de átjavítva X -re is volt hibázás, csak kevesebb) ...


Szóval mégiscsak biztos teszt az ENTER -es teszt,
és az eddigi egyetlen stabil módszer ha van megszakítás letiltás a főprogramban lévő frissítéskor.


És akkor lehet, hogy a flag -ezős módszerrel is rossz lenne egyébként ...


Úgy értem a mostani kódban is csak 1 utasitás van a beolvasás és a kiírás között,
ott 2 helyen jöhet EP oldali megszakítás,

a tesztelős verzióban ez csak 1 hely lenne (mert nem lenne közte utasítás), de az az 1 hely az pont fele a 2 -nek ... :)

Szal az sem volna jó ...


Úgy tűnik teljesen biztos módszer kell,
hogy a főprogram soha ne ronthassa el semmilyen körülmények között
az EP oldali megszakítás által már elvégzetteket ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 22:57:58
De a letiltással együtt teljesen stabilnak tűnik ...

Gépelés is, ENTER teszt is ...


Csak sajnálom rá az időt ... elméletben ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.02. 23:08:45
Csak sajnálom rá az időt ... elméletben ... :)

:-D A tesztedet átírtad az IN A,(0b5h)-s verzióra? (Az OUT utasítás nem számít.)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 23:22:26
Quote
:-D A tesztedet átírtad az IN A,(0b5h)-s verzióra? (Az OUT utasítás nem számít.)

Nem még ... :oops:

De csak nem abba halunk már bele ...

(Most billentyűzeteket tesztelek, de aztán csinálok olyan verziót is az ENTER tesztből ...)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 23:36:37

Na, Zozónak további megerősítés a sebességgel kapcsolatban.


Végigpróbáltam 4 teljesen különböző PS/2 billentyűzetet, 10 MHz Z80 frekivel, BAM megademóval.
A színuszos résszel, ahol a gyors menű van.

Azon múlik, hogy lehet -e egyet lépni a menüben vagy sem, hogy melyik billentyűzettel csinálom.

Ha elég nagy PS/2 clock frekin nyomja a billentyű az anyagot (egy ilyen PS/2 billentyűzetem van most csak),
akkor "simán" lépkedsz egyesével a menüben.
(Azért van az idézőjel, mert olyan rövid ideig nyomni a gombot, az már nem természetes. Az már pöckölgetés.)
De ha te a megfelelően gyors billentyűzeten pöckölgetsz, az pöckölgetés lesz (tud lenni) az EP oldalon is.

A másik három billentyűvel viszont (egyiken sem mértem ki a PS/2 clock frekit) ha megfeszülsz sem tudsz csak 1 -et lépni.
Akármennyire is pöckölöd, azokkal kettőt lép. (Ezek régi fajta PS/2 billentyűzetek, a gyors fajta, az egy újabb típus.)


Én most vettem pár ilyen modern mechanikus billentyűzetet, ezeknek "atomnagy" frekijüknek kell lenniük,
de ezek USB -sek, szóval majd csak akkor tudom kipróbálni őket, ha meglesz az RPi -s PS/2 kimenet,
ahol majd 100 KHz -el tolom a szószt ... Ott azt várom, hogy majd mindegyik pöccre megy ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 23:42:38
Maga a PS/2 dekódolás meg úgy néz ki körülbelül "jó" lett.

A 4 kipróbált billentyűzet teljesen különböző nyelv és layout, van közte ISO es ANSI is.

Jól működött mindegyikkel (ami persze nem jelenti hogy 100 -ból nem lesz 20 amivel nem okés),
annyi a megfigyelés, hogy az ANSI layout -oknál ahol ugye nincs a "Z" mellett bal oldalon a "\" gomb,
ott nem tudsz gépelni "\" -t.

Ezt úgy lehet kiküszöbölni, hogy mivel EP -n az "1" gomb mellett balrol az "ESC" van,
de az "ESC" szerepét PC billentyűzeten átveszi a funkció sorban lévő "ESC",
ezért az "1" gomb mellett balról lévő gombot be kell állítsam az EP "\" gombjára
a normális "\" gombbal együtt.

Vagyis ha ANSI PC layout van, akkor a "\" gomb az "1" -es mellett lesz, nem a helyén (mert fizikailag ott nincs olyan gomb),
és normál ISO layout -oknál meg mindkét helyen lesz "\".

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.02. 23:55:38
Akkor most a 10 MHz -es EP -men a PS/2 -es billentyűzetemmel átírom a tesztkódot direkt címekre ... :ds_icon_cheesygrin: :ds_icon_cheesygrin: :ds_icon_cheesygrin:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 00:20:54
Quote
:-D A tesztedet átírtad az IN A,(0b5h)-s verzióra? (Az OUT utasítás nem számít.)

Megírtam mind a 4 kombinációt, és végigteszteltem mind a (maradék) 3 kombinációt ...

Mindegyikben jó. :smt045 :smt045 :smt045
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 01:12:55
Na, belehekkeltem azt a hianyzó billentyű mappingot is,

és azt hiszem, hogy most, hogy már minden klappol,

itt volna az ideje, ha egy kicsit beleolvasnék a PS/2 specifikációba ... :)


Ki tudja, hátha írnak abban is valami érdekeset a PS/2 szabványról ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 01:54:20
Na átolvastam a PS/2 specifikációt.

És megértettem, valójában miért is működik a kontrollerem "jól",
anélkül hogy valójában implementáltam volna az egész PS/2 protokolt ...

Először is én nem kezdeményezek kommunikációt az eszközzel,
csak elveszem tőle, amit ő ad, én nem osztogatok neki semmilyen parancsot.

Ezek a PS/2 eszközök (amelyik a szabvány szerint megy) alapvetően 3 fajta scan kód készlettel működnek,
és az alapértelmezett a 2. számú, én pedig arra írtam meg az értelmezőt.
Ha valamelyik billentyű ettől eltér, én nem állok neki veszekedni vele, átállítgatni, könyörögni neki,
akkor nem fog működni és kész. :)

Repeat rate -et nem állítok be, nekem igazából nem is kéne az ismétlés,
az oprendszerek különben is függetlenedtek már a billentyűkbe épített repeat rate paraméterektől,
ahogy az EXOS -nak is saját van.
Az alapértelmezett repeat rate hálistennek csak olyan 10X küld másodpercenként
(persze ha folyamatosan nyomnak 50 billentyűt, az ezért elég sok, ezt majd tesztelnem kell, hogy mit csinálok rá,
van -e sebességem kezelni ... :shock: ),
nem volna rossz végülis kikapcsolni, de egyenlőre hadd küldje, én csak eldobom és kész.

A PS/2 clock frekit még érdemes lenne állítgatni,
de korábbi hitemmel ellentétben azt nem lehet (szabvány szerint),
arról az eszköz maga dönthet, a host csak használja.

Egyszóval engem nem érdekel, ha ő elromlik (ne romoljon el),
nem érdekel semmi, csak a 2. kódtábla szerinti billentyű kódok.

Én meg nem küldök neki semmi extrát, nem kérek tőle semmi extrát.


Hát ezért működök ...

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 02:19:05
Jól van, úgy tűnik, hogy ennél a billentyűzetnél nem allergiás a sok billentyű egyszerre lenyomva tartására sem.

Elindítottam az EP -n egy olyan programot, ami olyan mint az ENTER -es teszt program,
csak bármit is olvas vissza a billentyűzet portról, nem lép ki a loop -ból, csak olvassa a következő sort.
(Mivel Z80 megszakítáasok le vannak tiltva, EP meleg reset -tel állítom le a PS/2 billentyűzetről.)

Ez tehát beterheli a vezérlőt az EP oldali megszakítással,
én pedig párhuzamosan rátenyerelek az összes billentyűre, amit csak elérek,
és nyomva tartom őket. (Reset billentyűket kivéve persze ...)

Ekkor a PS/2 billentyű is küldi az összes billentyűjét a vezérlőnek repeat rate -tel ismételve.

Nem tellett be a puffere, nem akadt ki, nem esett ki a szinkronból,
mikor megnyomom a reset billentyűt, korrektül melegreszeteli az EP -t ... :)


Még egy dolog azért lehet ... elképzelhető hogy ez nem egy N key rollover keyboard ...

PC billentyűzeteknél gyakori, hogy egyszerre csak néhány billentyűlenyomást tart nyilván párhuzamosan.
Ha ez is ilyen, akkor hiába tenyerelgetek, csak 3-6 max. 10 billentyűnek küldi az ismétléseit.

Na majd ha lesz az RPi -s PS/2 kimenet ... annyi billentyűt küldök át akkora frekvenciával,
amit csak akarok ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 03:25:38
Na, ha valaki neadjisten úgy ébredne fel egy reggel,
hogy teljesen elment az esze,
és ő pedig PS/2 billentyűzetekkel akar EP -n gépelni,
az a következőket teheti:


1,

Valahonnan leakaszt egy Arduino Micro nevű AVR mikrovezérlő kártyát:

https://store.arduino.cc/arduino-micro

vagy annak kínai klónját nagyon olcsón (már rendeltem párat, de még nem teszteltem őket) :

https://www.ebay.com/itm/Arduino-Micro-ATmega32u4-5V-16MHZ-for-Arduino-Replace-Pro-Mini-Leonardo-R3-Nano/263218903608?hash=item3d4911ba38:g:ia8AAOSwzpFa4AMP:rk:13:pf:0


Bármelyiket is veszi az ember, fontos, hogy az 5V -os verzió legyen, ne pedig a 3.3V -os.

2,

Valahonnan rittyent az ember magának egy Linux rendszert, akár virtuális gépen, akár valami kütyün,
de én komoly mondom hallottam már olyan elvetemültekről, akik a Linux -ot natívban is rakják desktop vasakra,
de én ettől elhatárolódom kérem ... :)

Ha valaki végképp nem akar magának egy szütyöri kis Linux -ot se rittyenteni,
az írjon magának bárhol máshol build script -eket, mert én csak a Linux -osakat írogatom.

3,

Pakolja fel a Linuxra az AVR Libc nevű dolgot:

https://www.nongnu.org/avr-libc/

A vonatkozó csomag menedzselőkkel fel lehet rakni, nem kell a weboldalrol semmit szöszölni.
Ennek majd biztos lesznek dependenciái, már nem emlékszem miket húz be, AVR fordítót, ilyesmit.

4,

Futtassa le a csatolmányban felrakot build script -et, az készít neki egy .hex állományt,
amit a szintén mellékelt flash script -el fel tud tölteni USB -n az Arduino -jára.

4.1,
Ha valaki 10 MHz -es EP -n is használni akarja a PS/2 vezérlőt,
akkor a build után, de még a flash előtt a .hex állományt meg kell hekkelni úgy,
hogy az EP oldali megszakítás kódja legyen bemásolva az interrupt vektor táblába.
(Ez a .hex állomány első sorában lesz ... :))

4.2,
(De akinek egyébként derogál ez az egész fordítgatási bohózat,
az használhatja a csomagban található .hex állományt,
ami már meg van patch -elve 10 MHz -re is. :))

5,

Kötögesse össze az Arduino megfelelő lábait az EP alaplap
és a PS/2 anya csatlakozó megfelelő pontjaival.
(Aki nem szereti a forráskódot, annak van egy wiring.txt is,
de ahhoz is kelleni fog némi türelem ... :))

Itt van hozzá egy rajz is:

[attach=1]

6,

Csatlakoztatni egy PS/2 -es billentyűt a PS/2 anyához,
és bekapcsolni az EP -t.


És a progi:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 03:44:11

Pár helyre odaraktam az Arduino Micro klón lapot méretarány végett.

Szerintem ezt egy ügyes zsinórozó és pákász simán elrejti belülre, a gép háza alá is,
nem kell feltétlenül egy böhöm nagy konzolra kiszerelni, mint ahogy én csináltam most.

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 12:22:02
Na, ment egész éjjel az ENTER -es teszt.

Nem lépett ki.

Csak mikor reggel levettem róla a súlyt.

Ezt is vártuk.

10 MHz Z80, főprogramban is frissítő verzió.


Csuhajj. Indulhat az RPi oldali szoftver gyártás ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 18:34:07
Jól van, egyenlőre úgy tűnik, hogy ez a HID HUB szoftver linuxra eléggé adja magát ...

Pikpakk meglesz a szoftveres része az RPi input HUB eszköznek,
és az a 3 drótos GPIO kezelés sem lehet komoly feladat ...

Pikpakk lesz itt USB mechanikus meg bluetooth billentyűzet kezelés ...

Csuhajj. :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.03. 20:46:49
Megírtam mind a 4 kombinációt, és végigteszteltem mind a (maradék) 3 kombinációt ...
Mindegyikben jó. :smt045 :smt045 :smt045

Na, ez jó hír! Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést. (Legalábbis azt hiszem... :) ) A lényeg: kellene még egy, csak az IT rutin számára lefoglalt regiszter. :-D Ennek semmi speciális képesség nem kell, simán jó mondjuk az R2..R15 közül bármelyik, én most az R2-t kiválasztom önkényesen. Ha ez megvan, akkor a megszakítási rutin ilyen lenne:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2
  RETI

Tehát az IT rutin hossza nem változik, csak az YL-be felolvasott 4 bitet nem rontja el, hanem az R2-be olvassa be a kimeneti portra valót, majd ezekben a regiszterekben ezek bent is maradnak. Ez fontos! :) A főprogramban a port frissítése meg így néz ki:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2

Na most. Ezt a 3 utasítást akármelyik pozícióban megszakítja az EP-s portírás IRQ-ja, akkor "csak" annyi történik, hogy az IT rutinban a használt regiszterek frissítik az ebben a rutinban használt regisztereket, szóval hiába másik sort kezd el a főprogram frissíteni, a közbe beeső IT módosítja a főprogram regisztereit is, azaz az itteni OUT mindig az aktuális sort fogja beállítani. Ha jól sakkozok... :-D

Ez tehát beterheli a vezérlőt az EP oldali megszakítással,
én pedig párhuzamosan rátenyerelek az összes billentyűre, amit csak elérek,
és nyomva tartom őket. (Reset billentyűket kivéve persze ...)

Ekkor a PS/2 billentyű is küldi az összes billentyűjét a vezérlőnek repeat rate -tel ismételve.

Az én régi emlékeim erről olyanok, hogy ha egyszerre sok billentyűt nyomsz le, akkor nyilván elküldi a billentyűzet az összes lenyomott gomb (MAKE) kódját. De ismételni csak a legutoljára kiküldött kódot fogja, nem az összeset. Sőt: ha egy előzőleg kiküldött billentyűt közben felengedsz, akkor kiküldi annak a felengedési (BREAK) kódját, de az ismétlést ettől abba is hagyja. Persze változhatott a spec, a tévedés jogát fenntartom, stb...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 21:01:24
Quote
Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést.

Basszus, ez marha jó ... közös, dedikált regiszterbe olvasni be a billentyűzet sort ... hát persze ... beszarás ... :smt038

:bow: :bow: :bow:

Már csinálom is ... :)

Quote
Az én régi emlékeim erről olyanok, hogy ha egyszerre sok billentyűt nyomsz le, akkor nyilván elküldi a billentyűzet az összes lenyomott gomb (MAKE) kódját. De ismételni csak a legutoljára kiküldött kódot fogja, nem az összeset. Sőt: ha egy előzőleg kiküldött billentyűt közben felengedsz, akkor kiküldi annak a felengedési (BREAK) kódját, de az ismétlést ettől abba is hagyja. Persze változhatott a spec, a tévedés jogát fenntartom, stb...

- Az összeset csak akkor küldi el, ha "N key rollover" -es, a legtöbb modern billentyű csak 3-10 key rollover, főleg az USB -sek, de PS/2 is ...

- Hogy csak az utolsót ismételné ... annak meg mi értelme lenne ? Ha N van lenyomva, ismételni is N -et kellene ...
De ha mégse, az csak jó nekem. Az ismétlés csak árt ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 21:19:41
Quote
Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést.

Basszus ez nagyon jó megoldás ... ahogy 2 szinten is működik ...

Ha az IN után jön a megszakítás, akkor csak lecserél(het)i a sor címet másra, de a főprogram attól jól folytatja,
ha pedig a bill. sor beolvasás után (vagy mindkét helyen! :)) jön a megszak, akkor meg a direkt sor értéket cseréli le,
de attól a főprogram jól megy tovább ... marha jó ...


Keresztül megy a megszak a főprogramon, akár kétszer, úgy hogy a főprogram arról mit sem tud,
de attól a főprogram jól megy tovább (és persze regiszter mentés nélkül) ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.03. 21:36:56
Okés, gyakorlatban is működni tűnik ! :)

Éjszaka majd tesztelem ENTER -essel,
meg így a gyakorlatban állandóan 10 MHz -en vagyok,

ha nem tapasztalok bajt, akkor felrakom az új verziót.

(És mint korábban is: balagesz a király!)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: balagesz on 2018.November.03. 21:55:05
- Az összeset csak akkor küldi el, ha "N key rollover" -es, a legtöbb modern billentyű csak 3-10 key rollover, főleg az USB -sek, de PS/2 is ...

Persze, csak ezt nem akartam belekeverni.

- Hogy csak az utolsót ismételné ... annak meg mi értelme lenne ? Ha N van lenyomva, ismételni is N -et kellene ...

Mi értelme? Pont annyi, mint a billentyűzet felől az ismétlésnek magának: semmi. :-D Ez csak a klasszikus pécé, ahol "miért ne" alapon el vannak bonyolítva bizonyos dolgok. Mint fentebb írtad: ezt az ismétlés témát célszerű az OS-nek kezelni (és persze kezeli is), a periféria csak akkor mondja hogy mi van, ha változott valami.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 01:53:29
Na, még nem találtam ki teljesen, hogy hogyan fog működni,
de szerintem összehozható lesz az, hogy ne kelljen EP témájú
(és persze leginkább EP layout -ú) billentyűzet (kupakokat) készít(tes)sek ...


Ugyanis oké, hogy az RPi -n futó HID HUB program már mindenféle billentyűzetet kezelni fog,
pld. USA mechanikus USB billentyűzetet, vagy HUN Apple Bluetooth billentyűzetet,

de ezek közül egyik sem EP layout, sőt,
szerintem az EP billentyűzete az nem is egy ma szabványos layout.

Ezért kellene csináljak az előbbi billentyűzetekből EP layout (közeli) billentyűzeteket.

Ezt el lehetne érni persze úgy is, hogy átmatricázom vagy filccel átrajzolom pár billentyűjüket,
meg lehetne egyéb ezeknél kifinomultabb és nehézkesebb módon csinálni layout -ban és témában EP közelibb verziót.


De én inkább eleresztem a téma dolgot (arra ott a síma dobozolt EP ... :)), és a layout dolgot pedig visszafelé oldom meg.


Nem a billentyűket faragom EP layout -ra, hanem az RPi - n futó HID HUB programot tanítom meg karakterkód szintű átkódolásra.


Magyarul azt fogom elérni (remélem ... :)), hogy ott lesz az RPi -re rádugva
a fenti két egymástól és EP -től is teljesen különböző layout -ú billentyűzet,
de én bármelyiken is gépelem be pld. a * karaktert, az az EP -n is egy * karaktert fog jelenteni.
(Pedig a * karakter ugye HUN billentyűzeten egy jobbaltos karakter, USA billencsen shift + 8, EP -n meg shift + pontosvessző,
és mindharom teljesen különböző fizikai billentyűn van.)

Mindezt pedig úgy, hogy játékoknál az sem fog elromlani (99.9% -ban persze), hogy simán együtt nyomva működnek a fizikai billentyűk,
és azok a billentyűk (vagy hozzárendeltjük) amiket EP -n is nyomnál ... :)

Természetesen nem lesz 100% -os ez az "intuitív mód" vagy "inteligens mód", ezért lesz lehetőség a hagyományos 1:1 billentyűs hozzárendeléshez is,
amit amolyan fallback, ha minden kötél szakad esetben egyetlen (a PC billentyűzeteken jobb felső sarokban lévő billentyű lenyomásával) lehet majd ki/be kapcsolni.


Összefoglalva:

- nem kell a billentyűzeteket átalakítsam EP layout -ra,
- gépelhetek rajtuk úgy, ahogy az adott billentyűzeten PC -n gépelnék,
- mindez 99.9% -ban nem fogja elrontani az EP programok és játékok
billentyűzetolvasásának működését (azok is működni fognak),
- de ha valahova mégsem lenne jó, akkor egyetlen gombbal átválthatok a hagyományos 1 PC billentyű -> 1 EP billentyű hozzárendelésre


Akkor viszont ha ezt jól gondolom, és ez így tényleg menni fog,
akkor az  RPi HID HUB összepakolása után akár hozzá is láthatok a játékíráshoz,
ha a 10 MHz -es játékkoncepció megmarad ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 02:08:00
Ha kész a HID HUB program, azt is könnyen meg fogom tudni csinálni,

- hogy a program autostarttal elinduljon RPi bekapcsolásakor,
- hogy egyéb nem használt billentyűkről, per billentyűzet válthassam a layout -ot a billentyűzetről (nem kell hozzá GUI),
- meg hogy lekapcsoltathassam az RPi -t szintén billentyűzetről.

Tehát maga az RPi nem is kell monitorra dugva legyen, hogy működhessen ilyen HID HUB eszközként ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 02:43:22
Jajj, alig bírom már kivárni, mire elkezd működni ... :)

Kismillió legkülönbözőbb csodajó billentyűzet párhuzamosan az EP -n,
és mindegyik tök jól működik, nincsen találgatás hogy melyik gomb melyik,
nincsenek felülragasztott gombok se,

csak gyönyörű haj ... :)

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 12:20:09
Teljesen jól működik az új szupertrükkös konkurencia kezelés a főprogram és a megszakítás között.

Egész éjjel nem lépett ki az ENTER -es tesztből (csak mikor reggel levettem a súlyt),
és nem láttam hibát gépelés közben sem soha.

Már a korábbi verzió is teljesen stabil volt,
de ezzel az uj konkurencia kezeléssel (áldassék a balagesz neve)
kikerült a főprogramból a megszakítás letiltás, ami azt jelenti,
hogy mostmár az EP megszakítást (ami önmagában elég gyors még 10 MHz -es Z80 -nál is)
csak egy nagyon rossz pillanatban érkező PS/2 megszakítás tudja késleltetni,
a főprogram egyáltalán nem,
mindamellett hogy a főprogram is elvégzi a billentyű sor frissítését is.

Mostmár csak azt a PS/2 megszakításos esetet kéne vizsgálni,
persze ha kiderülne hogy az gázos, kezdeni nem nagyon lehetne vele semmit ...

Kezdhetnénk pld. a PS/2 megszakítást is egy frissítéssel,
ugyanezzel a traszparens, dedikált regiszterhasználattal,
interrupt vektor táblába másolással,
és mivel több megszakításunk már nincs a megszakítás vektorban,
a PS/2 megszakítás ezért lehetne méretben bármekkora.
Így akkor a PS/2 megszakításnál is megspóroljuk az ugrás idejét,
de ugrás nélkül is 5 órajel.

A PS/2 adatjel kibírná a frissítés idejét.

Szóval kiváltódik az EP megszakítás, eltelik 5 órajel, akkor indulna az EP megszakításkezelő,
de ekkor beesik a PS/2 megszakítás (mielőtt még az EP kezelő elindult volna),
akkor megint eltelne 5 órajel, akkor elindulna mostmár a PS/2 megszakítás kezelő,
és aztán történne csak meg a frissülés ...

De ki tudja ... ha bebizonyosodna, hogy tud hibát okozni a PS/2 megszakítás a gyakorlatban,
most hogy ilyen gyors az EP megszakításkezelő, simán lehet hogy elbírná azt a plussz 5 órajelet ...

Végülis a főprogramba rakott megszakításletiltást is kibírta, hiba nélkül ment vele,
az is volt van 4-5 órajel, ami a megszakítás letiltás alatt futott ...

Csak a PS/2 megszakítás "hiba" kimutatásához olyan valami mesterséges teszt kéne,
hogy megy mondjuk az ENTER -es teszt,

és a PS/2 oldalról (az RPi -s PS/2 kimenettel ezt majd meg tudom csinálni) pedig folyamatosan,
megállás nélkül jön egy relatíve nagy frekvenciás (mondjuk max. 100 KHz) órajellel egy olyan kód,
amit at PS/2 értelmezésnél én eldobok. Pld. 0 kódok.

Ekkor maximális igény lenne EP oldalról az ENTER -es teszt futása miatt,
és maximális terhelés lenne a PS/2 oldalról is.
Mert most azzal hogy az egy darab ENTER gomb le van nyomva a billentyűzeten,
azzal egy kb. másodpercenként 10X van 11 darab (PS/2 az 11 biten visz át egy bájtot) megszakítás a PS/2 porton ...

Szóval ha majd lesz RPi HID HUB, abba akkor teszek egy ilyen teszt funkciót is,
és ha behibázik rajta a vezérlő, akkor a fenti módszerrel meg lehet próbálni orvosolni.


De addig is itt van az új verzió,
szebb, jobb, gyorsabb:
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 12:45:56
Ja, jut eszembe ...

Ha a gyakorlatban bekeverne a PS/2 megszak,
és azt nem orvosolná az előbbi módszer sem,

akkor jöhetne annak vizsgálata ugye,
hogy a főprogramot lehet -e úgy írni,
hogy az olvassa a PS/2 clock és data jeleket,
megszakítás támogatása nélkül úgy,

hogy soha nem csúszik le egyről sem ...

Gyors számolással 16 MHz -es AVR és 100 KHz -es PS/2 clock -nál
az 163 órajel ...
olyan kódot kéne írni ami 163 órajelenként képes biteket beolvasni ...

Sőt ennél is gázosabb, mert csak 80 ciklusig van ott az adat,
a másik 80 ciklusban az átment van a PS/2 jeben.

Hát ha nem muszáj, nem kezdenék el szöttyögni vele ...

(Ja, és közben persze a protokollt is értelmezni kéne ... :))
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 15:04:51
Wow ! És most nézem, hogy a PS/2 protokol engedélyezi hogy a host (itt az Arduino -s vezérlőm) beállíthassa a billentyűzeten a LED -eket ! :) (Mind a hármat.)

(És mivel én ezt most nem teszem, ezért csak az öninicializáláskor villannak fel a ledek a billentyűzeten, egyébként nem égnek.)

De ha megcsinálnám (és nem túl nehéz), akkor a LED -ekkel kijelezhetek amit akarok.

Pld. egyik leddel kijelezhetem, hogy az adott billentyűzet most épp intelligens módban, vagy fizikai billentyű hozzárendeléssel megy ... :)

De jó lesz ! :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 15:12:44
Ja, ez hülyeség ... :(

Hát a billentyűzetek nem a PS/2 vezérlőre, hanem az RPi -re lesznek dugva ...

Ehhez a Linux -on kéne belenyúljak megfelelő layer -ekbe, amit nem fogok ... :(


Ráadásul, ha nem tudok a Linux -ban konfigurálni ehhez valamit
(hogy ne tegye),
akkor a Linux kapcsolgatni fogja a lámpákat a billentyűzeteken,
legrosszabb esetben még ki is eshet majd a lámpa által mutatott állapot
az EP -n épp aktuális állapottól (caps lock állapottól, pld.).


Összevissza hülyeségeket fognak mutatni a led -ek a billentyűzeteken ... :smt086


Francba ... :( :( :(
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.04. 17:59:01
Az is most esett csak le, hogy mivel ugye pear már csinált az EnterMice -ra PS/2 bemenetet,
az RPi HID HUB progival generálhatok egy második PS/2 stream -et is
amit meg az EnterMice PS/2 bemenetére akaszthatok ...

szóval vezeték nélküli egereket (USB, Bluetooth) is kipipálhatom ha akarom ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.05. 23:43:06
Szerintem egy ilyet is kezelni fogok az RPi HID HUB programmal ... valszeg még az egér előtt ... :) :

https://www.playstation.com/en-us/explore/accessories/gaming-controllers/dualshock-4

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.09. 19:40:27
Kipróbáltam hogy a kínai Arduino Micro klónra fel tudom -e tölteni a PS/2 programomat.

Csak annyit, hogy az avrdude nevű tool fel tudja -e bele tölteni a binárist (.hex).

Teljesen jól működött.

Az avrdude feltöltés után visszaolvassa a programot és ellenőrzi hogy egyformák -e.


Természetesen ez még mindíg nem bizonyíték, hogy a lap teljesen tök ugyanaz
(pld. a ledek színe más ... :)),
de mivel a lap megtévesztően hasonló (konkrétan a színeken kívül nem találtam eltérést szemre),
és a program is gond nélkül ment fel rá,

szerintem igen jó esély van rá,
hogy 2 ezer forint alatt lehet PS/2 billentyűzet portot szerelni EP -re ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.09. 19:49:31
Közben megjöttek a level converter -ek az RPi GPIO és az EP PS/2 portja közé
(meg közben lett pár egyéb faragnivaló is az alaplapon),

úgyhogy holnap ha minden jól megy akkor nagy heggesztés lesz megint,

odáig mindenképp el szeretnék jutni a hétvégén,
hogy 2 db PS/2 csatlakozó lóg le az RPi GPIO -járól,

és műszerrel tudok a PS/2 clock és data vonalakon
általam beállított magas és alacsony szinteket,
valamint általam finoman beállítható frekvenciaértékeket mérni.


Ha ez meglesz, akkor az azt jelenti
hogy már csak szoftveres munka van hátra ahhoz,
hogy megvalósulhasson végre a régi vágyálom:

tetszőleges billentyűzet/egér/játékvezérlő az EP -n,
átalakítás, csonkolás és kompromisszum nélkül ... :)


Ha úgy jön össze holnap a szitu,
akkor teszek majd fel pár képet,
hogy rá tudjatok érezni a dolog ízére ... :)


Rá kell hangolódni a fílingre ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.09. 20:38:37
Ugye egy (mondjuk TTL, a többinél gondolom csak jobb lehet a helyzet) digitális bemenetre

simán lehet direktben tápfeszültséget rakni mint digitális magas ?


Nem kell ilyen esetben semmilyen ellenállás vagy ilyesmi ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.November.09. 21:04:02
Igen.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.10. 10:44:33
Ugye korábban már pedzegettem, hogy ezzel a PS/2 billentyűzet porttal
(és persze azzal, hogy azt egy RPi -ről ((is)) hajtom majd meg),

azzal kinyílik egyfajta vas EP "távvezérlési" lehetőség ...

Lehetne (és meglepne, ha idővel nem csinálnám meg) egyszerűen csak lementeni,
felvenni valós "gépelést" az EP -vel, vagy akár játékot, játékokat reset -ekkel közöttük
(a PS/2 bemenetre ugye tettem resetet is),
és utána azt körbe körbe lehetne lejátszani ... :)

Ember által "lejátszott" kioszk módot lehet vele csinálni az EP -hez ...

Közben lehetne töltögetni, akármi ... mintha egy videot csinálnál, csak ez az élő EP -n menne az óriási TV -n ... :)



Vagy akár lehetne olyan verziót is csinálni, hogy fogok egy EP BASIC programot,
és azt a programot szépen sorban (vagy akár random sorrendben) begépeltetem vele az EP -n ...

Egy jó nagy EP BASIC programot ...

És akkor azt lehetne látni, hogy "egy szellem" BASIC -ben programozik az EP -n,
majd lefuttatja ... :)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.10. 10:52:40
Ebben a második, BASIC begépelős verzióban lehetne a gépelés sebességére tenni valamiféle ilyen "randomizált ritmust",
ahogy egy ember gépelne, hogy ne legyen ilyen nagyon gépies, robotszerű ...

Szerintem kúlság lenne, ahogy itt mellettem az asztalon az EP "programozza magát" BASIC -ben ... :)

Közbe lehetne szúrni mondjuk random LIST, és TEXT parancsokat, akár némi mászkálást is a sorok között,
és ha nem sikerül belőni az időzítéseket, vagy pedig az ember 4 - 10 MHz kompatibilisre akarja,

akkor tol egy STOP billentyűt, aztán TEXT -et, és folytatódhat a móka ...

Ha még nem végzett az adott művelettel, akkor leáll vele ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.10. 21:45:18
Na, már rutinossan fel voltam készülve, hogy sokáig fog tartani,
de azért arra nem számítottam hogy ennyire ... :)

Eddig jutottam ma:

[attach=1]

[attach=2]

A teljes zsinórozás hátravan még ... :(

És még ronda is lett/lesz ...

Az élet nem eccerű ...


Kétoldalas prototípus nyákom nem volt, de még ha lett is volna,
nem tudnám elkerülni hogy a felső oldalon is kelljen vezetékeket vigyek.

Ráadásul ez az istenvere RPi ez tüskékkel áll fel az alaplapról ... miért nem anyával ?

Létezik egyébként valami olyan elem, ami egy ilyen dupla tüskesort átvisz a panel alsó oldalára,
hogy lehessen a panel alatt elvinni őket drótokkal ?
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.11. 21:20:30
Hát ma sem haladtam fénysebességgel finoman szólva ...
Még mindíg nincsenek PS/2 csatijaim se, nemhogy szoftveres próbák.
Csak a drótozás ...

Tegnap már tudtam hogy ronda lesz, de azt nem hogy ennyire :) :

[attach=1]

[attach=2]

[attach=3]

Valahogy meg kellene ezt csinálni normálisan ...
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Zozosoft on 2018.November.12. 09:13:53
Valahogy meg kellene ezt csinálni normálisan ...
Színes drótokkal :-)
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.18. 21:24:35
Ja, és bájdövéj összeheggesztettem az RPi és az EP PS/2 bemenete közé hiányzó kábelt ... :)

Szóval haladtam kérem ! :)


Az egér kábelt még nem csináltam meg, mert rájöttem hogy ez a szerelési minőség nekem nem lesz jó,
ahogy eddig összeraktam a cuccokat ... :oops:


Most akkor így készvan a HW heggesztés ahhoz,
hogy tudjam írni az RPi -re a HID HUB programot,
és ha kész van a billentyűzet és játékvezérlő kód,
akkor az egér kezelést sztm. már megírom hátratett kézzel is ...


Aztán pedig újraheggesztek mindent ... :evil:


Az EP oldalon túl nagy lett a kábelköteg az EP alaplap alatt,
valamint túl gyenge a PS/2 anya csatlakozó, egyszer nem vigyázok,
azonnal letörik.

Az RPi oldalon ez a felül kábelezés hazavágta az egészet,
és PS/2 apa csatlakozóknak meg olyan szemetet sóztak rám,
hogy egyszerűen nem lehet ráhúzni a csatlakozó magra a külső borítóköpenyt,
mert túl szoros ...


Szóval EP oldalon újra kell heggeszteni szupervékony szalagkábellel,
meg szereznem kell valahonnan frankó erősre kivezetett PS/2 anyát,

RPi oldalon meg szereznem kell olyan panelt ami ledupláz egy 2X20 -as tüskesort kétoldalas nyákon,
és akkor annak az egyik feléhez kell heggesszem tüskesorral az én panelemet, akor nem lesz kábelezés felül,
meg keresnem kell rendes PS/2 apa csatlakozókat.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.November.18. 21:51:45
És íme ni :

[attach=1]

[attach=2]
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.December.02. 13:46:40
Na, végre megint hekkeltem.

Műxik az RPi GPIO kivezetés, level konvertálás művelet, amire egyrészt abból következtetek,
hogy 5V -os jelet tudok kapcsolgatni (műszar szerint) az RPi -ből C++ kóddal,
és még mindíg működik az RPi ... :)

Sebesség érdekes dolog ... egyenlőre nem a direkt IO periféria regiszteren keresztüli kapcsolgatást választottam,
hanem egy bcm2835 nevű (az RPi periféria IC nevéről elnevezve) könyvtárral babrálom a GPIO -t,
amivel üres loop -ban 10 MHz -es frekit tudtam előállítani (még sebesség optimalizálást sem állítottam be a C++ fordítóban),

ami bőven sok, mert nekem a freki egyrészt nem is kell stabil legyen, mert élvezérelt a PS/2 protokol,
masreszt max 100 KHz -es jellel tervezem küldeni az EP PS/2 bemenetet.

Viszont mikor elő akartam állítani egy 100 KHz -es jelet, akkor meghívtam a fenti könyvtárból egy olyan függvényt
(ami valami "nanosleep" -en alapul mellesleg), ami miroszekundumos léptékű sleep -et nyújt,

amivel nem tudtam 7 KHz felé menni, hiába állítottam 1 mikroszekundumra a bemenetét ... :)

Szal magának a mikroszekundumos sleep függvénynek van egy akkora késleltetése, hogy 7 KHz -re limitálja a max frekit ...


Most ez vagy egy nagyon béna mikroszekundumos sleep függvény, vagy nem tudom mi a retek van ... :)


Másik érdekesség, hogy a freki nagyon nem stabil, a freki mérő digitális műszer pörög fel/le mint a bolond ...
Ami mondom nem lesz baj itt most nekem, de az Arduino -n ez nem így volt, ott szép stabil frekiket lehetett kimérni.


Szóval mostmár csak a lényeg hiányzik az input HUB progihoz, a periféria bemenet/kimenet függvényeket összegyűjtöttem.

Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: ergoGnomik on 2018.December.02. 15:21:30
Felteszem nem valósidejű operációs rendszert futtatsz, vagy a programodban nem használod a valósidejű könyvtárakat. Általános operációs rendszereknél – amennyire tudom – úgy szokott lenni, hogy ha egy folyamat vagy szál várakozási műveletet kezdeményez, akkor az ütemező elveszi tőle az időszeletének maradék részét, és amikor újra rákerül a vezérlés, csak akkor értékeli ki a várakozási feltételt. Így aztán nem is csoda, hogy egyrészt lelassul az időzítés egy végtelen ciklushoz (busy loop) képest, másrészt a stabilitás is elvész.

Azután persze ha az OS valamilyen RT Linux vagy efféle, akkor az én okoskodásom is megy a levesbe.
Title: Re: HID kezelés ReLoaded (Enter the RPi)
Post by: Z80System on 2018.December.02. 15:36:49
Nem, a sima Raspbian az nem realtime.

A nanosleep -ről meg kiderült, hogy ha 0 -át adsz neki, RPi -n az akkor is 80+ mikroszekundum lesz,
ami ugye már csak max 12.5 KHz önmagában ...

Remélem hogy mérni azért ennél nagyobb felbontással tudok majd időt mikor generálgatom a jeleimet,
de végülis mindegy, elég gyors lesz mindenképp ...