Newbie Frage: Schieberegler, Fader abfragen
Moderator: Guido Körber
Newbie Frage: Schieberegler, Fader abfragen
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
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
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
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
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
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
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
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
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".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
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Real wird sogar ein Transfer alle 8msec daraus.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
Die Kommandos an den SPI sind wie alle Special Mode Functions jeweils 8 Byte lang und so ein Paket ist ein Transfer.
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
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.
Generell sind auch solche kurzen Zeiten mit einem normalen Windows-Timer nicht zuverlaessig zu erreichen.
Das heißt, wenn ich eine Datenabfrage mache (8 Byte) habe ich 8 bit Nutzdaten und das ganze dauert 8 ms.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.
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?
Wie kommt dann das zustande?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
Blue
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
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.Bluesky wrote:Wie kommt dann das zustande?
Blue
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.
Das verstehe ich nicht wirklich: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.
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
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
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
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