Welcome, Guest. Please login or register.


Author Topic: HID kezelés Arduino -val (Read 74914 times)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #165 on: 2014.October.06. 00:02:31 »
Kavarog még bennem az egész, de két USB lib is van, és mindkettő nagy annyira, hogy még c++ -ban se legyen kedvem újraírni, nemhogy assembly -ben,

az egyik arduino -s, a másik csak AVR -es, fogalmam nincs hogy melyiknek részletesen mik a tulajdonságaik, vagy mennyire cserélhető le egymással az aljuk,

ami a host shield -del, vagy a host képes AVR -ekkel dolgozik ...


Azt azért simán a c++ kód méretéből kijelenthetjük, hogy a "legfeljebb majd raw assembly -ben összeütjük" metódus nekem a ps/2 -ig bezárólag működhet, és ott is sztm csak a megszakításokra, a többit már c++ -ban fogom csinálni.

Amikor az USB kerül sorra, ott valamelyik libet fogom használni, ahol az egyiknek sztm direkt arduino dependenciája van, míg a másiknak avr-c dependenciája.
Az arduino dependencia itt pár funkcióval jelent csak többet, amit az arduino rátesz az avr-c -re.
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: HW készítés Arduino-val
« Reply #166 on: 2014.October.06. 01:02:59 »
Hmm, sajna nem ismerem a cuccot elegge ehhez en sem. Amikor en gondolkoztam meg (elmeletben csak ...) SD illeszton, en AVR-rel csinaltam volna (CPLD stb nem az en kenyerem) meghozza kb ugy, hogy AVR sajat RAM-jaba olvas mindent, onnan meg megfelelo sebesseggel tudja szolgaltatni az EP fele, ha azzal kesz van. Addig meg vmelyik labat az AVR-nek output-ban busy flag-nek megkapja a Z80 aztan lekerdezgetheti (mondjuk utana tenni egy cuccot, ami akkor engedi a busz pl 7. bitjere, ha a megfelelo I/O porton es olvasasra kivanja a Z80). Ebbol is latszik, hogy mindig egy a gond: kulso alkatreszek kellenek stb, mig CPLD-t az ember olyanra faragja, ahogy kell, mint logikai halozat ... Bar nem tudom ez segitett-e v nem :) Amugy en AVR vs PIC dologban AVR parti vagyok hatarozottan, amde PIC-nek (talan Povi hozta fel) van egy nagy elonye azert a PSP vagy mi, amikor input modban pl a PIC kb latch-eli es onnan elolvashatja PIC kesobb is. Ilyenek neha hasznosak lehetnek, bar tartok tole (mondjuk nem vagyok benne biztos ...), hogy AVR nem tud ilyet (legalabbis a sima ATmega sorozat, az xmega az passz  - megintcsak ...)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #167 on: 2014.October.06. 01:18:51 »
Quote
Addig meg vmelyik labat az AVR-nek output-ban busy flag-nek megkapja a Z80 aztan lekerdezgetheti (mondjuk utana tenni egy cuccot, ami akkor engedi a busz pl 7. bitjere, ha a megfelelo I/O porton es olvasasra kivanja a Z80).

Ja, csak eehhez buszkivezetés kell, amit ellenzel, vagy buszcsatlakozóra rakás, amit én ellenzek,
vagy belülre szerelés, ami opció, de én itt most (bár ez ugye állandóan változik ...:)) bill -nél is, de joy -nál meg pláne külső dologról beszélek.



Quote
Ebbol is latszik, hogy mindig egy a gond: kulso alkatreszek kellenek stb

Ja, hasonlót én is levezettem, hogy mintha az összes dolog (bill/eger/joy) mind ilyen lenne, hogy valamit az EP beállít, és ha már beállította (és ne gyere megint a busszal, meg wait -okkal, mert egy sima külső joy csatin nincs olyan, és a probléma viszont ott is fennáll), szóval ha meg már beállította, akkor Zozo szerint elméletben akár 11 rohadt cikluson belül olvasni akarhatja a választ, addigra ott kell lennie ... és ez a visszatérő jelenség, úgy tűnik nem egy mikrokontroller feladata ... ehhez kéne még neki, valami bufferelt periféria szerű, ami képes az EP csatlakozóinak nagyon gyorsan felelni, és azt a perifériát a mikrokontroller az ő komótosabb ütemében frissítgethesse ... ne kelljen 11 mikroszekundumokon belül ugrálnia ...

Még az is lehet, hogy ha megnéznénk a shield -eket, akkor találnánk köztük ilyet ...

De ha igen, ha nem, úgy tűnik, hogy maga ez az ultragyors reakció ez nem egy mikrokontrolleres feladat, mert erőltetve lehet csak kivitelezni ...

Egy ps/2 vagy usb adatcsomag értelmezése, molyolgatás az mikrokontrolleres feladat, de a jeleket ilyen mikroszekundomos nagyságrenddel frissíteni, valami külső kérelem hatására, az úgy tűnik nem mikrokontrollereknek szánt feladat ... mert ha az lenne, akkor lenne rá funkció (mellesleg simán lehet h van, csak nem tudok róla), nem pedig kínlódva, "éppenhogy" kelljen megvalósítani ...

Vagy nemtom ... :)
« Last Edit: 2014.October.06. 01:22:18 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #168 on: 2014.October.06. 01:24:33 »
Persze vannak huszonnyóc féle buszai meg portjai, amivel képes nagyon gyorsan, hardveresen, a procija igénybe nem vételével beszélgetni,
csak az EP nem azokon az interfészen akar vele beszélgetni ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #169 on: 2014.October.06. 09:59:54 »
Quote
Ja, hasonlót én is levezettem, hogy mintha az összes dolog (bill/eger/joy) mind ilyen lenne, hogy valamit az EP beállít, és ha már beállította (és ne gyere megint a busszal, meg wait -okkal, mert egy sima külső joy csatin nincs olyan, és a probléma viszont ott is fennáll), szóval ha meg már beállította, akkor Zozo szerint elméletben akár 11 rohadt cikluson belül olvasni akarhatja a választ, addigra ott kell lennie ... és ez a visszatérő jelenség, úgy tűnik nem egy mikrokontroller feladata ... ehhez kéne még neki, valami bufferelt periféria szerű, ami képes az EP csatlakozóinak nagyon gyorsan felelni, és azt a perifériát a mikrokontroller az ő komótosabb ütemében frissítgethesse ... ne kelljen 11 mikroszekundumokon belül ugrálnia ...

Még az is lehet, hogy ha megnéznénk a shield -eket, akkor találnánk köztük ilyet ...

De ha igen, ha nem, úgy tűnik, hogy maga ez az ultragyors reakció ez nem egy mikrokontrolleres feladat, mert erőltetve lehet csak kivitelezni ...

Egy ps/2 vagy usb adatcsomag értelmezése, molyolgatás az mikrokontrolleres feladat, de a jeleket ilyen mikroszekundomos nagyságrenddel frissíteni, valami külső kérelem hatására, az úgy tűnik nem mikrokontrollereknek szánt feladat ... mert ha az lenne, akkor lenne rá funkció (mellesleg simán lehet h van, csak nem tudok róla), nem pedig kínlódva, "éppenhogy" kelljen megvalósítani ...

Ezt a gondolatmenetet folytatva:

Az is lehet, hogy azért nincsenek nagyon ilyen funkciók a mikrokontrollerekben (vagy hát legalábbis ebben az AVR -ben, amit itt babráok),
amik ugye arról szólnának, hogy valami pufferbe/pufferből tároljon le/szolgáljon ki valami biteket a cucc nagyon gyors válaszidővel reagálva valami kinti eseményre,
szóval azért nincs,
mert egyrészt tulajdonképpen van a mindenféle kommunikációs buszok formájában,
másrészt pedig ilyen kombinációból, mint ami nekem kéne a ps/2 beolvasáshoz, ill. az EP -re kiírásokhoz, abból túl sokfajta lehet,
figyeljen X,Y láb ilyen meg ilyen kombinációjára, és ha akármi, akkor olvassa be Z és W láb tartalmát, és akkor azt mondjuk lerakhatná,
és várhatná hogy majd prociból kiolvassa a user kód ...

Szóval nekem az jutott eszembe, hogy egy ilyen AVR chip (és nyilván vannak sokkal olcsóbbak is, pld. rohadtul nem kell USB legyen benne, ebben meg van) már 50 -es szériában is hozzáférhető 3 dollár környékén is ...

Szóval valszeg nagyon kis memóriás, USB nélküli, de akár ugyanígy 16 MHz -es mikrokontrollereket még sokkal olcsóbban lehet venni, és lehet dedikálni a feladatoknak őket ...

Egymás közötti kommunikációra meg már ott vannak a szintén hardver gyorsított fínom kis buszaik ...

Szóval az én (és valószínűleg általános) problémáimra,
mikor nagyon gyorsan kell reagálni valamit külső dolgokra (amik viszont nem ismerik az adott mikrokontroller hardver támogatott standard buszait),
arra valszeg az lehet a válasz, hogy dedikáld a mikrokontrollert az adott "gyors reagálású" feladatnak ...

Itt az én esetemben az lenne tehát valószínűleg a nem (minnél kevésbé) hekkelős, tökölődős hozzáállás,
hogy a PS/2 bitfolyamát egy dedikált mikrokontroller olvasná be, aki semmi mást nem csinálna, egyetlen megszakja a PS/2 -re koncentrálna,
és az EP -re figyelést is egy saját mikrokontroller végezné, mely csak arra figyelne, hogy az EP ki legyen szolgálva,
és a harmadik mikrokontroller lenne az, ami most van, az már ilyen nagyobb memóriás, fullextrásabb, ami a standard buszokon elkéri/odaadja az adatokat a gyors kiszolgálásokat végző mikrokontrollereknek ...

Tehát az valahol egy "hiba", hogy én egyetlen mikrokontrollerrel akarom megoldani a dolgot ...

Hiba alatt itt most azt értem, hogy sokkal nehezebb lesz kicsikarni így a rendszerből, mint úgy lenne, ahogy itt írtam ...
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #170 on: 2014.October.06. 10:09:29 »
z80 -nál egyébként a SIO/PIO csippek nem pont ilyen feladatokat végeztek ?

Nem arra voltak kitalálva, hogy a mindenkor z80 sebességgel le/fel pakolják a buszról az anyagot,
lehetőséget adva egy lassabb külső egységnek az adathoz történő komótosabb hozzáféréshez ?
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: HW készítés Arduino-val
« Reply #171 on: 2014.October.06. 11:41:56 »
Quote from: Z80System
z80 -nál egyébként a SIO/PIO csippek nem pont ilyen feladatokat végeztek ?

Nem arra voltak kitalálva, hogy a mindenkor z80 sebességgel le/fel pakolják a buszról az anyagot,
lehetőséget adva egy lassabb külső egységnek az adathoz történő komótosabb hozzáféréshez ?

Voltakeppen de. A PIO, tehat ha sima parhuzamos buszhoz kell ilyesmi pl jo is lenne, de itt futunk bele abba amit irtam: hogy ha mar MCU stb akkor nem "szep" hogy kivulre kell egyeb komponens is (egy Z80 PIO, vagy legalabb egy IC-nyi latch, amihez nem is kell specko Z80 cucc, vegulis 74xxx IC sorozatban is van ilyen, ami erre eleg), mert ha mar ott az MCU, miert kell koreepiteni egy egesz IC temetot? :( Ebbol a szempontbol jobb a CPLD (csak tudni kene programozni stb ...). Illetve ezt irtam PIC-nel h az a "PSP"-nek nevezett modja pont ilyet tud, hogy "megjegyezi" a dolgot (latch-eli) es raersz kiolvasni MCU-bol kesobb is. Ez mondjuk persze akkor gaz, ha kozben jonne uj adat mar, vagy az az irany, amikor te kuldenel EP fele, hisz akkor kell kuldened amikor EP keri (vagy WAIT-eled addig a Z80-at, vagy hasznalsz vmi busy jelzest amit Z80-al vizsgalsz .... akarmi).

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #172 on: 2014.October.06. 17:14:09 »
Volt a régi boxsoft egér illesztő hardver ...

Abban éppúgy meg kellett oldják egyrészt a serial porttal való kommunikációt, arra figyelést,
másrészt a joystick -on is olvastak be, tehát nekik is nagy sebességgel kellett reagálniuk a joy port out utasítása által kiváltott jel változásra a joy csatlakozón ...

És lefogadom, hogy annak idején nem 16MHz AVR -rel oldották meg ... :)

Persze mivel az egér szoftver részét is ők írták, abban az esetben akár a szoftvert be is lassíthatták, hogy a vezérlőnek legyen ideje reagálni a joy port kérelem változásra,

de működik az joy módban is, akkor pedig nem ők írták a szoftver oldalt ugye a játékokba ...

Van fogalmunk róla az ő elektronikájuk hogy bánik el a problémával ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14741
  • Country: hu
    • http://enterprise.iko.hu/
Re: HW készítés Arduino-val
« Reply #173 on: 2014.October.06. 17:24:09 »
Quote from: Z80System
Abban éppúgy meg kellett oldják egyrészt a serial porttal való kommunikációt, arra figyelést,
Nem, mert nincs is ilyen benne.

Quote
másrészt a joystick -on is olvastak be, tehát nekik is nagy sebességgel kellett reagálniuk a joy port out utasítása által kiváltott jel változásra a joy csatlakozón ...
Ez egy 74LS IC-nél kb 10-20 ns :-)

Quote
Van fogalmunk róla az ő elektronikájuk hogy bánik el a problémával ?
Leginkább nincs is probléma! Eleve egy joystick csatlakozóra tervezett egérről van szó. Egyetlen bibi volt, hogy C64-en van kifelé beszélő joy láb, EP-n meg nincs, ezért kellett helyette egy drótot hozni a serial csatlakozóról.

Míg a te esetedben egy tök más szabványú egérről van szó.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: HW készítés Arduino-val
« Reply #174 on: 2014.October.06. 17:34:28 »
Quote from: Z80System
És lefogadom, hogy annak idején nem 16MHz AVR -rel oldották meg ... :)

Barmilyen gyors egy CPU szeru entitas, az sajna sorosan muxik ... Egy logikai halozat viszont ugye altalaban legalabbis nem, pont ezert nehez emulalni egy masik gepet, mig a nominalis orajelen csinalhatsz egy logikai halozatot ami Z80-knet viselkedik mondjuk FPGA-ban (sot, ha tudnad pontosan hogy volt a Z80 huzalozva, elvileg csinalhatsz teljesen ugyan olyat is, ami maga "a" Z80, akkor max a "gyartastechnologia" kulonbozik). Amugy ugyeskedni lehet, csak ugye optimakolas, assembly, stb, szoval tudas es ido, ami nem feltetlen eri meg. Pl a V-USB a sima Atmega-s (talan ATtiny is) AVR-ken kepes USB eszkozkent viselkedni, ugy, hogy sw-bol rangatja az USB labait, persze ez minden letezo eroforrast kb lekot tenyleg benne. Host-kent azert nem menne, pedig meg ez se full speed USB akkor :) Masik orult:

http://www.linusakesson.net/scene/craft/

A csavo egy atlagos ATmega-ra irt demot. Marmint, o allitja elo a video signalt softwaresen, a hangot softwaresen szinten, es persze kozben vmi animacios, demoszeru izet is produkal. Erdemes megnezni a videot, illetve lentebb azt az ASCII akom-bakomot ami mutatja, hogy kb tenyleg egy szem AVR, ami pl nemi ellenallas oszton at kozvetlenul a VGA monitorra van rakotve, aztan "rangasd softwarebol a labakat" jatek van ... Van az AVR-nek itt 1K ramja, igazabol imho meg video memoria sem fer el, tehat nem ugy muxik, hanem eppen akkor general dolgokat oda ahol epp a kepfelepites tart, es nem video memorias eljarast hasznal, ahogy egy atlag computer (pl az EP is) dolgozik.

Szoval lehet csinalni dolgokat, csak nem biztos, hogy megeri ilyen extrem iranyokra ramenni, max mint tech demo :)
« Last Edit: 2014.October.06. 17:49:40 by lgb »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #175 on: 2014.October.06. 18:02:10 »
Na ezt most meg kell emésszem ... amiket írtatok ... mert pontosan nem látom át, de valami ilyet érzek:


Hogy akkor nekem a mikrokontrollerrel is "logikai hálózat" módban kéne működjek,

tehát valami oylamire gondolok (és ezt pontosan nem tudom hogyan kéne), hogy a CPU -val ugye én beolvasom a joystick inputokat,
főprogramban, azzal a sebességgel amit tud a loop -om, és ezen értékek alapján,

az EP joystick csatlakozójára menő vonalaknak (maradjunk egyenlőre a joy -nál) NEM AZ ÉRTÉKÉT állítanám, hanem a TÍPUSÁT,
tehát azt hogy ez egy kimenet, vagy bemenet, vagy fel legyen húzva vagy ne legyen felhúzva, meg ilyesmiket,

és valahogy úgy lenne ez bekötve, hogy a vonalak tényleges ÉRTÉKÉT azt továbbra is a joy csatlakozón lévő jelek adják,
ugyanúgy mint egy sima kapcsolós joy csatlakozás esetében is ...



Lehet hogy ez baromság, amit írok, csak nem látom át mitől az,
de ha lehetne ilyet, akkor ily módon azonnali lenne a reakcio z80 joy port írásokra, hisz azok a vonalak kerülnének a bemenetre ...

És ha ez így nem lehetséges, akkor meg nem értem, hogy az a logikai IC a boxsoft illesztőben az milyen logikai funkciót tud, amit én a vonalaim TÍPUSÁNAK állításával nem tudnék "szimulálni" ?
« Last Edit: 2014.October.06. 18:12:44 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #176 on: 2014.October.06. 18:42:20 »
Végülis logikai hálózatként nézve amit (joystick esetében) meg akarok valósítani az az (egyszrűség kedvéért maradjunk 4+1->J esetnél),

hogy vonalanként (irányonként) "és" kapcsolatba hozom a joystick eszközből származó jelet, a megfelelő joystick csatlakozóról érkező jellel,
ezt párhuzamosan megcsinálom minden irányra,
és az öt eredőt meg "vagy" kapcsolatba hozom egymással,
és ezt vezetem a joy csatlakozó J lábára,

így mivel a joystick csatlakozón mindíg csak egy irány aktív, az "és" kapcsolat kiüti azt az irányt, amire a z80 épp nem kíváncsi,
és az öt közül max egy lesz aktív, amit meg a "vagy" kapcsolat rávisz a J lábra ... nem ?

ezt a logikai működést kéne valahogy leszimuláljam a mikrokontrollerem segítségével anélkül, hogy procival kéne mikroszekundumokon belül reagáljak ...

mert a user az úgyis lassan mozgatja a joy -t, arra jó a sima loop, csak a z80 -nak való reagálástól kéne megszabadulni,

hogy az embernek ne kelljen ott megszakításból kínlódni ...

az is lehet, hogy 5 fillérért lehetne rádrótozni olyan logikai áramkört a mikrokontroller kártyámra, ami megoldaná ezt, és megmentene az extrém kínlódásoktól,
és a mikrokontroller meg csak foglalkozhatna szép kényelmesen azzal, ami a dolga, síma loop -ban, megszakítás nélkül ...
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #177 on: 2014.October.06. 22:08:24 »
Jól gondolom azt, hogy mégha ez a logikai módszer működhetne is a joystick porton amit az előző hsz -ben írtam,

attól még a billentyűvel nem működhetne,

pontosabban csak akkor működhetne, ha 10* 8 kimeneti lába lenne a mikrokontrolleremnek,
amin ott pihenhetne a teljes billentyűzet mátrix,
és a kiválasztó jel azok közül választhatná ki mindíg az aktuális 8 -at,
az előző hozzászólásomban leírt módon ?

Vagyis mégha meg is tudnám oldani ezt a joystick -ra (azt egyre kevésbé hiszem hogy magával a mc -rel tudnék ilyet, de mondjuk plussz egy-két ráforrasztott logikai kapukat tartalmazó IC -vel),
a megoldás a billentyűzetre úgysem lenne jó, mert olyan mc -t ugysem találok, amin 80 lábon ott tarthatnám a teljes mátrixot, hogy a logika válogasson közülük ...

Vagyis billentyűnél úgyis maradnia kéne annak a módszernek, hogy az EP kér, én meg villámgyorsan (ami 10 MHz -re turbózott gépen 1 árva mikroszekundum, bakker!) hozzávágom a kért 8 bitet ?

Mert ha billentyűnél maradnia kellene a módszernek, akkor ha azt meg tudom oldani, akkor már tökmindegy lenne, ha a joystick eset is így működne ... nem kutatnám akkor ennek az "optimalizációnak" a lehetőségeit tovább ...
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #178 on: 2014.October.06. 22:52:04 »
Mert ha ez így van, akkor azért a 10MHz -es EP -re való felkészülés elég húzós lehet ...

1 mikroszekundum alatt mondjuk (ha nincs különösebb késlekedése magának a megszakításnak, valamit azért csak kell csinálnia, minimum az SP eltárolás gondolom automatikus)
16 utasítást tud végrehajtani az AVR a megszakban, aminek a kódja valami ilyen lehet majd mondjuk billentyűnél:

- push egy regiszter
- regiszterbe beolvas lábakról input 4 bit
- regiszterbe betölt sajátmagával indexelve egy tömbből output 8bit
- regiszterből kiír output 8 bit lábakra
- pop regiszter
- ret

Ez (nem néztem assembly -t csak tippelek) kb. 6 utasítás lesz ... ha egy 10 MHz z80 pörget majd egy bill. scan loop -ot,
és mikroszekundomunként megszakítja ezzel az AVR -t, akkor az idő fele (reméljük csak annyi) elmegy majd a z80 kiszolgálására ... :(

De az nekünk akár még pont jó is lehet ... csuszára ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HW készítés Arduino-val
« Reply #179 on: 2014.October.07. 00:39:00 »
Né mááá ... há itt egy ilyen izé :) :

http://www.lipoly.de/index.php?main_page=product_info&cPath=880_2631_2639&products_id=161216

Szerintem ilyenből tudnám kiépíteni a sok GPIO -s kontrolleremet.
Ez rajta ül az egyik ilyen buszon, 8 darab max, aminek fejenként lehetne 14 GPIO -ja ... vagyis 112 GPIO -m lenne plussz ami a mc kártyán van ...

Mondjuk a 8 darab az belekerülne 20 rugóba ... :)
Z80 System