![]() |
Parallelport abfragen
Hallo,
habe ein kleines Programm, welches mittels INPOUT32.DLL die Eingänge des Parallelport abfragt. Das funktioniert auch schon problemlos. Einfach einen Timer genommen, Intervall von 50ms und Label1.Caption := IntToStr(Inp32(890));. Dann kann ich anhand des Label schön sehen, ob jetzt die Pins high oder low sind. Das eigentliche Problem ist jetzt, dieses ganze Abfragen passiert ja nur ca. 20 mal in der Sekunde (selbst wenn ich das Intervall auf 1ms setze, nur 1000 mal). Ich habe aber einen Schmitt-Trigger der eine Frequenz von mindestens 1kHz bis maxinmal 7kHz "produziert". Diese Frequenz müsste ich jetzt über den Parallelport "messen". Der Timer ist viel zu langsam und außerdem ist es ja auch recht uneffektiv so oft den Port abzufragen. Deswegen müsste bei jedem Wechsel des Signalpegels eine Art Interupt ausgelöst werden. Habe aber keine Ahnung wie man so etwas macht bzw. ob es überhaupt geht. Eigentlich müsste es ja möglich sein, weil bei der Datenübertragung wird ja auch mit solchen bzw. noch höheren Frequenzen gearbeitet. Besten Dank schomal |
Re: Parallelport abfragen
Was ist der Sinn dahinter? Willst du ein Programm schreiben, dass einen CPU von 2 GHz sein leben lang damit beschäftigt auf ein Signal am Paralellport zu warten?
Wenn du das nur zu Testzwecken brauchst ok, aber ich rate dir davon ab das für halbwegs produktive Dinge zu machen. Da würde ich überlegen, ob ein MC mit entsprechendem Programm nicht besser wäre, der dann per USB angeschlossen wird? Hab irgendwo gesehen, dass es dafür so eine Telnet artige Schnittstelle gibt um sich gegenseitig Daten zu schreiben. Naja gut also ich arbeite grad selber an so einem MC und weis noch nicht viel darüber ^.^ Ziel soll es sein ein Infrarot-In/Output zu basteln für ein Media PC. |
Re: Parallelport abfragen
Hast du schon mal geschaut auf wieviel der neuen PC's es überhaupt noch eine Parallelschnittstelle gibt? ich würde wie seim vorgeschlagen hat sowas mittels USB erledigen.
|
Re: Parallelport abfragen
Naja nicht unbedingt.. also erstens dauert es länger das überhaupt zu bauen und man ist nicht so flexibel wenn es sich nur um eine Testumgebung handelt (Delphi mal eben das Programm abändern vs. Programmiergerät auspacken um den MC zu flashen).
Sowie ich das vermute wird das eher was zum testen und basteln sein n Logicanalyser oder ein Oszilloskop (wobei ich da nicht ganz verstehen würde wo jetzt das Analog -> Digital erfolgt ^.^) |
Re: Parallelport abfragen
Wenn es was kosten darf schau mal hier:
![]() Die Dinger haben API's mit bei. Ansonsten über einen µC Zählen und den Zählwert entweder über USB oder einfacher RS232 übertragen. [edit=mkinzler]Url-Tag gefixt Mfg, mkinzler[/edit] |
Re: Parallelport abfragen
Zitat:
Von einem µC will ich eingentlich (erstmal) fern bleiben, das Problem ist das ich mich weder mit C noch mit Assembler auskenne, außerdem wären es wieder zusätzliche Kosten. Zitat:
Zitat:
Zitat:
Danke schön für die schnellen Antworten |
Re: Parallelport abfragen
Also für eine CNC-Maschine wird der Parallel-Port nicht schnell genug sein. Wie viele Impulse gibts denn da pro Sekunde?
Steuerst du die Schrittmotoren direkt auch mit dem Parallel-Port an? |
Re: Parallelport abfragen
Schliess an den Parallel-Port einen Zähler an und frag jeweils den Zählerstand ab.
Über die vergangene Zeit und die Zähler-Differenz ergibt sich die Frequenz. |
Re: Parallelport abfragen
Zitat:
Direkt kann man Schrittmotoren ja nicht ansteuern, ich steuere die Schaltung ![]() |
Re: Parallelport abfragen
Zum Ansteuern der Motoren wird das reichen, nur zum Zählen ist es zu langsam.
Wenn ich CNC-Maschine höre, denke ich immer gleich an ![]() |
Re: Parallelport abfragen
Zitat:
Zitat:
|
Re: Parallelport abfragen
Hi
MC ist die richtige Wahl und muß unter Umständen gar nicht so aufwändig sein. Ich arbeite mit einem preiswerten Pollin Board, einem Steckpanel für schnelle Tests und an Software nehme ich PonyProg und AVR-Studio. Ich weiß, es gibt auch komfortablere Lösungen, aber für einen Einstieg ist der Weg gar nicht so schlecht. Hast du erst mal den Anfang geschafft, gibt's immer wieder neue Aufgaben zu lösen und so ein MC gibt bei minimalem Aufwand schon ein riesiges Anwendungsgebiet. Alles was du brauchst ist unter 100 € zu bekommen.... Die Lösung über den Parallelport kann ich nur empfehlen, wenn du einen alten "86 hast und direkt mit Assembler unter DOS auf die Schnittstelle zugreifen kannst. Steinzeittechnik halt, aber hier bekommst du schon einiges an Tempo hin. Speziell die Interrupt-Technik kann für schnelle Routinen benutzt werden, ohne die restlichen Programme platt zu machen. Aber wer macht das noch ? Also, es bleibt für die moderne Zeit der MC. Gruß oldmax |
Re: Parallelport abfragen
Zitat:
|
Re: Parallelport abfragen
Interrupt-Handler:
![]() |
Re: Parallelport abfragen
Mittag,
habe doch noch eine andere Lösung gefunden. Ist zwar sehr Prozessorlasstig, daher die Freuqenz aber nur kurz gemesen werden muss, ist das akzeptabel (zumindest für mich :wink:). Hier mal der gesamte Quelltext, benötigt wird die ![]()
Delphi-Quellcode:
Einzigster Haken ist, das die Freuqenz nur bis ca. 900 Hz. angezeigt wird, deswegen habe ich einen Freuqenzteiler (2:1) eingebaut. Die angezeigte Frequenz muss dann einfach nurnoch mal 2 genommen werden (ich weiß, ist zwar ungenau, aber meiner Meinung nach kommt es auf 1 Hertz meist sowieso nicht an).
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, mmsystem, AppEvnts, ShellApi, ExtCtrls, ComCtrls, StdCtrls; type TForm1 = class(TForm) ProgressBar1: TProgressBar; Timer1: TTimer; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure OnIdle(Sender: TObject; var Done: Boolean); procedure OnTimer; private { Private-Deklarationen } public { Public-Deklarationen } Zeit: int64; Counter: integer; //Variable zum Zählen der Timer durchläufe end; var Form1: TForm1; gelesen, schreiben: Integer; STyp: String[3] = 'LPT'; BasAdr: Integer = $378; ComHandle: THandle; before: boolean = true; implementation {$R *.dfm} procedure Out32(Addresse:Integer; Wert:byte);stdcall;export; external 'INPOUT32.DLL'; function Inp32(Addresse:Integer):Byte;stdcall;export; external 'INPOUT32.DLL'; procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean); begin done:=false; OnTimer; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle := OnIdle; end; procedure TForm1.OnTimer; var adr: integer; begin adr:=Inp32(BasAdr+1);//Lesen if (adr = 254) and (before = true) then begin inc(counter);//Zähler um 1 erhöhen before := false; end; if adr = 126 then before := true; if timegettime-Zeit>1000 then //Jeweil nach einer Sekunde Frequenz ausgeben begin Label1.Caption := IntToStr(counter); //Freuqenz ausgeben zeit:= timegettime; //neue Start Zeit ermitteln Counter := 0; //und Zähler wieder auf 0 end; end; end. |
Re: Parallelport abfragen
Wäre eventuell eine Alternative?
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz