Newbie Frage: Schieberegler, Fader abfragen

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Newbie Frage: Schieberegler, Fader abfragen

Post by Bluesky »

Hallo an alle!

Ich möchte folgendes Problem lösen. Ich möchte mehrere fader / Schieberegler nach dem Zustand abfragen.

Z.B: Regler ganz unten = 0 / Ganz oben = 100
Und nach Möglichkeit alle Zwischenstände auch.

Womit kann ich das machen und wie schnell arbeitet so ein Worrior?

Ich möchte damit ein Mischpult bauen, welches den PC steuert. Halt ohne die regler per Software zu ändern.

Evtl könnt Ihr das ja mal kommentieren. Andere Vorschläge sind ebenfalls willkommen.

Grüße
Blue
cuban8
Posts: 3
Joined: Sat Oct 30, 2004 1:43 pm

Post by cuban8 »

Hallo Blue,
am einfachsten geht das über Linearpotis, die Du über einen A/D Wandler ausliest, den Du über die SPI-Schnittstelle an den Warrior anschliessen kannst. Ich selber habe dafür den MAX186 eingesetzt. Das ist ein 8-kanaliger 12bit A/D-Wandler (gibts z.B. bei Reichelt). Du kannst den Warrior alle 10ms abfragen, und mit einer Abfrage zwei Kanäle des MAX186 auslesen (du brauchst 3 byte pro Kanal, ein Steuerbyte und zwei Datenbytes, d.h. Du kannst mit einer 6-byte Abfrage zwei Kanäle auslesen). Das gibt Dir dann eine Gesamtabtastrate von 200 S/s oder 25 Hz pro Kanal - sollte für ein Mischpult locker reichen. Für die Speisung der Potis habe ich einfach die Referenzspannung verwendet, die der MAX186 auf einem Pin herausgibt. Damit diese Spannung die Lasten der Potis sauber treiben kann, habe ich sie mit einem Operationsverstärker (LM258 oder ähnlich) als Spannungsfolger verschaltet. Dadurch nutzt das Poti dann den ganzen Bereich des Wandlers, ohne dass Du noch was einstellen musst.
Gruss,
Thorsten
Guido Körber
Site Admin
Posts: 2857
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

EIne einfache Option wäre es auch JoyWarrior dafür zu verwenden.
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Post by Bluesky »

Danke für den Kommentar!

Heißt das Du hast so etwas ähnliches schon realisiert?? Würde mich etwas genauer interessieren falls Du Muße hast.

An Linearpotis (allerdings sind die höherwertigen alle logarithmisch, meinst du das ist eine Problem) hatte ich auch gedacht und man A/D Wandler mit mehreren Kanälen. Mit 12 bit hast Du ja ne super Auflösung. Bei Direktanschluß welche hast Du da genommen (1k, Qualität?) ? Als V-Referenz hast du die 4,096 V intern genommen?

Du schreibst der Worrior kann alle 10 ms abgefragt werden wie kommst Du darauf?

Die SPI Schnittstelle (also Worrior 24)?
Wenn ich das lt. Datenblatt richtig verstanden habe. werden immer 2 bytes zum auslesen der Daten benötigt. Ist das dritte notwendig (Report ID 08)?

Dann: 2 Kanäte = 6 Byte Abfrage, klar! Wie kommst Du dann auf 200 Samples?

Wenn ich allerdings 4 Kanäle bräuchte, habe ich nur noch 12 Hz / Kanal?

Blue
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ein IO-Warrior hat wie alle low-speed HID-Geraete eine polling Time von 10 Millisekunden eingestellt.
Das bedeutet das der USB Host Controller nur alle 10 Millisekunden das Geraet fragt ob es Daten hat.
Es ist also sinnlos oefter lesen zu wollen.
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Post by Bluesky »

@ Guido Körber
An den Joy Worrior hatte ich auch schon gedacht. Heißt das man könnte dan max. 3 Schieberegler und einige Schalter anschließen?

Blue
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Post by Bluesky »

@Robert Marquardt

Ahh, das macht Sinn!

Heißt das: 100 Abfragen/s sind möglich?

Wieviel Daten bekomme ich dann über den SPI? Wenn eine Abfrage 3 Byte lang ist?

Blue
Guido Körber
Site Admin
Posts: 2857
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Bluesky wrote:@ Guido Körber
An den Joy Worrior hatte ich auch schon gedacht. Heißt das man könnte dan max. 3 Schieberegler und einige Schalter anschließen?

Blue
Ja, pro JoyWarrior24A8. Wenn man mehrere nimmt natürlich entsprechend mehr, Zugriff muss dann natürlich über die richtigen Joystick-Funktionen gehen und nicht nach der Dumm-Methode "wir tun so als ob wir einen Gameport hätten".
Guido Körber
Site Admin
Posts: 2857
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Bluesky wrote:@Robert Marquardt

Ahh, das macht Sinn!

Heißt das: 100 Abfragen/s sind möglich?

Wieviel Daten bekomme ich dann über den SPI? Wenn eine Abfrage 3 Byte lang ist?

Blue
Real wird sogar ein Transfer alle 8msec daraus.

Die Kommandos an den SPI sind wie alle Special Mode Functions jeweils 8 Byte lang und so ein Paket ist ein Transfer.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Wenn man alle 10 msec liest, dann kann es schon ein bischen schwierig werden. Die Messageverarbeitung des Programms wird dann ein bischen ruckelig, da die Leseoperation durchschnittlich viel von den 8 msec braucht.
Generell sind auch solche kurzen Zeiten mit einem normalen Windows-Timer nicht zuverlaessig zu erreichen.
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Post by Bluesky »

Guido Körber wrote: Real wird sogar ein Transfer alle 8msec daraus.

Die Kommandos an den SPI sind wie alle Special Mode Functions jeweils 8 Byte lang und so ein Paket ist ein Transfer.
Das heißt, wenn ich eine Datenabfrage mache (8 Byte) habe ich 8 bit Nutzdaten und das ganze dauert 8 ms.

Für eine 2te Abfrage benötige ich dann ebenfalls 8 ms und habe 8 bit Nutzdaten?

D.h. max 125 Abfragen / s
Ist das richtig?
cuban8 wrote: Du kannst den Warrior alle 10ms abfragen, und mit einer Abfrage zwei Kanäle des MAX186 auslesen (du brauchst 3 byte pro Kanal, ein Steuerbyte und zwei Datenbytes, d.h. Du kannst mit einer 6-byte Abfrage zwei Kanäle auslesen). Das gibt Dir dann eine Gesamtabtastrate von 200 S/s oder 25 Hz pro Kanal
Wie kommt dann das zustande?
Blue
Guido Körber
Site Admin
Posts: 2857
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Bluesky wrote:Wie kommt dann das zustande?
Blue
Indem man von den 10msec ausgeht die der IO-Warrior als minimum Polling-Intervall spezifiziert. Nur machen alle mir bekannten Betriebssysteme aus den 10msec im Descriptor 8msec in der Realität.

Also 125 Transaktionen/sec zu 2 Kanälen jeweils = 250 Kanäle pro Sekunde geteilt durch 8 = 31,25Hz Abtastrate pro Kanal.

Allerdings wird bei einem 12 Bit Wandler eine Menge Rauschen mit im Signal sein.
Bluesky
Posts: 6
Joined: Wed Aug 24, 2005 7:43 pm

Post by Bluesky »

Guido Körber wrote:
Also 125 Transaktionen/sec zu 2 Kanälen jeweils = 250 Kanäle pro Sekunde geteilt durch 8 = 31,25Hz Abtastrate pro Kanal.
Das verstehe ich nicht wirklich:

Wenn ich 4 Kanäle habe = 125 *4/8 ==> 62,5 Hz
Wieviele Kanäle kann ich denn in einem Rutsch abfragen? Um beim Bsp. zu bleiben. Der 12 bit/AD Wandler hat doch 12 Nutz bits, oder? Da kann ich als mindestens 24 bits abfragen?

Oder bei 8 Byte, 2 x Adresse und init? Der Rest ist frei? ==> 6*8=48 bit ==> 4 Kanäle :-)

Wahrscheinlich bin ich ganz falsch?!
Blue
Guido Körber
Site Admin
Posts: 2857
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Ja, völlig falsch. Die Bits kann man nicht beliebig zusammenwürfeln.

Ich kenne den A/D Wandler nicht im Detail, aber nach der Beschreibung hört es sich so an, als wenn sich zwei Abfragen für Kanäle in je einer Transaktion an den IO-Warrior gepackt werden können.
cuban8
Posts: 3
Joined: Sat Oct 30, 2004 1:43 pm

Post by cuban8 »

Blue,
Genau habe ich das MAX186 Datenblatt auch nicht im Kopf (www.maxim-ic.com), aber du musst ihm zuerst ein Kontrollbyte schicken, in dem Du ihm sagst, welchen Kanal Du messen willst und so Sachen wie single-ended oder differential. Danach clockst Du zwei Null-Bytes zum A/D Wandler und er gibt währenddessen den Messwert zurück (als 16-bit Wert, auch wenn nur 12 davon was zu sagen haben - unsere Computer-Welt ist nun mal "octet-aligned" :-)).
Zur Speisung der Potis habe ich die internen 4.096V über einen Spannungsfolger genommen. Der Wert der Potis spielt dabei keine grosse Rolle, denn wenn Du ihn mit 4.096V speist, kommen eben am Mittelabgriff 0-4.096V raus. Der Widerstand darf halt nicht so klein sein, dass der Opamp den Strom nicht mehr liefern kann - ich habe 5kOhm genommen, aber ich verwende recht lange Leitungen und ein grösserer Widerstand würde das ganze störanfälliger machen. Bei kürzeren Leitungen kannst Du 100k nehmen, das funktioniert bei Joysticks ja auch.
Für ein paar Schieberegler sind 12bit wahrscheinlich Overkill, ein 10bit Wandler reicht völlig aus (1024 Schritte). Rauschen hab ich aber eher wenig drauf (ich benutze das Ding zur Winkelmessung mit einem Drehpoti, und der Wert schwankt halt im LSB hin und wieder, ab das lässt sich kaum vermeiden).
Bei 4 Kanälen könntest Du entsprechend mit 50Hz abtasten (100 Reports/s mit 2 Samples/report geteilt durch 4 Kanäle macht 50 Hz).
Gruss,
Thorsten
Post Reply