AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

rs232 schnell ansprechen

Ein Thema von knoby · begonnen am 16. Sep 2008 · letzter Beitrag vom 17. Sep 2008
Antwort Antwort
knoby

Registriert seit: 30. Okt 2007
6 Beiträge
 
Delphi 7 Enterprise
 
#1

rs232 schnell ansprechen

  Alt 16. Sep 2008, 20:29
Hey,

folgendes Problem:

Ich habe mit nem Kumpel nen Interface für den seriellen Port am Pc zusammengelötet. Darauf werden über Schieberegister Relais geschaltet und Eingänge eingelesen.

Es muss so angesprochen werden:

Eingänge in die Schiregs holen (dtr einmal auf high und sofort wieder auf low)
dann mit txt den takt angeben und jeweils dem rts die ausgänge der schiberegister setzen.
auf dcd werden die eingänge entgegengenommen

Es werden 16 einsen und nullen durchgeschoben. Eine 1 steht für geschaltet 0 für nicht geschaltet.
Bei den Eingängen werden ebenfals einsen und Nullen an den dcd gesendet und ausgelesen

Bis jetzt habe ich zur Steuerung der Schnitstelle die Port.dll verwendet. Nur jetzt sind wir dabei komplexere Programme zu schreibne udn da stöst die dll langsam an die Grenzen, sprich die Rutine wird zu langsam.

Das ist der Code mit dem wir das Interface ansteuern:

Delphi-Quellcode:
  
  dtr(1); //strobe on //Eingänge ins Schireg holen
  dtr(0); //strobe off

  for n:=1 to 16 do
  begin
    rts(booltoint(aOUT[n])); //ausgang setzen

    if dcd = 1 then
    begin
      aIN[n] := true; //eingang lesen
    end
    else
    begin
      aIN[n] := false;
    end;

    txd(1); //taktgeben
    txd(0);
  end;
  dtr(1); //strobe //Ausgänge setzten
  dtr(0);

Also haben wir uns gedacht: Könnten wir nicht eigene Rutinen schreiben die auf die Pins des Ports zugreifen.
Da war der erste Gedanke das Ganze in Assembler zu schreibne in Delphi.... Soweit so gut allerdings macht uns da ja Windows einen Strich durch die Rechnung das er uns nicht direkt auf die Hardware zugreifen läst...


Daher meine Frage: Wie kann ich eine möglichst schnelle Ansteuerung schreiben die genau das oben beschriebene Protokoll einhält?

Schonmal danke für die Antwort


KnobY


PS: Ähnliche Themen gab es schon weiß ich aber keins davon brachte mich wirklich weiter
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: rs232 schnell ansprechen

  Alt 17. Sep 2008, 02:41
Zitat von knoby:
...
Daher meine Frage: Wie kann ich eine möglichst schnelle Ansteuerung schreiben die genau das oben beschriebene Protokoll einhält?

PS: Ähnliche Themen gab es schon weiß ich aber keins davon brachte mich wirklich weiter
Hallo,

das wird nicht ohne spezielle Hardware gehen, die im PC ist nicht geeignet. Begründung:

1. Ist die Routine unterbrechbar durch andere Interrupts, so können die Unterbrechungen BELIEBIG lang sein, ein definiertes Zeitraster lässt sich so nicht einhalten, auch keine Maximalzeit.

2. Ist die Routine nicht unterbrechbar (ich glaube, das geht unter WIN32 garnicht), so ist der Ablauf viel zu schnell - Clockimpulse wären nur nsec lang und vom angeschlossenen System nicht mehr erfassbar. Schliesslich läuft ein externer Prozessor mit 20 MHz oder so, der interne mit 2 GHz oder mehr.

3. Eine zeitliche Anpassung an den Prozessor mit Warteschleifen ist sowieso Quatsch, und Timerfunktionen mit µsec würden zumindest für die Dauer der Routine den PC weitgehend lahmlegen.

4. Wenn die serielle Schnittstelle virtuell ist, z.B. über USB, ist die ganze Diskussion eh sinnlos, weil da garkeine Reaktionszeiten definierbar sind. Jedenfalls nicht im gewünschten Zeitbereich.

Daher meine Meinung: so ein Protokoll muss von einem eigenen Prozessorchen erzeugt werden. Ein serielles Interface mit USB-Anschluss ist ja auch nichts anderes. Mit dem entsprechneden Knowhow könnte man so einem Interface das Gewünschte beibringen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#3

Re: rs232 schnell ansprechen

  Alt 17. Sep 2008, 09:32
Hi,

ein definiertes Zeitraster ist ja gar nicht erforderlich - es wird der Takt ja vom PC vorgegeben.
Das kann durchaus funktionieren. Die Problematik ist ausschliesslich:

Wie kann man das schneller machen.

Die Port.dll ist daher die eigentliche Bremse. Es wäre also nötig, diese Funktion so in eine dll zu verpacken, die unter den gleichen Sicherheitsaspekten wie die Port.dll ausgeführt werden kann, dass man dann diese direkt benutzen kann.

Einfach ist das sicher nicht. Ich glaube aber zur Port.dll gibt es irgendwo Quellcode. Musst mal googeln.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
knoby

Registriert seit: 30. Okt 2007
6 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: rs232 schnell ansprechen

  Alt 17. Sep 2008, 16:40
eben

den tackt gibt der PC an da ist es Egal ob der nun mit 1 Hz Taktet oder schneller oder die Taktfrequenz kann auch variable sein einzig und allein begrenzt is se durch die reaktionszeit der platine und die ist so klein das ich da keine probleme bekomme..

Und wie thkerkmann schon sagte ist die Bremse halt die Port.dll. Bis jetzt habe ich aber noch keine weg gefunden die zum umgehen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz