Fórum témák

» Több friss téma
Fórum » Programozás mikéntjei
Lapozás: OK   2 / 9
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
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
(#) Stadi válasza Barbár hozzászólására (») Okt 4, 2007 /
 
"{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.
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
Í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
(#) Stadi válasza Barbár hozzászólására (») Okt 4, 2007 /
 
A 00000001 bármely számrendszerben 1.

A második kérdésedre válaszul idézem magam:

Idézet:
„az összeget kiküldöd a báziscímre a PortOut eljárással.”
(innen)

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.
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
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
(#) Stadi válasza Barbár hozzászólására (») Okt 4, 2007 /
 
Yesss!
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
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!
(#) fenolftalein válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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!
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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...
(#) Barbár válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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???
(#) Tomi20 válasza Barbár hozzászólására (») Okt 4, 2007 /
 
Hexadecimálisban 41
Binárisan 65

(az XP számológépe tökéletesen váltogatja át, és biztos nem hibázik)
(#) Barbár válasza Tomi20 hozzászólására (») Okt 4, 2007 /
 
És hogy tudom binárisból átalakítani decimálisba???
(#) Barbár válasza Tomi20 hozzászólására (») Okt 4, 2007 /
 
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
(#) Medve válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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...
(#) Barbár válasza Medve hozzászólására (») Okt 4, 2007 /
 
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...
(#) fenolftalein válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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!
(#) fenolftalein hozzászólása Okt 4, 2007 /
 
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!!!
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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...

???
(#) Medve válasza Barbár hozzászólására (») Okt 4, 2007 /
 
azbiza 3,4mA , elvileg sok, de egy jófényű led ne pislákoljon ekkora áram mellett!
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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?
(#) fenolftalein válasza Barbár hozzászólására (») Okt 4, 2007 /
 
jah
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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
(#) Barbár válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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
(#) Stadi válasza fenolftalein hozzászólására (») Okt 4, 2007 /
 
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.
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
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
(#) Stadi válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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...
(#) Barbár válasza Stadi hozzászólására (») Okt 4, 2007 /
 
elvileg mindíg kisebbnek kell lennie...

Akkor kipróblom a portmonitot a saját progival is
(#) Barbár válasza Barbár hozzászólására (») Okt 4, 2007 /
 
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

(#) Stadi válasza Barbár hozzászólására (») Okt 4, 2007 /
 
Persze. Kérdés, hogy hány bit-nyi infót szeretnél beolvasni?
Következő: »»   2 / 9
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem