Parallelport ansteuern

Rund um die LCL und andere Komponenten
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

chickendev hat geschrieben:das ist ja cool!

http://www.pollin.de/shop/dt/MTQ5OTgxOT ... ET_IO.html" onclick="window.open(this.href);return false;

Ist das genauso einfach zu benutzen wie der LPT ? (wegen den digitalen Ausgängen)?
Ich habe von Elektronik nicht so viel Ahnung.
Das ist genauso wie LPT, nur eben mit Synapse ansprechen. Über die 8 IO-Schnittstellen kannst du die Arduino ansprechen, respektive die Daten von der Arduino an den PC senden lassen. Die Daten werden einfach in einer Kette von 0 und 1 aufbereitet und gesendet, das ist mit Digital gemeint. AC-DC nennt man diskrete Werte, also da kann man echte Spannungen im Rahmen der Versorgungsspannung erzeugen(Verstärkung ist aber immer möglich) und auf diese Weise Analoge Daten(z.B. Temperaturmessung mit analogem Sensor) in beide Richtungen senden. Für dein PC-Proggi musst du die aber ohnehin immer digital aufbereiten.
Flexibler geht kaum. Ich hab nochmal mal Freeduino gegoogelt(Arduino nur Lizenzfrei), die bekommt man in Thailand schon für € 27,- plus Versand. Aber über UPS ist das auch nicht teuer. Aber in jedem Fall mit deutschen Preisen vergleichen, sonst legt man sich mit den Versandkosten eventuell selbst aufs Kreuz. Und bei der Garantie kommt man in Thailand natürlich schlecht weg, sowas kennen die da nix.

Flexibler gehts also kaum noch und du bekommst im Netz reichlich Tipps und Beispielprogramme dafür. Für Synapse kannst du hier im Forum fragen und dein PC-Proggi volständig in PASCAL entwickeln.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

Das auslesen funktioniert jetzt schonmal, jetzt ist nur die Frage, wie stelle ich das mit dem schreiben an?

Hier das ist mein Code:

Code: Alles auswählen

unit Main;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  {$IFDEF WIN32}
   Windows;
  {$ENDIF}
  {$IFDEF Linux}
  ports;
  {$ENDIF}
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
{$IFDEF WIN32}
function Inp32(wAddr:integer):integer; stdcall; external 'inpout32.dll';
{$ENDIF}
 
{$IFDEF Linux}
function ioperm(from: Cardinal; num: Cardinal; turn_on: Integer): Integer; cdecl; external 'libc';
{$ENDIF}
 
{$R *.lfm}
 
procedure parallelport_initialisieren(adresse : integer);
var dummy : integer;
 
begin
  try
    {$IFDEF Linux}
       dummy := ioperm(adresse, 8, 1);
    {$ENDIF}
  except
     showmessage('Fehler beim Initialisieren des Parallelports. Adresse: ' + inttostr(adresse))
  end;
 
end;
 
 
function parport_wert(parport_adresse : integer) : integer;
begin
  try
      {$IFDEF WIN32}
         result := inp32(parport_adresse);    // 'parallel'
      {$ENDIF}
 
      {$IFDEF Linux}
         port[parport_adresse] := $00;
         result :=  Integer(port[parport_adresse]);
 
      {$ENDIF}
   except
       showmessage('Fehler beim Abfragen des Parallelports in function parport_wert. Adresse: ' + inttostr(parport_adresse));
 
   end;
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(parport_wert($378)));
end;
 
 
 
 
end.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Parallelport ansteuern

Beitrag von mschnell »

schnullerbacke hat geschrieben:Wäre da nicht die ne serielle oder USB Schnittstelle geeigneter?
Ich habe mit USB bei "embedded" Projekten schlechte Erfahrungen. Die Verbindung geht ab und zu verloren (sowohl bei Linux als auch bei Windows, bei Platten und anderen Devices; ich habe nicht herausbekommen, warum). Würde ich für unbeobachtete Systeme nicht einsetzen.

Mit etwas Pech werden die Hühner gegrillt :( .

-Michael

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

mschnell hat geschrieben:
schnullerbacke hat geschrieben:Wäre da nicht die ne serielle oder USB Schnittstelle geeigneter?
Ich habe mit USB bei "embedded" Projekten schlechte Erfahrungen. Die Verbindung geht ab und zu verloren (sowohl bei Linux als auch bei Windows, bei Platten und anderen Devices; ich habe nicht herausbekommen, warum). Würde ich für unbeobachtete Systeme nicht einsetzen.

Mit etwas Pech werden die Hühner gegrillt :( .

-Michael
Arduino ist nicht zwingend USB @Michael, das ist ein Microcontroler-System das programmierbar ist. Die Verbindung zum Rechner kann man frei Schnauze bauen, eben auch per TCP/IP. Das setzt auf ATMEGA-Controlern auf und ist inzwischen für 8/16/32 Bit verfügbar. Es gibt dafür auch massenweise Pheripherie, z.B. LC-Display, Tastatur usw.. Alles verhältnismäßig einfach zusammen baubar. Drahtbrücken gehen genauso wie Flachkabel mit Steckerleisten. Das System hat schon was für solche Aufgaben.
Von der breiten Unterstützung im Internet mal abgesehen, da existiert sogar ein Forum.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

Ich werde erstmal bei dem Parport bleiben, sonst werden das noch ChickenMC-Nuggets. Ich habe natürlich noch einen Manuellen Überhitzungsschutz per Tempraturschalter eingebaut.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Parallelport ansteuern

Beitrag von mschnell »

schnullerbacke hat geschrieben:Arduino ist nicht zwingend USB @Michael, das ist ein Microcontroler-System das programmierbar ist. Die Verbindung zum Rechner kann man frei Schnauze bauen, eben auch per TCP/IP.
Ich wollte auch gar nichts gegen Arduino sagen, nur mit USB habe ich bei mehreren (völlig anderen System) Probleme.

Ich bin sogar sehr interessiert an Arduino. Gibt es ein(e) preiswertes Board (Kombination) mit Ethernet, mit denen man Temperatur-Sensoren an langen Kabeln (also nicht I²C sondern z.B. PT1000) ansteuern kann und das gleichzeitig ein 230 V (Halbleiter) Relais an Bord hat (also eine ähnliche Anwendung wie hier ursprünglich angesprochen ?

Lieber wäre mir ein PIC24 - Board, weil ich mich da mit der Programmierung schon gut auskenne, aber etwas anderes muss ja nicht schlechter sein.

Gruß und Dank,
-Michael

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

mschnell hat geschrieben: Ich bin sogar sehr interessiert an Arduino. Gibt es ein(e) preiswertes Board (Kombination) mit Ethernet, mit denen man Temperatur-Sensoren an langen Kabeln (also nicht I²C sondern z.B. PT1000) ansteuern kann und das gleichzeitig ein 230 V (Halbleiter) Relais an Bord hat (also eine ähnliche Anwendung wie hier ursprünglich angesprochen ?

Lieber wäre mir ein PIC24 - Board, weil ich mich da mit der Programmierung schon gut auskenne, aber etwas anderes muss ja nicht schlechter sein.

Gruß und Dank,
-Michael
@Michael, guck mal bei Conrad rein. Die haben für die ATMEGA-Umgebung massenweise Module, die passen i.d.R. auch zum Arduino. Aber man kann das mixen, die Betriebsspannungen sind gleich.
Mach ich auch immer so, erst bei Conrad gucken, Bezeichnung kupfern und dann googeln. :wink:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

Hast du zufällig eine Idee wie ich die Eingänge, also die Druckerflags abfragen kann, es gibt ja glaube 4 oder 5 insgesamt beim LPT?

Das Problem ist nämlich das die DLL nur ein Byte also die 8 Bits zurück gibt :?

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

chickendev hat geschrieben:Hast du zufällig eine Idee wie ich die Eingänge, also die Druckerflags abfragen kann, es gibt ja glaube 4 oder 5 insgesamt beim LPT?

Das Problem ist nämlich das die DLL nur ein Byte also die 8 Bits zurück gibt :?
Das muss man mit logischen Verknüpfungen machen, die Flags stecken in dem 1 Byte drin die von der DLL kommen. Bsp.:

Code: Alles auswählen

$00000000 = 0
$000000001 = 1
$000000011 = 3
Wenn man die alles durchtestet ist max für 1 Byte = 255. Das kann man nun logischen "Verunden", auch logische Subtraktion genannt, das ergibt dann:

Code: Alles auswählen

var i, i1, res: integer;
begin
  i  := 101; // entspricht $01100101
  i1:= $10000000; // entspricht 128;
  res := i1 and i; // binäre Mathematik res = 0, weil keine Stellenübereinstimmung
end.
Probier das Beispiel nochmal mit (logische Addition), das sollte res = 229 geben.
Auf die Weise kann man die Flags als Konstante Werte definieren und entsprechend durch logische Subtraktion nachsehen ob sie gesetzt sind.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

Danke für die ausführliche Antwort. Das ist ja verrückt das in den 8 Bit auch noch die Flags sind :shock:

Damit ich das nachvollziehen kann muss ich wahrscheinlich zuerst das Ganze Hardwareseitig umsetzen damit ich dann sehe ob etwas bei rauskommt^^

Du weißt nicht ganz zufällig wie ich die Flags schalten kann? (Hatte irgendwo gelesen das man mit einem 2200 Ohm Widerstand auf Masse überbrücken muss - muss ich dann wohl nochmal raussuchen)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

chickendev hat geschrieben:Danke für die ausführliche Antwort. Das ist ja verrückt das in den 8 Bit auch noch die Flags sind :shock:

Damit ich das nachvollziehen kann muss ich wahrscheinlich zuerst das Ganze Hardwareseitig umsetzen damit ich dann sehe ob etwas bei rauskommt^^

Du weißt nicht ganz zufällig wie ich die Flags schalten kann? (Hatte irgendwo gelesen das man mit einem 2200 Ohm Widerstand auf Masse überbrücken muss - muss ich dann wohl nochmal raussuchen)
Setzen funktioniert durch logische Addition:

Code: Alles auswählen

var i, i1, res: integer;
begin
  i  := 0;
  i1:= $00010000;
  res := i or i1; // Ergebnis in res = $00010000
end.
Das sendet man an den Controler und ab da muss deine Hardware umsetzen. Du kannst als Datentyp mein ich auch shortint nehmen, das ist gerade ein Byte lang wenn ich das recht entsinne.
Mit eine ohmschen Widerstand von 2.2 k auf Masse ziehen heisst ja nur, das am R die gesamte Signalspannung abfällt. 5,3 V = logisch 1 mein ich bei der Parallelen. Bei 0 V ist es dann eben auch logisch 0.

Im übrigen macht die Parallele ja auch nur ein Xon/Xoff Protokoll und noch Senden um Empfangen, das braucht gerade mal 2 Bit. Da ist bei 8Bit eben noch reichlich Luft. :wink:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

Ja, das Problem mit ShortInt ist das es "unsigned" sein muss, und das habe ich nicht hinbekommen (die Deklaration, in C war das ganz einfach, einfach unsigned shortint), denn nur unsigned ist es 0-255, ansonsten ist es -127 bis 127.

Was ist denn bei deinem Beispiel das i und il ?
Ich verstehe noch nicht so wirklich wie das funktioniert mit der logischen Subtraktion.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

chickendev hat geschrieben:Ja, das Problem mit ShortInt ist das es "unsigned" sein muss, und das habe ich nicht hinbekommen (die Deklaration, in C war das ganz einfach, einfach unsigned shortint), denn nur unsigned ist es 0-255, ansonsten ist es -127 bis 127.

Was ist denn bei deinem Beispiel das i und il ?
Ich verstehe noch nicht so wirklich wie das funktioniert mit der logischen Subtraktion.
Dein Programm muss irgendwie die Flags zusammensetzen, i könnte z.B. die Flags für Xon und Senden halten:

Code: Alles auswählen

i := $11000000;
i1 bekommt jetzt bestimmte Flags gesetzt:

Code: Alles auswählen

I1:= $00010010
Nun möchtest du beide zusammen setzen, das erreicht man durch logische Addition:

Code: Alles auswählen

res:= i or i1; // Ergebnis in res = $11010010
Bei der Subtraktion sehen wir nach ob ein bestimmtes Bit gesetzt ist:

Code: Alles auswählen

i:= $11010010; 
i1 := $00000010; // dieses Bit wollen wir erkennen wenn es gesetzt ist
res := i and i1; // res ist jetzt = $00000010
Das liegt daran, das in i und i1 das zweite Bit von rechts auf 1 steht. Bei der logischen Subtraktion bleibt diese 1 erhalten weil sie in beiden Variablen existiert, alle anderen werden gelöscht.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

chickendev
Beiträge: 37
Registriert: Do 23. Feb 2012, 03:41

Re: Parallelport ansteuern

Beitrag von chickendev »

So langsam verstehe ich das :) :) :)

Ich werde mal morgen sehen wie das mit der Hardware läuft und melde mich dann wieder^^

BTW:
Ich habe eine Methode gefunden wie man Lüfter mit Timern bzw. Impulsen (und einem Kondensator) regeln kann so das diese rund dennoch rund laufen.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Re: Parallelport ansteuern

Beitrag von schnullerbacke »

chickendev hat geschrieben:So langsam verstehe ich das :) :) :)

Ich werde mal morgen sehen wie das mit der Hardware läuft und melde mich dann wieder^^

BTW:
Ich habe eine Methode gefunden wie man Lüfter mit Timern bzw. Impulsen (und einem Kondensator) regeln kann so das diese rund dennoch rund laufen.
Der Vorteil besteht darin, dass du dir Konstanten für die Bit-Muster anlegen kannst und damit direkt vergleichen und auch die Varible belegen kannst:

Code: Alles auswählen

const
  c_einflag = $00001000;
  c_nocheinflag = $00000010;
  c_dreiflag = $00000100;
 
var
  i, i1: integer;
 
begin
  i:= c_einflag or c_dreiflag; // ergebnis i = $00001100
  if (i and c_dreiflag) then begin
     // stümmt
  end else begin
     // stümmt nicht
  end;
end.
Mit dem Beispiel kannst du dann mal rumspielen, lass dir auch die integer-Werte dazu mal anzeigen. Richtig benutzt kann man damit sehr übersichtlich seine Filter aufbauen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten