-
Midi über Uart
Hallo, ich glaube ich habe das Thema erst in das falsche Forum geposted. Bitte um entschuldigung..........
Mein Problem ist das richtige empfangen und analysieren eines Midi-Signals über die Uart. Irgendwie beckomme ich das nicht hin. Kann mir einer von Euch helfen ? Währe super !!!
Danke !
-
MIDI geht mit Optokoppler und einer Baudrate von 31250 , sonst normal.
(8-Bit, Noparity, 1 Stop)
Hardware:
https://www.roboternetz.de/wissen/in...MIDI-Interface
Über den Aufbau der "MIDI Messages" schau mal bei Google, Massen von Seiten.
Wenn dann noch Fragen sind, dann frag' nur
-
Ja, habe einen Optokoppler eingesetzt. Hier mal meinen Code :
$regfile = "m16def.dat"
$crystal = 12000000
$baud = 31250
Baud = 31250
Dim I As Byte
Cls
Do
If Usr.rxc = 1 Then
I = Udr
Locate 1 , 1
Lcd I ; " "
End If
Loop
End
Ich beckomme immer die selben Werte, egal was ich für eine Taste am Keyboard drücke.
Manchmal auch nur eine "00000010"
-
Hi,
invertiert der Optokoppler?
Gruß
Christopher
-
Es ist ein 6N138, ich glaube nicht..........
-
Hallo,
hast Du schon mal geschaut wie das MIDI-Protokoll in etwa aufgebaut ist ?
Wenn du alle Bytes an die gleiche Stelle auf dem LCD schreibst, werden die verhergehenden ja immer überschrieben, denn es werden auch mal mehr Bytes pro Übertragung gesendet, und nur das letzte angezeigt !
-
Das ist ja mein problem, das ich nicht weis, wie ich mit der Uart richtig empfangen kann, und wie ich die Bytes auseinander nehmen kann zur weiteren verarbeitung.
-
Hallo, ich habe nun mal folgendes ausprobiert. Ich wollte die 3 Bytes hintereinander Lesen, und beckomme auch werte rein, aber recht durcheinander. Wenn ich keine taste drücke, erhalte ich 3 mal 254 ????Muß ich das noch irgendwie Syncronisieren ? Wenn ja wie ?
$regfile = "m16def.dat"
$crystal = 12000000
$baud = 31250
Dim I(3) As Byte
Cls
Do
I(1) = Udr
I(2) = Udr
I(3) = Udr
Locate 1 , 1
Lcd Bin(i(1))
Locate 2 , 1
Lcd I(2)
Locate 3 , 1
Lcd I(3)
Loop
-
Hallo Gast,
Du musst schon zwischendurch abfragen ob überhaupt ein neues Byte angekommen ist, so wie jetzt wird 3mal der gleiche Wert in die 3 Variablen übernommen.
Schau Dir mal dazu den Befehl Inkey() an.
-
Wo muß der Befehl hin ? Oh mann, ich hab keine ahnung, wie ich die Bytes richtig über die Uart einlesen kann. Ich weis nur, das es 3 Bytes sind, wovon das erste das Statusbyte ist und kanal nummer, das zweite die Notennummer und das dritte die Lautstärke enthällt.
Brauche dringend Hilfe !!!
Gibt es da irgendwo ein Beispiel ???
Danke !