Fórum témák
» Több friss téma |
PCI portról szeretnék adatokat beolvasni. Melyik programozó sw-rel tudom a legegyszerűbben ezt, én a TurboPascalt ismerem, ezzel el tudom e érni?
PCI ? Tehát pl egy kártyához szertnél hozzáférni??
valahogy nem értem. Kérlek bővebben.
készíteni akarok egy kártyát, melyen egy mikrovezérlő kérésre, vagy címzéssel - ha egyezik a cím és a kártya címe - , a kártya által szolgáltatott adatokat szeretném beolvasni és feldolgozni. Az adatok szélessége 8, 16, 32 bit.
Hali.
Ha windows xp alól próbálsz közvetlenül akármilyen portot megcímezni nem fogja hagyni (azonnali "KÉK HALÁL"), csak xp alapú diveren keresztűl fog sikerülni, vagyis amit az oprendszerenk és egy kártyához megírt drivernek is támogatnia kell parancsot. Én ugyanis LPT-re szeretnék közvetlenűl írni eddig nem túl sok sikerrel. Szerintem TP-ből elérni csak assembleren keresztül tudod.
xp alatt LPT portot nem sok sikerrel fogsz írni, eddigi tapasztalataim szerint. Volt egy progi, amire azt mondták, hogy azzal menni fog, de nem ment.
Portokat Én alapból nem próbálok xp alatt programozni. Próbáld Windows Millenium vagy korábbi verziók alatt
Sejtem, hogy nem nagyon fog menni, de már volt 1-2 sikerélményem - DOS alapú nyomtatódrivereken keresztűl PL: tűs epsonok . Ha ez sikerülne az nagy áttörést jelentene számomra. Te az assemblerhez, hogy viszonyulsz, mert én iszonyulok tőle
nekem mentek a port vezérlések, delphi, vagy c++ builder és egy componens ami megvalósítja nekünk a Com vagy LTP kommunikációt, egyébbként minden ilyen dolog rendesen windows API-n kersztül működne... ne...
Ah!
Mi lenne az a komponens (delphi ha lehetséges), mert ha már megvan minek izzadjak vért. Én még az USB-n keresztül is gondolkodtam mert elvégre az is soros port Mi erről a véleményed?
Algee
Gondolkoztam a problémádon és azt hiszem ha a kártyát megtudnád úgy csinálni, hogy amikor bekapcsolod a gépedet akkor a kártyádnak bekéne jelentkeznie a BIOS-ba, és ami alapján lenne egy fizikai címe, és kapna megszakítást, - (szerintem ez egy kicsit olyan mintha PLUG & PLAY kártyát csinálnál). Ha ez meglenne akkor asm nélkül is eltudnád érni portcímzéssel a kártyát.
Hogy működik ez a bejelentkezés a BIOS-ba?
van erre egy protokol? Ha igen, akkor a címet ez alapján kapja az eszközöm? Ezígy nagyban megkönnyítené a dolgot. Megszakításkérésre nincs szükségem, Csak I/O írás és olvasást akarok.
Hali.
Utánanéztem a dolognak, nem olyan egyszerű a dolog. Ha PCI kártyát szeretnél csinálni akkor csak GENERIC PCI interfésszel lehet megcsinálni a vezérlést, úgy, hogy az interfészt is fel kell programozni mint egy PCI-et. Ekkor lessz neki egy ID száma amit a BIOS lekérdez, és ad neki egy fizikai címet -! de vigyázz, hogy ne legyen olyan ID-je amit már más gyártó használ mert a Windows ez alapján azonosítja a kártyákat és a megfelelő drivert (összeakad a másikkal), és PCI-nél kap automatikusan megszakítást is. ISA esetén csak ID alapján lesz fizikai címe, megszakítása nem.
Sziasztok!
Szükségem lenne egy programátorra amivel lehet 16F628 PICet programozni. Tudna esetleg valaki segiteni. Kapcs. rajz, szoftver vagy egy link is elég lenne. Előre is köszönöm! Kardi
ICD2 vagy JDM, mind kettőt megtalálod itt a kapcsolások között, Csak a lábakat kell megkeresned a picen és ezekre máris kötheted. a JDM jóval olcsóbb megoldás, az ICD2 megjóval komplexebb tudású.
A port progizóknak meg azt ajánlom guglin keressenek rá, com component, vagy LTP component és akkor találnak egyrakást, aztán válasszák ki a megfelelőt, érdemes még a www.prog.hu fórumjában nézelődni, mindig van ilyen topik...
Hi!
Én azügyben szeretnék segítséget kérni, hogy LTP port 2. 3. 4. 5. 6. 7. 8. 9. lábára szeretnék logikai igen (1) és logikai nem (0) jelet küldeni, és mindezt Delphiből kellene megcsinálnom Xp alatt. Ehhez kellene nekem megfelelő komponens a Delphihez, meg (ha lehet) akkor 1 kis segítség is kérnék a megfelelő eljárás elkészítéséhez. Előre is köszi!!! Üdv! Barbár
hi
ez az, de valamiért most nekem nem működik, nézd meg, hátha neked nagyobb szerencséd lesz vele
A következők kellenek:
1. Kernel módú I/O driver. 2. Portot kezelő komponens Delphi-hez vagy DLL. Ebből sokféle létezik. 3. Némi alapvető programozói tudás Pascal vagy Delphi nyelven. Az első 2-t megtalálod az oldalamon, a Letöltés alatt. Mint láthatod, én az io.dll-t választottam. Ennek használatához a következő sorokat kell beírni (pl.) a főprogram deklarációs részébe: procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll'; function PortIn(Port: Word): Byte; stdcall; external 'io.dll'; function IsDriverInstalled: Boolean; stdcall; external 'io.dll'; Innentől már csak a párhuzamos port regisztercímeit kell ismerni. Neked elég lesz az adatregiszter is, ami a báziscímen van. A Google segít, ha nem vagy tisztában ezekkel.
Köszi az edigi segítséget!
leszedtem azt a DLL-t amit mondtál, ezt hova kell bemásolnom? Előre is köszi! Barbár
Minden le van írva a lapomon... Mit, hova, miért, ... Ugyanúgy kell eljárnod, mintha az LPT Debuggert telepítenéd.
Köszi, már látom. Este áttanulmányozom, ha hazaértem, próbálkozom, aztán ha nem meggy akkor még jövök a hülye kérdéseimmel ok?
Köszi szépen! Üdv! Barbár
azért nem mindegy, hogy hol deklaráljuk:
implementation {$R *.dfm} {Io.dll fügvények deklarációja} procedure PortOut(Port: Word; Data : Byte); stdcall; external 'Io.dll' function PortIn(Port: Word): Byte; stdcall; external 'Io.dll' procedure SetPortBit(Port: Word; Bit: Byte); stdcall; external 'Io.dll' procedure ClrPortBit(Port: Word; Bit: Byte); stdcall; external 'Io.dll' és egy példa, egy gombnyomásra 0F-et ír az LPT adatbuszára: procedure TForm1.Button1Click(Sender: TObject); begin PortOut($378,$0F); end;
NA EZT NEVEZEM CÉLRATÖRŐ SEGÍTSÉGNEK!!!!!!!!!!
Köszi! Most / pill 2 kérdésem lenne ezzel kapcsolatban: 1# Hogy tudom eghatározni h pl a 2. 3. 4. 5. 6. 7. 8. 9. lábak közül melyikre szeretnék éppen 0-t vagy 1-et írni? 2# Mit jelent az általad írt F betü a 0 mögött??? Köszi! Üdv! Barbár
1: Vagy 1 byte-ot írsz ki (PortOut): ebben az esetben összeadod a bitek és a helyiértékeik szorzatát és azt írod ki; vagy a SetPortBit és ClrPortBit eljárást használod, előbbi a 2. paraméterben adott bitet 1-re, utóbbi 0-ra állítja. Bár én ez utóbbi 2-t sose használtam.
2: Inkább azt kérdezed, mi az a $, nem? Hexa kód megadása, amit a fordító automatikusan helyettesít a decimális értékével.
ja itt kezdődnek a gondok egy kicsit utánna kellene nézni a számrendszereknek. amit te lábaknak nevezel az valójában a port adatbusza talán először tisztázni kellene mi az a bit és mi az a byte nézd meg a kettes számrendszert amit én írtam 0F-et az tizenhatos számrendszerben van itt a byte-ot két 4 bit-es részre kell osztani így kell értelmezni a számot a felső 4 bit a 0 az alsó 4 bit az F. ezt jó hülyén magyaráztam el de talán érted mindegy ha nem vagy tisztában ezekkel a számrendszerekkel akkor talán PIC-et sem kellene még programoznod. pedig ezekkel a dolgokkal egy olyan magas szintű nyelvnél mint a Delphi is illik tisztában lenni...
ezt nézd meg egy kis fogalom port ról ábrákkal ilusztrálva
Feltétlenül muszáj ennyi szmájlit berakni egy hozzászólásba? Én nem vágom ezt a dolgot...
Értem, csak épp eléggé örültem annak h már ennyi helpet kaptam, de akkor moderálom magam, és leredukálom a smile-k számát.
Üdv! Barbár
Asszem kezdem kapizsgálni (szó szerint még csak kapizsgálni).
A kérdésem az lenne, hogy hogy tudom megcsinálni, hogy pl a 2. adatbusz 1-es jelet adjon (tehát ha pl ledet kötök rá akkor világítson, és akkor aludjon el amikor én szeretném. Vagy most teljesen hülyeséget mondtam és az adatbuszokra küldök egy logikai igen (1) jelet akkor az csak egy bizonyos ideig fog áramot adni és utána nem? Ja és amit fenolftalein írt h nem kéne PIC -programozásal foglalkoznom... hallotta már 1-2 dolgot a PIC programozásról és azok alapján én is úgy terveztem, hogy ha 1 mód van rá megkerülném a PIC -programozást, és megpróbálom majd megoldani a dolgokat anélkül. Üdv! Barbár
98765432 : LPT lábak
00000001 : bináris érték 16318421 : helyiértékek (függőlegesen olvasd) 2426 8 76543210 : 2 kitevői a helyiértékekhez (lehet, hogy egyszerűbb ezt megjegyezni és ez alapján számolni a helyiértékeket) Így működik: - eldöntöd, melyik lábon legyen 5V és melyiken 0V, - felírod binárisan úgy, ahogy itt fent írtam (1=5V, 0=0V), - minden bitet összeszorzol az alatta levő helyiértékével, - majd a kapott szorzatokat összeadod, - az összeget kiküldöd a báziscímre a PortOut eljárással. SetPortBit egyszerűbb, de ott egyszerre csak 1 bitet állíthatsz (ha jól sejtem), a fenti módszerrel viszont az összeset. De azért nézz bele az io.dll leírásába. A port kimeneteit 10mA-nél nagyobb árammal ne terheld! A programod működését az oldalamon található tesztáramkörrel vagy voltmérővel ellenőrizheted.
Kezdem érteni a dolgot...
Tehát felíro hsorban h ha pl a 7. adatbuszon szeretnék 5V-ot akkor feírom h 00000100, és ezt hogy számolom át arra a számra amit ki akarok küldnei a báziscímre? (a matek bizozonyos részeihez nagyon hülye vagyok... ) és ha megvan ez a szám akkor konkrétan hogy írom le az utasítást amivel a gép kiküldi a báziscímre? A "PortOut($378,$xx);" utasításban gondolom a xx helyére kell beirnom valahogy, de hogy? Előre is köszi! Meg köszi az eddigi segítséget is! Üdv! Barbár Idézet: „7. adatbuszon” Tegyük tisztába a fogalmi zavart. Adatbuszból jelen esetben 1 db. van, és az nem más, mint egy 8 vezetékből álló csoport, amely a párhuzamos port 2-9. lábaira van kivezetve és általában D0..D7-nek szoktuk nevezni az egyes kivezetéseket. Tehát az idézett megfogalmazás számomra értelmezhetetlen. A számolást illetően szerintem mindent érthetően leírtam. Olvasgasd, míg meg nem érted. (Ha van konkrét kérdésed, hogy valahol elakadtál a számolásban, és pl. nem tudod, mit mihez adj, akkor azt azért kérdezd meg nyugodtan.) Egyszerűen binárisból decimálisba kell átszámolnod az értéket. Az eredményt decimálisan fogod kapni, így a $ sem kell elé. |
Bejelentkezés
Hirdetés |