PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gerätesteuerung USB



Ghostrider
12-11-2008, 16:15
Hallo,

ich möchte ein Programm neu schreiben, welches mehrere Geräte ansteuert und ausliest. Bisher geschieht das Ganze über COM-Ports und eine spezielle Karte, die bis zu 10V Spannung ausgeben kann. Nun möchte ich auf ein neueres System updaten, da vor allem die COM-Ports nicht gerade stabil laufen (bei Abstürzen muss man bestimmte Parameter wieder neu einstellen). Ich möchte Linux verwenden, und da ich nicht unbedingt noch Treiber für exotische Karten programmieren möchte, war die Idee, alles über USB laufen zu lassen.
Momentan habe ich von Steuerung irgendwelcher Hardware noch null Ahnung. Daher zunächst einmal die Frage an Leute, die sowas vielleicht schonmal gemacht haben:
Ist die Steuerung über USB die einfachste Möglichkeit oder sollte ich einen anderen Ausgang verwenden? Und welche Literatur ist zum Einarbeiten in die Materie zu empfehlen? (C++ auf Konsolenbasis kann ich soweit)

jeebee
12-11-2008, 18:17
Ohne jetzt genaueres zu Wissen: Wenn du unbedingt die 10V-Outputs als Spannungs-/Stromversorgung brauchst, fällt USB schon mal weg, da gibts nur 5V Spannungsversorgung mit max. 500mA.

rais
12-11-2008, 22:12
Moin moin,
da Deine Geräte zuvor seriell angesprochen wurden, sollte es zumindest machbar sein ... steht das `S' in `USB' nicht für `serial'?

BTW: dieses `bis zu 10 V' deutet erstmal auf Analogwertausgbe, da wirst Du imho etwas eigene Hardware einsetzen müssen ... und dem Teil könntest Du auch einen DC/DC-Wandler spendieren, so Du Deine Geräte nicht auf 5V-Pegel anpassen kannst ... wenn es denn bei USB bleibt.;)

Was ich mich aber derzeit frage ...


Momentan habe ich von Steuerung irgendwelcher Hardware noch null Ahnung.

d. h. Du hast diese Deine `exotische' Karte nicht selbst programmiert -- darfst Du eigentlich tun, was Du da vorhast?
Um welche Karte handelt es sich genau?
bzw. was genau sind das für `Geräte', die Du da anzusprechen versuchst?

MfG

almoeli
13-11-2008, 09:26
Hallo,

also erstmal haben COM Ports (RS232) und USB überhaupt nichts miteinander zu tun. USB definiert ein komplexes Protokoll zur Steuerung von kompletten Geräten. RS232 definiert nur eine reine Datenübertragung. Auch auf elektrischer Signalebene arbeiten die beiden Schnittstellen vollkommen unterschiedlich.

Daraus folgt. dass du als Gegenstelle bei USB immer einen USB Device Controller benötigst, um das Gerät überhaupt erst einmal am USB Port deines Rechenrs anschließen zu können.

Die 5V beziehen nur auf die Versorgungsspannung die durch den USB Port zur Verfügung gestellt wird.. Die Datenleitungen arbeiten mit geringeren Pegeln wie z.B. 3.3V.

Um dir wirklich helfen zu können, musst du schon etwas mehr Informationen geben. Was macht deine Software bis jetzt über die COM Ports um die Geräte zu steuern? Wie stellts du dir das nun über USB vor?

Gruß

almoeli

Ghostrider
13-11-2008, 11:10
über die COM-Ports wird ein Lock-in Verstärker und eine Hallsonde gesteuert und ausgelesen. Über die 10V-Karte wird ein Netzteil gesteuert. Die Geräte sind uralt und haben keinen direkten USB Anschluss.
Für die 10V dachte ich daran, ein USB Signal zu verstärken. Dazu muss man natürlich über USB eine fest definierte Spannung ausgeben können.

@ almoeli: Die Verwendung von USB ist also nicht möglich, da die Geräte keinen Controller zur Verfügung stellen?

almoeli
13-11-2008, 13:28
Hallo,

die einzige feste Spannung die du über USB ausgeben kannst ist die 5V Versorgungsspannung. Und die wird meist vom USB Host Treiber verwaltet, wenn dieser den Kontroller anweißt einen Port zu aktivieren.
Die Datenleitungen können für ein solches vorhaben nicht herangezogen werden, da man sie nicht direkt in der Hand hat.

Ohne einen echten USB Anschluss am Gerät selber kannst du dieses nicht an den USB deines Rechners anschließen, da sich jedes USB Gerät an einen festen Mechanismus halten muss, um erkannt zu werden.

Gruß

almoeli

Ghostrider
13-11-2008, 15:51
Ich habe mal in dem Handbuch vom Verstärker nachgelesen: Die möglichen Schnittstellen sind RS-232C und GP-IB (auch bekannt als IEEE-488), wobei erstere atm verwendet wird. Der Code ist in Visual C++ implementiert, was ich gerne umgehen möchte. Es ist nun die Frage, ob man diese Schnittstellen mit einem modernen PC ohne großen Programmieraufwand mit C++ ansteuern kann. Neue Geräte sind nämlich schweineteuer ;) (und besitzen meist auch nur Treiber für LabView)

Ghostrider
20-11-2008, 16:30
noch eine Frage zu der 10V Karte. Ich möchte die jetzt weiterhin verwenden und unter Linux ansteuern. Ein typischer Befehl sieht bislang so aus:



const adr = 0xE000;
...
_outp(adr+32,0);


Wie übertrage ich das nun in mein Programm? Habe schon versucht mich schlau zu lesen, und bin vor allem auf den Treiber parapin gestoßen. Nun habe ich aber 2 Probleme, und zwar

1) Kann ich parapin für diese Karte benutzen? Sie scheint ja zumindest eine wohldefinierte Hardwareadresse zu besitzen.

2) Was genau macht das alte Programm? Steuert es einen bestimmten Pin, und wenn ja welchen? Oder wie überträgt man das +32 auf die parapin Syntax?