mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Midi über Uart


Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich versuche schon länger ein Midi-Signal über die Uart
einzulehsen. Ich habe ein Midi-Keyboard über einen Optokoppler am
RXT-Pin angeschloßen, und die Bautrate auf 31250 gestellt. Dann hab ich
mich über das Midi-Protokoll informiert, und erfahren, das ich 3 bytes
einlesen muß. Und genau da liegt mein Problem. Wie lese ich diese 3
Bytes richtig ein ( mit Bascom ) ? Muß das irgendwie Syncronisiert
werden ? Für Hilfe bin ich sehr Dankbar!!!

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schau dir das Midi Protokoll nochmal genau an. Bei den typischen 3
Byte Sequenzen (Note on/ff) ist beim 1. Byte immer das 8. Bit gesetzt.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muß ich dann das 8te bit abfragen ob es gesetzt ist, und wenn ja die
anderen 2 hintereinander einlesen ?

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm, der folgende Code geht leider auch nicht. Ich trete irgendwie auf
der Stelle. Könnte mir jemand weiter helfen ? Wie beckomme ich
wenigstens das erste (Statusbyte) richtig eingelesen ???

Danke !


$regfile = "m16def.dat"
$crystal = 12000000
$baud = 31250

Dim I(3) As Byte , A As Byte , X As Byte

Cls

X = 0

Do



   A = Udr
   If A.7 = 1 Then
      I(1) = Udr
   End If
   A = Udr
   If A.7 = 1 Then
      I(2) = Udr
   End If
   A = Udr
   If A.7 = 1 Then
      I(3) = Udr
   End If





   Locate 1 , 1
   Lcd Bin(i(1))
   Locate 2 , 1
   Lcd I(2)
   Locate 3 , 1
   Lcd I(3)


Loop

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du darauf warten (abfragen), ob überhaupt etwas
neues empfangen wurde.

A = Udr
Liest einfach nur das UDR aus und schreibt es in die Variable A.
Das kann man zu jeder Zeit machen, auch wenn die USART überhaupt nicht
benutzt wird.

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch mal einen Midi-Analyzer programmiert, ist gar nicht so
einfach. Stelle Dir das ganze Midi-Protokoll wie eine große
State-Machine vor.

Warte auf ein Byte, untersuche es und springe davon abhängig in einen
anderen State.
Mit den drei hintereinanderfolgenden if-Abfragen wie in Deinem Beispiel
klappt das nicht, da Du keine States hast.

Wenn mich nicht alles täuscht, habe ich -nachdem ich es in Pascal
programmiert hatte- im Netz ein ganz ähnliches C-Programm gefunden.

Soll ich es Dir heraussuchen?

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit C kenne ich mich nicht aus, meint Ihr eine :
if Usr.rxc = 1 then......abfrage ?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sowas in der Richtung. Und das am besten in einer Schleife solange
abfragen bis RXC gesetzt ist.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mann, ich werd noch.....
geht auch nich...

Do

   If Usr.rxc = 1 Then
      I(1) = Usr
         If I(1).7 = 0 Then
         If Usr.rxc = 1 Then
            I(2) = Usr
               If I(2).7 = 0 Then
               If Usr.rxc = 1 Then
                  I(3) = Usr
               End If
               End If
               End If
               End If
   Locate 1 , 1
   Lcd Bin(i(1))
   Locate 2 , 1
   Lcd I(2)
   Locate 3 , 1
   Lcd I(3)
   End If


Loop

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
do
loop until USR.RXC = 1

I(1) = UDR

if I(1).7 = 1 then...

Ist das so schwer?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.