PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Programm zum ansteuern von Schrittmotoren



mkRE
04.07.2005, 15:41
Hallo zusammen kann mir jemand vielleicht helfen und zwar möchte ich über c++ Borland Builder ein Programm zum ansteuern von mehreren Motoren oder Schrittmotoren schreiben.Das grundlegende Wissen zum Programmieren
einfacher Programme habe ich, leider weiss ich nicht wie und was ich über c ++ ansteuern soll um Spannungspegeel herrauszubekommen aus meinem PC.
Auf http://www.skilltronics.de/ unter Elektronik am PC gibt es wunderbare Schaltungen leider weiß ich nicht wie ich Sie ansprechen soll kann mir da jemand weiterhelfen? ](*,)

NumberFive
04.07.2005, 20:21
Du brauchst immer eletronik dazwischen du kannst kein Motoreinfach an den PC hängen.

http://www.robotikhardware.de/motoransteuerung.html

Das ist was du Brauchst. wie du die RS232 (Serial) programmierst finden auch hier im forum einfach suchen benutzen.

Gruß

04.07.2005, 23:12
Ich werd mal rumgucken danke vorrerst für deinen Tipp.Das mit der Elektronik ist verständlich will mein Rechner ja nicht abschießen :-) mir gings halt darum wie ich überhaubt harware ansprechen kann um weiter arbeiten zu können.

05.07.2005, 07:29
Ich denke was du lernen mußt ist wie Programmiere ich die RS232 Schnittstelle. das ist bei den meisten hier die Komunikation zwischen hardware und software (PC). Die Parallele währe auch noch eine Möglichkeit
wird aber selten genutzt weil noch komplexer.

Gruß

mkRE
06.07.2005, 13:07
wie spreche ich aber die RS232 Schnittstelle an?das ist mein großes Problem mit der Parallelen LPT1 Schnittstelle habe ich es Herausgefunden aber jetzt habe ich ein Problem mit dem Treiber der den zugriff unter XP auf Hardware erlauben soll.Habe diesen Treiber von http://www.b-kainka.de/portnt.htm "Inpout32.dll" wie beschrieben (Just copy the Inpout32.dll to "system32" directory and run the program.") in meinen System32 Ordner Kopiert Leider erkennt mein C++ programm es nicht bekomme diese Fehlermeldung
----E2209 include Datei "inpout32.cpp" kann nicht geöffnet werden------

#include <vcl.h>
#pragma hdrstop
#include "inpout32.cpp"
#include "Ulpt.h
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

Habe das im Kopf geschrieben.Benutze den c++ Borland Builder 5

06.07.2005, 13:27
"inpout32.cpp" ?

#include "inpout32.cpp" ?

Vieleicht solltest Du Dich zuerst mit den C/C++-Grundlagen vertraut machen?

Du brauchst die DLL, eine passende Header-Datei, die die Funktionsaufrufe enthält und mußt die DLL im Programm auch laden ("LoadLibrary (...);").
Dann funktionierts.

Blackbird

mkRE
06.07.2005, 14:58
#include inpout32.cpp ich will diesen Treiber mit einbeziehen.
Ich hatte c++ nur ein Jahr erst Konsolen anwendung dann GUI aber da nur einfache Programmierung.Was kann ich mit Load Library machen?Das Kkann doch nicht so schwer sein ein LPT 1 port anzusprechen?

Blackbird
06.07.2005, 16:00
Das Kkann doch nicht so schwer sein ein LPT 1 port anzusprechen?
http://www.logix4u.cjb.net/ und dann "How Inpout32.dll works ?
" anklicken ...
Damit nicht jeden diesen steinigen Weg gehen muß, gibt es eben (u.a.) die inpout32.dll, die man aber auch richtig benutzen muß:
Unter "Inpout32.dll for WIN NT/2000/XP" (gleiche HP) ist nach dem Punkt 7. unter der Überschrift "Solution" ein sample program ("Click here") angegeben ("... source code for TEST.C ..."), welches die Vorgehensweise in einem C-Programm zeigt.

#include inpout32.cpp ich will diesen Treiber mit einbeziehen. inpout32.cpp ist doch ein C-Source-File, kein Treiber. Und inpout32.cpp hast Du doch nirgendwo.

Was kann ich mit Load Library machen?
Na den Treiber laden. Der, der in der DLL "drin" steckt.

Blackbird

mkRE
06.07.2005, 16:12
Aber das ich diese C-Source File mit einbeziehe in mein Programm ist doch richtig oder?Wie bekomme ich jetzt den Treiber aus der DLL Datei?mit diesem LoadLibrary?

NumberFive
07.07.2005, 08:09
Also ich muß hier doch mal was klar stellen.

Eine DLL ist kein Treiber

Eine DLL sind aus gelager Funktionen die man auf rufen kann.

#include "inpout32.cpp"

wir nie Tun man kann keine cpp dateien include sondern nur header sprich .h dateien.

Wie komme ich an funktionen einer dll:

Es gibt zwei möglichkeiten dynamisch oder statisch.
Die Statische ist das Header file einbinden "incude...."
Und dem linker dann das entsprechende lib file angeben.

Problem an dieser metode ist das das programm bei nicht da sein der
dll einfach nicht starten und man nicht darauf reagieren kann und man das h und das lib file braucht

das dynamische laden:



extern "C"
{
typedef long (__stdcall *Cherry_Data)(PKBVCardRecord);
typedef long (__stdcall *Cherry_Init)(void);
typedef void (__stdcall *Cherry_Close)(void);
typedef long (__stdcall *Cherry_GetErrorDesc)(long,LPSTR,long);
}


Erzeugen der Funktions Typen



Cherry_Init G801501_Init;
Cherry_Close G801501_Close;
Cherry_Data G801501_ReadCardRecord;
Cherry_GetErrorDesc G801501_GetErrorDesc;


Erzeugen von Funktionspointer



m_hCherryDll = LoadLibrary("G8015012.dll");

if (m_hCherryDll != NULL)
{
G801501_Init = (Cherry_Init) GetProcAddress(m_hCherryDll, "G801501_Init");
G801501_Close = (Cherry_Close) GetProcAddress(m_hCherryDll, "G801501_Close");
G801501_ReadCardRecord = (Cherry_Data) GetProcAddress(m_hCherryDll, "G801501_ReadCardRecord");
G801501_GetErrorDesc = (Cherry_GetErrorDesc) GetProcAddress(m_hCherryDll, "G801501_GetErrorDesc");
if (NULL != G801501_Init)
{


Zuweisen der Funktionspointer zu den adressen in der dll.



long result = G801501_ReadCardRecord(&CardRecord);



Funktionsaufruf

Das beispiel beruht nicht auf der InpOut.dll sonder einer ander der Code war halt gerade greifbar.

Die Dll installiert einen Treiber bei NT Systemen also wird die nur laufen wenn man genung rechte auf dem system hat.

Aufpassen mit der Dll kannst im ganzen Io bereich von windows rum schreiben. das heist richtig müll machen (BlueScreen)

Den die DLL tricks den HAL aus.

Wenn du normale Serial komunikation machen willst und nicht den Parallel port Leitungsweise ansteuern willst brauchst du die dll nicht.

Was hast du genau vor.

Gruß

mkRE
09.07.2005, 07:02
Hi sorry konnte nicht vorher schreiben.Danke erstmal für deine Antwort!!:-)
freue mich immer über engagierte menschen.
Ich will Ganz einfach eine Steuerung über c++ schreiben können um über Verstärker einen Schrittmotor oder auch mehrere ansteuern zu können als mit einer seriellen schnittstelle würde ich das natürlich auch machen wollen wenn ich nur wüsste wie.Leider bin ich nicht der grosse PC kenner deswegen stelle ich demendsprechend vielleicht doofe Fragen :-).

NumberFive
09.07.2005, 08:50
Ich würde dir emfehlen das du erst mal klein anfängst.

Den die Aufgabedie du dir da stellt hast ist so einfach.
An der Parallen kast du max. 2 Schrittmotoren hängen
da jeder Motor vier leitungen braucht. Mit eletronik kann
man dann vier draus machen.

Mal ne frage bist du auf dem Thema auch neuling ?
wenn ja fang erst mal eines an dann mach das andere.
Kauf dir ein Porttester mit led's für den Parallelprot
und versuche die Leds zu, leuchten zu bringen.
wenn das klappt kannst du weiter machen.

Gruß

mkRE
09.07.2005, 18:46
beim Thema Ports über Programmiersprachen ansteuern da bin ich neuling aber motoren und elektronik habe ich aus meinem Berufsfeld in den Genen :-).mit der Hardware gebe es geringe probleme.Ich hab schon eine Anleitung aus dem Netz geladen zum LEDs anschließen an Parallel Ports.Müsste mir so ein Stecker erst nähste woche holen.

NumberFive
10.07.2005, 11:21
Na dann würde ich sagen brauchst du 8 LED's und hast die mal an den praralle port und dann schreiben wir software.

Wenn die richtig blinken hast du schon fast den schritt motoren an steuerung dann brauchst du nur noch die Signale verstärken.

Gruß

mkRE
10.07.2005, 18:48
ok werd mir morgen erstmal sonen stecker besorgen LEDs und das andere Zeugs hab ich.Für die Verstärkung habe ich schon gesorgt sowie die Schrittmotor Steuerung.

Danke "sehr" Vorerst.

mkRE
17.07.2005, 12:41
hi hab die Schnittstelle soweit fertig.konnte mich nicht vorher melden weil ich diese woche einiges zu erledigen hatte sorry.

Wie soll ich jetzt am besten vorgehen um die signale rauszubekommen?
Kann ich die oben beschriebene Datei benutzen?oder sollte ich mir etwas anderes runterladen?

NumberFive
20.07.2005, 23:55
nein du kannsz die dll benutzen das ist schon das richtige
jetzt müssen wir erst mal die dll in ein programm von dir ein binden.



typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);


das sind die funktions typen in der dll



HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;

/* Load the library */
hLib = LoadLibrary("inpout32.dll");

if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}

/* get the address of the function */

inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}


oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}


laden der dll und zu weisen der funktions pointer



i=0x378;
x=0xFF;

(oup32)(i,x);


wenn du diesen code aus führst sollten alle LED'S an deinen Test teil an gegen. wenn du mit LPT1 arbeites wo von ich jetzt aus gehe.

I ist die Adresse des Datenregisters des LPT1 ports und x der wert den du da rein schreibst. also müsse bei 0 alle LED's aus sein.

Sorry konnte nicht früher antworte habe gerade auch stress hilft die das weiter ?

Gruß

mkRE
23.07.2005, 15:10
hi Danke für deine Hilfe werde deinen letzten Text sehr gut gebrauchen in einem anderen Thema hier habe ich auch schon einiges erfahren von jemanden zu diesen Thema.Habe schon ein Programm geschrieben das einige Ausgänge steuert.

Ich danke dir sehr vorerst.:-)

FJK
30.07.2005, 16:51
hallo

ich hab da was für dich, weiß aber nicht ob das schon erwähnt wurde
ich würde (auch wenn ich nicht alles gelesen habe) dir einen Digital analog umsetzer entfehlen

hier hab ich dir den schaltolan aufgezeichent (mit paint :) )
http://www.mullewap.net/3-Bit-Wandler.GIF
habs beim freund auf dem server gespeichert

das ganse funktioniert so
mit d0, d1 und d2, wobei der 1 pegel = 5volt und der 0 pegel 0 volt bedeutet, kannst du 2³ zustände bestimmen also 8

d0--d1--d2---spannung/V
0----0----0-------0
0----0----1-------0,625
0----1----0-------1,25
0----1----1-------1,875
1----0----0-------2,5
1----0----1-------3,125
1----1----0-------3,75
1----1----1-------4,375

wenn du mir die daten für dein motor gibst kann ich dir das individuell berechnen, denn 3 bitwandler hab ich jetzt aus meiner mappe (dank an lehrer)
man kann aber auch ein 4 bit wandler mach, da hast du dann 2^4 zustände 16 einstellmöglichkeiten

die steuerrung erklär ich dir ja schon mit der lpt :()

ist es garnicht möglich bilder auf dem server hochzuladen?[/url]

mkRE
30.07.2005, 19:15
hi danke für den Umsezter werde den gebrauchen können etwas sparsammer
:-) wollte mir nehmlich meinen mit nem OP"Addierer Schaltung" bauen.
Um aber eine Sinnvolle Arbeitschaltung mit Programm machen zu können bräuchte ich echt die möglichkeit Signale auch einlesen zu können ich arbeite auch dran leider klappt es nicht #-o .



Das mit der Hardware möchte ich eigentlich selber schaffen das nötige Grundwissen habe ich glaub ich :^o .Trotzdem danke.

Der Motor ist Unipolar frißt 0.4 A und wird mit 12 V gefüttert :-) hab Ihn heute geliefert bekommen sonst habe ich zu testzwecken mit nem Normalen Motor gearbeitet der erste ist direkt weggeschmort weil der keine Daten hatte und ich wirklich keine lust hatte diese herauszubekommen armes ding :-( :^o

mkRE
30.07.2005, 19:19
Wenn du möchtest kann ich dir meine DA Wandler auch schicken?

Und das mit den Bilder Zeigen hier verstehe ich auch nicht normal müssten die sowas hier haben?!

FJK
30.07.2005, 19:25
hallo
^^
also bei 12volt brauchst du eine interface schaltung wenn du willst gib ich dir eine
und du darfst nicht den motor so an die lpt anschließen du brauchst auf jedenfall eine freilaufdiode (1N4148 sollte glaube ich reichen, *kopfdaten*) sonst kannst du dir den controller durch die selbstinduktion zerstören

am imp arbeite ich aber ich wird mich erst nach dem wochenende damit beschäftigen, kannst du solange warten
(ist doch auch cool wenn du ein fenster programm verwendest ^^)

schick mir mal deine idee

mkRE
31.07.2005, 12:58
Danke um deine Sorge.Die Hardware wird bei mir über Optokoppler angesteuert und an die freilauf dioden habe ich gott sei dank auch mitgedacht.
Selbstverständlich kann ich warten ich finds sowieso super das du dich so einsätzt.
Was meinst du genau mit der Interface Schaltung?Die Steuerungs Platine?
Ich arbeite bis jetzt noch nicht mit einem Microcontroller hab bis jetzt kein Plan diese dinger zu Programmieren werde dieses Thema erst jetzt nach den Ferien haben.

Was genau möchtest du haben?Das Steuer Programm oder den DA Wandler?

mkRE
31.07.2005, 13:05
Hallo
Ich verwende für die Ansteuerung Optokoppler und an die freilaufdioden hab ich gott sei dank mitgedacht :-).
Was meinst du genau mit der Interface Schaltung?Die Steuerplatine?

Selbstverständlich werde ich warten ich bin sowieso glücklich darüber das du so effektiv meinen Fragen entgegen kommst!!
Was möchtest den genau haben?Die Programmidee oder den DA Wandler?

achso mit Microcontrollern arbeite ich bis jetzut noch nicht hab noch kein Plan diese dinger zu Programmieren werde dieses Thema erst nach den Ferien haben.

FJK
31.07.2005, 13:16
hallo

eine interfaceschaltung sitzt zwischen den ausgang und der anzusteuernden hardware, ich glaube die hast du da du ein optokopler verwendest.

wenn du dein projekt mit einen µ-controller machen willst, musst du aber c benutzen, denn c++ unterstüzuen die chips nicht.

ich wollte mal deinen da wandler sehen

mkRE
31.07.2005, 20:29
Hi.
Scheisse hab mit mühe grad die Schaltung gezeichnet und gescannt jetzt weiß ich nur nicht wie ich sie dir übergeben soll?! ](*,). am besten ich mail sie dir??

Achso das meintest du mit Interface ok Quasi so eine Schnittstelle zwischen ""Kleinspannung"" und ""Hochspannung"".Die hab ich soweit fertig.

Ähnelt sich C++ nicht mit c in der Programmierung?

FJK
31.07.2005, 21:00
hallo

will garnicht wissen was du für schlimme wörter in den mund nimmst ^^
meine e-mail müsstest du unter profiel sehen können

c++ ist auf c aufgebaut, aber du kannst nicht alles verwenden was du in c++ geschrieben has, außerdem werden die ausgänge von einem µ-controller anders angesprochen und du brauchst noch specielle software zum programmieren und überspielen

mkRE
01.08.2005, 12:03
hi in deinem Profiel wird deine e-mail adresse nicht angezeigt hab grad geguckt.vielleicht hast die nicht reingeschrieben?

Wie gesagt im bereich Microcontroller hab ich noch keine ahnung werde das erst bald in der Schule haben ich arbeite noch mit "Oldschool" Analog über Transistor Schaltungen :-).

mkRE
03.08.2005, 16:00
hi FJK hab dir grad eine Privat Nachricht mit meiner E-Mail adresse geschickt mail mir mal zurück ich schick dir dann die Schaltung und sonstiges.

Sven_sven
03.08.2005, 17:50
Also ich weis nicht. Ich hab mich jetzt durhch mehrere Foren gewühlt, und überall wird einem was anderes erzählt...

Insofern wäre es echt spitze, wenn mal jemand den Quellcode fürn Programm, das auf Button-klick meinetwegen 0xF0 am lpt1 an der addresse 0x367 (LPT1) ausgibt.

kann auch console sein ohne Buttons, mir alles egal. Hauptsache ich bekomm mal die Möglichkeit die Bits am LPT zu setzen...

Danke schon mal im vorraus

FJK
03.08.2005, 19:12
hallo


https://www.roboternetz.de/phpBB2/viewtopic.php?t=1841&postdays=0&postorder=asc&start=22
2.seite 11. beitrag da steht ein quelltext von mir der mit einen button 4bit setzt und mit denn anderen alle auf 0
wenn du win xp benutzt brauchst du noch ein treiber der dir die ports öffnet
und ich habe mit der addresse 0x378 gearbeitet die muss du in der oberen zeile dann auf 0x367 ändern

am einlesen wird gearbeitet

Sven_sven
03.08.2005, 22:19
Also beim Borland Builder drecks ding, das ich nur benutze, weil unser proffessro das ding so gerne mag, spuckt der mir immer sowas raus von wegen "irgendwas Assembler compilierung neu gestartet" und macht dann nix mehr.

Mir wäre ein Programm lieber, das ohne Assembler funtzt. Ich meine in VB hab ichs auch irgendwie geschafft, aber mit C++... ich bekomms kotzen...

NumberFive
04.08.2005, 08:10
hallo Sven_sven,

wie firt bis du unter windows traust du dir einen Treiber zu tauschen ?

Habe einen treiber mit dem man unter win200 (getestet) auf die Ports zu greifen kann. Für das an steuer prg würde ich dir dann den c++ code geben.

Ist das für dich vielleicht eine lösung ?

Gruß

FJK
04.08.2005, 12:49
hallo @sven_sven

was für ein betriebsystem benutzt du?
du kannst denn quelltext auch eventuell ohne die asm befehle verwenden, die brauchst du nur wenn dein compiler die outp() oder _outp() befehle nicht kennt

Sven_sven
04.08.2005, 17:22
Also, ich hab Windoof XP, und auskennen tu ich mich damit sehr gut. Aber wenns schief geht, iss auch egal, da ich sowieso mal wieder formatieren muss...

Öhm, als Compiler benutz ich den Borland C++ Builder 5.0 weil, wie schon gesagt, unser Prof das so will.

Aber was genau meinst du mit "Treiber"? Also vllt kennt ihr das Prog "UserPort" mit dem hab ich die Porst frei geschaltet, als ich das mit VB gemach hab...

NumberFive
04.08.2005, 19:39
Ich habe eine treiber geschrieben der keine ist.

will heisten das teil legt sich auf prot addressen die sind so mit blockiert.
(Windows kenn dan den Druckerport nicht mehr).

aber man kann von aussen mit ihm reden und so mit direkt drauf zu greifen.

du muß dann über manuelle treiber installation und der inf datei den treiber ein binden.

[PortIO.LC0]
ConfigPriority=DESIRED
IOConfig=3@378-37F ; 8 bit decode

[PortIO.LC1]
ConfigPriority=DESIRED
IOConfig=3@3BC-3BE ; 3 ports 8 bit decode

[PortIO.LC2]
ConfigPriority=NORMAL
IOConfig=3@378-37F ; 3 ports 8 bit decode

so habe ich das mal vor konfiguriert.

Gruß

PS: das teil ist aus dem Microsoft DDK ich habe nur bissle an gepasst

FJK
04.08.2005, 21:20
hallo

wow einen treiber selber schreiben, keine ahnung wie das geht, ich nin beeindruckt

ich habe da noch eine idee, ich weiß nur leider nicht ob er unter winxp geht, einfach mal ausprobieren passieren kann glaube ich nix

http://www.b-kainka.de/portnt.htm
ist ein programm das du einfach im hintergrund laufen lässt
hier der direkte download link http://www.b-kainka.de/freeport.zip

Sven_sven
05.08.2005, 16:18
hmm... also mit dem triber zeugs komm ich nicht klar, aber ich denke dieses freeport iss nen guet ansatz...

vllt kann ich damit weitermachen. Wie greif ich denn damit dann auf den LPT zu?

mkRE
05.08.2005, 16:30
Hi habe auch XP dieses freeport ist eine gute alternative zu allem man muss es zwar einschalten und abschalten "manuel" aber was solls :-).


P.S. besteht die möglichkeit freeport über c++ anzusprechen das es immer den Druckerport beim Starten eines Programms freischaltet ohne im hintergrund rumzuklicken?

mkRE
05.08.2005, 16:56
Um Freeport zu starten, muss zunächst Twichw32.Zip ausgepackt werden. Unter Windows95/98 erstellt man am besten ein Verzeichnis FreePort, in das man neben FreePort.Exe die Dateien Vichw00.vxd und Tvichw32.dll kopiert. FreePort.exe findet dann die DLL und diese den Treiber. Beim Öffnen des Treibers erscheint ein Meldungsfenster des Shareware-Autors.

Unter Windows NT4 muss der Treiber Vichw00.sys in das Verzeichnis WinNT\System32\Drivers kopiert werden. Die DLL darf im Verzeichnis von FreePort.exe stehen oder kann ins Windows-Verzeichnis kopiert werden.

NumberFive
05.08.2005, 17:06
ist genau das selbe in grün nur das der Treiber nur für kurze zeit geladen wird und dann wieder entladen wird. Es gibt keine Andere möglichkeit
als einen Treiber zu verwenden.

http://www.geekhideout.com/iodll.shtml

hier das ist auch so was das ist eine dll die macht das für dich da braucht man kein externes programm für.

NumberFive
05.08.2005, 17:07
Oh da habe ich wohl zu lange gebraucht bei Tippen

Sven_sven
06.08.2005, 13:57
Bei mir kommt dann immer "Access violation at address 000000, bla bla bla"

NumberFive
06.08.2005, 14:11
bei was den

füll text füll text

gruß

Sven_sven
07.08.2005, 12:12
Öhm, füll text füll text?

als quelltext hab ich das von oben übernommen, und dann einfach nen button gemacht mit
{
PortOut(0x367, 0xf0)
}

Für PortOut könnt ihr jetzt den jewailigen befehl einsetzen, ob Out oder _Out oder was auch immmer

kompilieren klappt dann, aber wenn ich dann auf den button klicke komm halt die fehlermeldung...

edit: kennt ihr die Inpout32.dll, die hab ich bei VB imer gebraucht, damit kommte man jeden I/O Port anprechen, wäre das nicht möglich, die auch mit c++ zu nutzen?

FJK
07.08.2005, 12:45
hallo

vieleicht solltest du

outp(0x367,240);
benutzen

wenn du das in borland benutzt muss du denn befehl mit ein ; abschließen. außerdem bin ich mri nich sicher ob du ein hex-code übergeben kannst

Sven_sven
07.08.2005, 18:12
In welcher Header datei ist der den drin?

Borland meint immer "Aufruf der undefinierten fuktion 'outp'"

FJK
10.08.2005, 11:01
hallo

https://www.roboternetz.de/phpBB2/viewtopic.php?t=1841&postdays=0&postorder=asc&start=44
da ist alles beschrieben

der fehler sagt das er die funktion outp nicht kennt, für dich heißt das dass du sie via asm selber schreiben musst
einfach den code unter TForm1 *Form1; schreiben


void outp (unsigned int portadr, unsigned char value)
{
_asm mov edx,portadr
_asm mov al, value
_asm out dx,al
}


hast du eigendlich conio.h includet

die header dateien spielen keine rolle, die bleiben so wie sie sind

Sven_sven
10.08.2005, 17:07
conio iss drin...

wenn ich versuche mit deimem code zu compilieren kommt das:

[C++ Warnung] Unit1.cpp(14): W8002 Compilierung mit Assembler-Sprachfähigkeiten neu gestartet


und dann programm wird nicht gestratet...

FJK
10.08.2005, 18:17
hallo

das ist nur eine warnung das programm müsste trotzdem starten
zeig mal dein quelltext

Sven_sven
10.08.2005, 20:46
Jo, ich habs..

aber das mit dem assembler hat nicht gefuntzt... hab genau wie du gesagt hat, den asm teil komplett unter die deklaration von Form1 geschrieben...

jetzt hab ichs endlich mit der inpotu32.dll gescafft, so wie ich es wollte.

vllt lieghts an den einstellungen vom builder, das das mit dem asm nicht klappt¿¿

bin zumindest jetzt erst mal happy, das ich es geschafft hab..

danke nochmal für den link

Sven_sven
20.08.2005, 15:06
Also ich poste es mal für alle anderen :)

Meine Header:


#include <stdio.h>
#include <windows.h>
#include <time.h>
//-------------------------------------------------------------------------
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

void lib_laden();
void Out(int port, int wert);
void lib_schliessen();

HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
short x;
int i = 0x378;
//-------------------------------------------------------------------------
void lib_laden ()
{
hLib = LoadLibrary("inpout32.dll");
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (hLib == NULL || inp32 == NULL || oup32 == NULL) {/*** ERROR ***/}
}
void Out(int port, int wert)
{
oup32(port, wert);
}
void lib_schliessen()
{
FreeLibrary(hLib);
}



man kann dan mit

Out(portaddresse, wert) an dem bestimmten port ausgeben.

Aber Ganz wichtig: Man muss vorher einmal
lib_laden(void);
ausführen... ich mach das bei Form load vom ersten formular :)