Jump to content

USB MIDI Interface austesten


pico
 Share

Recommended Posts

Hallo zsammen,

Ich habe endlich mein USB MIDI Interface, basierend auf den PIC18F4550, fertiggestellt.

Jetzt wollte ich die Performance mit MIDIOX testen.

D.h. ich möchte die maximale Latenz beim Loop messen.

Allerdings weiss ich nicht, wie ich bei MIDIOX die Zeit zu interpretieren habe. Die erste Zahl im Display repräsentiert wahrscheinlich den Zeitpunkt des Sendens bzw des Empfangs.

Oder geht das garnicht mit MIDIOX und ich muss mir eine Debugversion schreiben,

wo ich mit per Pin anzeigen lasse wann das Empfange wieder gesendet wird.

LG Pico

 

Link to comment
Share on other sites

Danke für den Tip mit dem Benchmark ich werde das mal ausprobieren.

Ja ich weiss dass das MBHP_USB von Torsten schon getestet wurde.

Ich muß sagen, die Performense ist beeindruckend. Das hat aber nichts mit meinem Projekt zu tun. Ich habe im Rahmen einer Diplomarbeit einen USB Remote Controller gebaut und mit verschiedenen Sensoren (Drucksensor und Wegsensoren) bestückt.

Deswegen wollte ich meine Systemdurchlaufzeit messen. Das habe ich mit einer Debugversion auch gemacht. Meine Messungen haben ergeben das ich ein drei ByteMidiFrame in 1,025ms mit einem Jitter von 96µs weiterleite.

LOOP:USB empfangen -> Seriell senden -> Seriell empfangen -> USB senden

LG Pico

Link to comment
Share on other sites

Hallo Pico,

wie genau hast Du diese Zeit gemessen? Es liegt hier sehr wahrscheinlich ein Messfehler vor.

Zum einen kann der Jitter nicht 96 uS betragen; dies wuerde bedeuten, dass 3 Bytes in weniger als 920 uS uebertragen werden. Die Framelaenge betraegt jedoch 960 uS, und selbst wenn man annimmt, dass der letzte Receive Interrupt in der Mitte des Stop-Bits getriggert wird, kommt das rein rechnerisch nicht hin.

Desweiteren fehlt in Deiner Messung der USB Overhead. Verwendest Du einen selbstprogrammierten MIDI Treiber? Arbeitet er im isochronen Modus? Wie aendern sich die Timings, wenn mehrere USB Geraete am Host angeschlossen sind?

Gruss,

        Thorsten.

Link to comment
Share on other sites

Hallo TK,

ja du hast recht, mit dem Jitter. Ich habe meine Messung nicht präzise genug beschrieben.

Also ich habe beim eintreffen eines bestimmten des USB MIDI Events (3 Byte) ein

PIN am µC auf high gestetzt, es seriell gesendet, es dann wieder seriell empfangen und unmittelbar vor dem USB senden das PIN auf low gesetzt.

Da habe ich eine Zeit von 1,025-1.121ms gemessen. Ergibt ein Jitter von 96µs.

Damit ist natürlich nicht die USB Übertragung einbezogen, sondern nur meine Systemlaufzeit und die serielle Kommunikation.

Ich verwende nur den Bulk Modus und den standard LegacyTreiber.

Ich haben die mein gekaufte Midicontroller(UC-33 von Evolution) analysier,der  verwendet den gleichen Modus und den gleichen Treiber.

Wie kann ich den USB Performence erhöhen, ohne den Modus und den Treiber zu ändern?

Wie kann ich die MIDI Benchmark Software zur Messung verwenden?

LG Pico

Link to comment
Share on other sites

Hallo Pico,

ok, Du hast also lediglich die Uebertragungszeit ueber die MIDI Ports gemessen, hier sind die Werte realistisch.

Fuer USB kannst Du nochmal mindestens 1-2 mS draufrechnen - das Ergebniss aus dem MIDI Benchmark messe ich sowohl mit dem MBHP_USB Interface (AN2131SC basierend, USB 1.1) als auch mit dem MBHP_USB_PIC Interface (PIC18F4550 basierend, USB 2), das Delay wird also im wesentlichen vom Windows Driver bestimmt, und der ist im Vergleich zu anderen Treibern sehr performant (das muss man Microsoft lassen)

Die USB Performance laesst sich also nicht weiter erhoehen.

Um den MIDI Benchmark zu verwenden, benoetigst Du zumindest einen zweiten PIC, und idealerweise ein LCD (ansonsten muesstest Du nach einer anderen Moeglichkeit suchen, an die Messwerte heranzukommen, sie koennten bspw. via SysEx gesendet werden).

Die MIDI In/Out Ports des zweiten PICs werden mit den In/Out Ports des USB Interfaces verbunden, und der Loopback geschieht softwaremaessig mit MIDI-Ox (oder wesentlich interessanter: mit einem MIDI Sequenzer wie Logic oder Cubase)

Alternativ koenntest Du auch einfach Dein Keyboard an das Interface anschliessen, eine Note senden und mit einem Oszi ermitteln, wie lange es dauert, bis das Event zurueckkommt - gemessen wird direkt an den Rx/Tx pins, genauer geht es nicht.

Gruss,

        Thorsten.

Link to comment
Share on other sites

Hallo TK,

erstmal vielen Dank für deine Unterstützung. Ich bin erstmal soweit zufrieden mit meiner MIDI USB Performance. Dein Descriptor läuft großartig. Ich habe ja im Rahmen einer Diplomarbeit eine USB MIDI Controller gebaut, unter Verwendung von industriellen Sensoren.

Als Fader habe ich Positionsmessstreifen (Sensofoil) benutzt.Sie funktionieren großartig.

Wenn ich damit fertig bin, werde ich dir mein konzept mal zukommen lassen.

LG pico

Link to comment
Share on other sites

Hallo Pico,

ich glaube, dein Projekt wuerde auch die Allgemeinheit interessieren! :)

Solche Messstreifen sind schon etwas feines, wie hoch ist die Aufloesung? Und wieviel kosten sie? Man koennte sie bspw. als Ersatz fuer Motorfader hernehmen :)

Gruss,

        Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...