Autor Beitrag
n@no
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 06.10.02 16:38 
hi, delphi is für mich noch etwas neu aber trotzdem würd ich mal gerne wissen wie man diese Schnittstellen ansteuern tut unter delphi.

LPT -ist glaub ich noch das einfachste (und mir noch am wichtigsten), aber ich weiss weder bespiele und oder was man dafür noch so braucht. (abgesehen von der hardware).

com- ist eignetlich net so wichtig aber wenn trotzdem jemand was dazu weiss kann er es ja mal posten


USB - ja, da war letztens mal was in der ct gewesen aber damit konnt ich auch net viel anfangen weil die irgendwie nur nen motor angesteuert haben.

wie gesagt, LPT ansteuerung würd mich sehr intressieren.
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Fr 11.10.02 10:54 
Zwar für C aber trotzdem interessant:

www.sbox.tugraz.at/h.../xyz007/Parallel.htm

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
David
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 15.10.02 20:41 
@ n@no

hmm... wenn du genauer beschreiben würdest, was du gerne machen willst, kann ich dir auch ausführlicher antworten. Da ich in der Schule Schnittstellenprogrammierung habe. Zwar in C, aber für Delphi habe ich auch einige Sources.

Zunächst der Source:

procedure PortOut(IOport:word; Value:byte); assembler;
asm
xchg ax,dx
out dx,al
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
PortOut(888,1);
end;

Das wars eigentlich auch schon. Die Prozedur PortOut ist ein kleiner ASM Code, der an einem Port einen Byte schickt. Und nun schauen wir uns die Funktion bei dem Button-Klick an:
PortOut(888,1);
Die große Rolle spielt die in rot markierte Zahl. Die gibt den "Bit-Code" an, der an die Schnittstelle geschickt wird.
Nehmen wir an, wir möchten eine kleine Leuchtdiode zum Blinken bringen, müssten wir diese mit Pin 1 und Pin 19 (Masse) verbinden. Dafür würde auch der Source oben vollkommen ausreichen.
(Achtung: Es ist wichtig, dass zwischen Pin 19 und dem Anschluss der Leuchtdiode (LED) ein ca. 500 Ohm Widerstand eingebaut wird!)

Die rot markierte Zahl ist eine Dezimalzahl. Als Ausgabe möchten wir einen Binär Code haben. Daher ist eine Umwandlung von einer Binärzahl in eine Dezimalzahl nötig. Dies ist wirklich sehr simpel.

Die Datenleituntgen (Pin 2 bis 9) kannst du benutzen um z.B. Motoren oder LEDs anzuschließen.
Hier nochmal ein Beispiel:
Pin 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1
Dezimalzahl 128 - 64 - 32 - 16 - 8 - 4 - 2 - 1
Binärzahl 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 <- in diesem Beispiel wollen wir bei Pin 8, Pin 2 und bei Pin 1 ein High Bit.
Also addieren wir 128+2+1 = 131
Dann würden wir im Source oben statt der 1 eine 131 eintragen.

Ich hoffe ich hab mich jetzt nicht vertan und es war nicht zu verwirrent!?


Zuletzt bearbeitet von David am Mi 16.10.02 22:10, insgesamt 1-mal bearbeitet
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Mi 16.10.02 00:06 
@ David

Kannst du mir vielleicht ein paar Sites nennen, die sich mit Schnittstellenprogrammierung beschäftigen? Evtl. in Verbindung mit Delphi.
Das ist nämlich ein sehr interessantes Gebiet. :P

_________________
If accidentally read, induce vomitting.
David
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 16.10.02 00:25 
@ Ex0rzist
da muss ich dir recht geben. Ist sehr interessant! :D

Habe damals ein großes Tutorial dazu geschrieben. Schnittstellenprogrammierung in C, ASM und Delphi. Find das aber leider nicht mehr. Hab hier was hochgeladen.

www.myphpcenter.de/par/1.htm
www.myphpcenter.de/par/2.htm
www.myphpcenter.de/par/3.htm

Wenn das nicht reicht, dann kann ich auch mehr geben. Diese Seiten sind aber mehr über die Pinbelegung etc. Ich kann auch noch einige Delphi/ASM Source wie oben ma raussuchen um nicht nur Bits auszugeben, sondern auch einzulesen etc.

Hat man darin Kenntnisse sind coole Roboterprojekte möglich :D
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Mi 16.10.02 00:30 
David hat folgendes geschrieben:
Hab hier was hochgeladen.

Und ich habs mir runtergeladen. :lol:

David hat folgendes geschrieben:
Ich kann auch noch einige Delphi/ASM Source wie oben ma raussuchen um nicht nur Bits auszugeben, sondern auch einzulesen etc.

Das wäre super. :D

_________________
If accidentally read, induce vomitting.
David
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 16.10.02 00:44 
hehe....

So hier die 4 wichtigsten Source im Überblick:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
function PortIn(IOport:word):byte; assembler;
asm
  mov dx,ax
  in al,dx
end;

function PortInW(IOport:word):word; assembler;
asm
  mov dx,ax
  in ax,dx
end;

procedure PortOut(IOport:word; Value:byte); assembler;
asm
  xchg ax,dx
  out dx,al
end;

procedure PortOutW(IOport:word; Value:word); assembler;
asm
  xchg ax,dx
  out dx,ax
end;

Perfekt um words/bytes auszugeben bzw. einzulesen. :D
Ich denke das reicht völlig aus um zu experimentieren. Falls es Probleme bei den Empfang von Daten geben sollte, kann dies auch an einer BIOS Einstellung liegen, da man dort das Protokoll für die Schnittstelle festlegen kann.

(16.10.02 09:49 Tino) Code-Tags hinzugefügt.
n@no Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 16.10.02 20:09 
@david

also, ich will mir zuerst mal nen interface bauen. aber mit der LPT ansteuerung unter delphi hab ich soweit hinbekommen.
ich hab mir bei terry diesen LPT Treiber runtergeladen-->zlportio<-- heisst er.
so, um ein signal auf en LPT zu schicken sieht der code bei mir so aus.

var port:dword;

Port := strtoint ('$378');
zlioportwrite (port,0, ($1));

port ist halt der port wo mein LPT anschluss zu finden ist (888).
zlioportwrite so heissen die ausgänge
0 <-- was die zu sagen hat weiss ich noch net so genau, auf jeden fall geht das ganze nur wenn da eine 0 oder 1 oder 2 steht.

so und jetzt hab ich mir ne kleine testplatine gebaut mit 8 LEDs. wo ich jetzt von $1 bis $ff (1-255) (0-11111111) zählen kann. an dem stecker hab ich die pins
D0->Pin2 bis D7->Pin9 für daten und pin 25 für masse angeklemmt.
das geht auch so weit gut.

aber der stecker hat nun mal 25 pins! wobei jetzt mein wissen auch schon aufhört. also wie kann man denn die anderen leitungen steuern? wenn das überhaupt geht?? und wie kann ich ich was auslesen?? sind die leitungen D0 bis D7 alles nur ausgänge oder kann man die auch als eingäne holen??

hm, mehr fällt mir im moment nicht ein!![/i]
David
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 16.10.02 22:16 
@ n@no

Also wenn du dir den letzten Beitrag von mir anschaust, wirst du da auch einen Source finden um einen Byte einzulesen.
Zitat:
Port := strtoint ('$378');

378 bzw. 0x378 ist die Standart-Adresse der LPT1. Allerdings ist das für den Datenregister. Sprich für die Pins wo du deine LEDs gerade dran hast.

Übrigens sehe ich gerade einen Fehler oben, ich hab dort von Datenleitungen (Pin 1 bis 8) gesprochen. Das ist Pin 2 bis Pin 9. Pin 1 ist Strobe.

Diese Schnittstelle hat 3 "register".
1. Datenregister (Adresse: 0x378)
2. Statusregister (Adresse: 0x379)
3. Steuerregister (Adresse: 0x37A)

Und damit kannst du die anderen Teile der Schnittstelle ansprechen bzw. einen Status und so setzen.


P.s. Falls ich irgendwo was falsches erzählt haben sollte, dann korrigiert mich bitte. Ist schon lange der Stoff her... *g*
n@no Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 17.10.02 19:22 
na ja, wie gesagt, ich hab das delphi noch net so lang desshalb muss man mir das noch nen bissel genauer erklären!

wenn ich jetzt auf dem richtigen dampfer bin heisst es also so:

mit
prot:=strtoint('$378');
kann ich die datenleitungen D0 bis D7 ansteuern.

und mit
prot:=strtoint('$379');
die statusregisterleitungen... usw..

wenn das so stimmt, kann ich auch alles als ausgang bzw eingang benutzen.?!?

und eine zeile macht mir auch noch koppweh:

zlioportwrite (port,0, ($1));

man schaue sich die 0 mal näher an!! weil was die macht weiss ich net, und wenn ich sie weg lass geht gar nix mehr. und anstatt der 0 kann ich da auch ne 1 oder 2 hintippen. aber deren funktion is mir nen rätzel??
kann das vielleicht das gleiche sein, wie wenn ich jetzt den port 378 in 379 oder 37A änder??.