Fórum témák
» Több friss téma |
Hi!
Hazaérte, nekiáltam prbólkozni a dologgal.. Ezt írta a delphi cucc Unit-jába (bocs, de hulla vagyok és már nem tudom ennél szebben megfogalazni): Idézet: „unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, PortIO, StdCtrls; type TForm1 = class(TForm) Button1: TButton; DLPortIO1: TDLPortIO; Label1: TLabel; {$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' procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption:='jo'; end; end.” Tudom h nem túl jó hogy az egészet beidéztem ide, de nem akartam, hogy később még az legyen h még ezt, meg azt a részét is idézzem be... Szóval a LÉNYEG: Ezt a hibaüzenetet adta erre a gép: Idézet: „(Error) Unit1.pas(16); Unsatisfied or external declaration: 'TForm1.PortOut'” És ugyanez a többi portkezeléshez kapcsolódó deklarációs sorra is. Ez mitől lehet? (Az io.dll -t bemásoltam a Windows\System32 mappába ahogy azt elvileg kell is, az itt ajánlott delphi komponen is sikeresen telepítve lett, az IO Drivert is feltelepítettem, az utána következő reset is megvolt... Mi lehet a hiba? Előre is köszi! Üdv! Barbár
Hi!
A Fogalmi zavarral kapcsolatban: Én eddig lábaknak hívta őket csak nem D0-D7 ig, hanem 2.-9. -ig, de leszóltak (asszem nem itt hanem a másik topicban) h azok nem lábak hanem adatbuszok, de akkor ok, maradjunk a D0-D7 megnevezésmódnál. A számolást illetően pedig: Már azt csináltam amit Te is javasoltál most, hogy nézze amit írtál és már tsztul a dolog... Már csak az kéne hogy ne adja adelphi ezeket az idióta hibaüzeneteket... Üdv! Barbár
"{Io.dll fügvények deklarációja}"
Ha ez elől kiveszed a $R direktívát és beírod az 'io.dll'-ek után a pontosvesszőket, lehet, hogy lefordul, de inkább tedd az implementation utáni $R alá a dolgokat. A $R-es sort nem kell bemásolnod, elég az, amit az IDE berak.
Így már lefut a program, már csak az lenne a kérdésem, hogy ha a lenti pédában adott 00000001 -et szeretném kiküldeni akkor az átszámolgatás után mennyinek is kell lennie a végeredménynek?
És nekem a "PortOut($378,$xx);" utasításba az xx- helyére azt kell beírni ami a számolgatás után kijön vagy még azzal kell valamit csinálni? Üdv! Barbár
A 00000001 bármely számrendszerben 1.
A második kérdésedre válaszul idézem magam: Idézet: (innen)„az összeget kiküldöd a báziscímre a PortOut eljárással.” Idézet: „Az eredményt decimálisan fogod kapni, így a $ sem kell elé.” Szerintem aludj Te is egy kicsit. Friss fejjel jobban fog menni a dolog.
Asszem értem, tehát akkor úgy fogom elérni h csak D0 láb-on legyen 5V hogy ezt írom be a progiba: "PortOut($378,1);"
??? Üdv! Barbár
Köszi
Még megerősítésként annyit szeretnék kérdezni ezzel kapcsolatban, hogy ha pl 01000001 -et szeretnék kiküldeni a portra akkor "PortOut($378,65)" ??? Előre is köszi!
ha egyet akarz kiküldeni akkor:
PortOut($378,$01); ha 01000001-et szeretnél akkor PortOut($378,$41); Ahogy már írtam neked hexában a byte-ot azaz a 8 bitet 2 db nybble-re kell osztani(nybble=4 bit azaz fél byte) ekkor a helyiértékek az alábbi módon alakulnak: a két nybble: 0000 0000 A helyiértékek:8421 8421 Bináris 1: 0000 0001 Hexa 1: 01 Bináris 8: 0000 1000 Hexa 8: 08 Bináris 14: 0000 1110 Hexa 14: 0E Bináris 158: 1001 1110 Hexa 158: 9E Remélem jól számoltam kb. egy kis lecke a bináris és a hexa közti összefügésekről remélem érthető ezekkel a dolgokal kellene tisztában lened. gyakorold!
Megcsinltam (igy szerszámok nélkül a kezdetleges kis port-monitoromat. (470 ohm-os ellenállásokat használtam + 5mm-es magasfényü ledeket.
Nemsokára készlesz a progi is, aztán kipróbálom a dolgokat...
Működik a port-monitor amit fabrikáltam
Kipróbáltam egy netről szedett LTP teszter progival, de a saját progival eladkadtam, ott , hogy kiszámolgatom, hogy minek kell kijönnie, de azt se nagyon vágom, mert amit fenollftalein írt h a 01000001 az miért 41 és miért nem 65? mert ugye (1*1 = 1) + (64*1 =64) = 65, vagy utána a 65 még át kel váltani másik számrendszerbe???
Hexadecimálisban 41
Binárisan 65 (az XP számológépe tökéletesen váltogatja át, és biztos nem hibázik)
És hogy tudom binárisból átalakítani decimálisba???
Közben nézegettem és először gondolta jól.
a 65 decimálisban van, de akkor nekem HEXadecimálisra kell átváltanom nem??? Mert pl a 65 decimálisból átváltva hexadecimálisra tényleg 41-et ad végeredménynek. Már csak az a kérdés hogy hogy tudok átváltani "manuálisan" (szóval pl papíron) tizes-ből tizenhatos számrendszerbe (ha már papíron meg tudom csinálni, akkor már le is tudom programozni, csak egyenlőre az papíron se menne)... Előre is köszi! Barbár
CSak kiváncsiságból nézzük már meg azt a portmonitort, hogy mennyire terheli le a kimenetet...Mérj már légyszi feszültséget az ellenálláson, miközben ég rajta a LED...
Lemértem és az ellenállás előtti és utána levő vezetékhez érintve a tűket, a feszltségkülönbség 1,60V ... éppen pislákolnak a ledek...
A megoldás még mindíg a nybble-ben rejlik Tizenhatos számrendszerben mindíg a 4 bit-es csoportokra kell koncentrálni! előbb job lenne ha a kettes számrendszerrel lennél tisztában mert ha a kettest érted akkor könyebb tizenhatosba átváltani títesből tizenhatosba elég nehézkes!
A tízesből kettesbe megy már az átváltás?
egy eygszerű példa: a kettes számrendszer ugyebár a 2 hatványain alapul. vegyünk 8 bitet ami 1 byte az egyes értékek: 7.bit 6.bit 5.bit 4.bit 3.bit 2.bit 1.bit 0.bit 128 64 32 16 8 4 2 1 az adott számok a 2 hatványai! namármost ha az adot bit 1 akkor azt a számot jelenti títes számrendszerben. PL: kettes számrendszerben(Bináris): 10110010 Tízesben értelmezve:128+32+16+2=178 Ha most a binárist két 4 bites csoportra bontom helyiértékek szerint így alakul: 8421 8421 mint a bináris első 4 bitje akkor ebből meg tudom határozni a hexa számot. a tizenhatos számrendszer számai: Tízesben: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 Hexában: 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, Tehát a fentebb említett szám: Bináris: 1011 0010 Decimális: 178 Hexa: B2 remélem ebből megérted a lényeget!!!
A kettesből tizesbe már megvan, azt már a programom is megcsinálja, a kérdésem az lenne, hogy hogy tudok tizesből tizenhatosba váltani, vagy ha ugy egyszerübb akkor hogy tudok 2-esből tizenhatosba váltani...
???
azbiza 3,4mA , elvileg sok, de egy jófényű led ne pislákoljon ekkora áram mellett!
Tehát, ha ugyanugy ahogy ahogy 2-esből 10-esbe váltok át, ugyanugy csinálom csak a 2darab 4bit-es csoportal, és az igy kijött számot váltom át aszerint h pl 15=F, stb, ugye?
jah
Zsír
Akkor most nekiállok h megcsináljam a programot h ne tizesbe váltson át hanem 16-osba... De közben is leszek fórumon
Hali!
Megvagyok a programmal, teljesen jól számolja a dolgokat 16-os számrendszerbe, a gondom csak az h a végeredményt string változóban tároltam le, (mivel előfordulhatnak benne betük is (A - F) ezt végül sikerült elérni h később mégiscsak WORD tipusu változóban legyen tárolva... A kérdése a következő: "PortOut($378,$xx)" eljárásban az "xx" helyére tegyem be a word tipusu változót és már mehet is??? Előre is köszi! Barbár
Már nem azért, de mi a *ért kell hexába válogatni??? Az mennyivel egyszerűbb, mint a decimális alak? Akinek az egyszerűbb, az számoljon hexában. Mert a fordítóprogramnak édesmindegy.
Véleményem szerint tök fölöslegesen keverted meg Barbárt, miközben a decimálist már teljesen jól ki tudta számolni. Persze nem vitatom, hogy ha az ember programozni akar ezt-azt, azért legyen tisztában a 2-es és 16-os számrendszerrel is.
Mind1, már kész a pogi ami átváltja először 10-esbe, hogy kiirja és igy tudjam ellenőrizni h nincs-e vmi gond már az átváltás előtt, aztán átváltja 2-esből 16-osba,
de a gondom még mindig ugyanaz: A PortOut eljárásban a számok helyére simán berakhatom a word tipusú változót és kész is? vagy van benne még valami cselesség itt is? Köszi Barbár
Beírhatod, de mivel a port 8 bit széles, a word meg ugye 16, úgyis csak az alsó 8 bit fog kimenni. Remélem, a word-öd értéke mindig kisebb, mint 256...
elvileg mindíg kisebbnek kell lennie...
Akkor kipróblom a portmonitot a saját progival is
Végre megvan.
Rájöttem h Stadi-nak igaza volt a számrendszerekkel kapcsolatban. Átalakítottam a progit, hogy egyből a 10-es számrendszerbe váltott számot küldöm ki a portra, és működik. Kipróbáltam a portmonitorral, és hibátlannak tűnik eddig Köszönöm mindenkinek az eddigi segítségét!!! A végcélt tekintve most a következő lépés hogy meg kéne oldanom h az LTP porttal adatokat beolvasni is tudjak... Ebben is tudnátok segíteni? Üdv! Barbár |
Bejelentkezés
Hirdetés |