Forum: Mikrocontroller und Digitale Elektronik Midi Signal debuggen


von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Ich empfange ein Midisignal von einem Keyboard Scanner. An Pocket MIDI 
über einen Adapter angeschlossen, sehen die Daten gut und fehlerfrei 
aus. Ich habe zwei Taster. Die liefern wahlweise 90 25 40 80 25 40 resp. 
90 27 40 80 27 40. Also Note On, Note off. Wie es sein sollte.

Das Midisignal geht über angehängte Schaltung in einen Arduino Nano an 
einen SoftwareSerial-Eingang.
1
SoftwareSerial midiSerial = SoftwareSerial(11, 12); // RX, TX

Die Daten, die da ankommen sind zu ca. 50% kaputt. Statt 90 25 40 kommt 
z.B. 90 25 ff an.

Mangels eines USB-TTL Konverters, der 31250 Bd kann, versuche ich, mir 
das mit PulseView anzusehen. Dort kann ich aber keine 31250 Bd 
einstellen im UART (bzw. draufgesetzten MIDI decoder).

Jemand eine Idee, was man noch machen könnte? Ist die Konverterschaltung 
OK? Könnte ich aus einem zweiten Arduino Nano einen geeigneten USB-Uart 
machen?

Anm: in der Skizze sind 4,5 die Pin-Nummern des Midi DIN-Steckers. Pin 2 
ist an Masse angeschlossen.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Was ist die Taktquelle für den Arduino? Der RC-Oszillator ist zu 
ungenau, um als Takt für eine UART herhalten zu können, auch wenn's 'ne 
Soft-UART ist.

von Christoph K. (chriskuku)


Lesenswert?

Harald K. schrieb:
> Was ist die Taktquelle für den Arduino? Der RC-Oszillator ist zu
> ungenau, um als Takt für eine UART herhalten zu können, auch wenn's 'ne
> Soft-UART ist.

Ah, guter Punkt. Darüber habe ich mir tatsächlich noch keine Gedanken 
gemacht. Ich dachte, der hat'n Quarz und gut ist.

von Clemens L. (c_l)


Lesenswert?

Christoph K. schrieb:
> Ist die Konverterschaltung OK?

Ja. (Einen 10-Mbps-Optokoppler für 0,03 Mbps zu verwenden ist Overkill, 
aber schadet nicht.)

> Statt 90 25 40 kommt z.B. 90 25 ff an.

Das klingt nicht nach einem elektrischen Problem, sondern dass die 
Software das letzt Byte nicht schnell genug liest.

> Jemand eine Idee, was man noch machen könnte?

Hardware-Serial-Eingang verwenden.

Der Nano hat nur einen, der schon für die Kommunikation mit dem PC 
verwendet wird. Du brauchst einen Mega oder Due.

von 🕵︎ Joachim L. (Gast)


Angehängte Dateien:

Lesenswert?

Mit einem billigen Logic- Analyzer (24Mhz,8-Kanaele reicht fett fuer 
deine Anwendung) und freier Software (Sigrok und Pulseview) mit 
eingebautem Klartext Midi-Decoder bekommst du dein Problem locker in den 
Griff. Die Hardware ist ihr Geld wert ca. 10 Eu bei Ali Xpress. Und du 
lernst was...

Wenn Du lieber was bastelst, sollte es die Pulseview Decoder 
unterstuetzen, die sind Gold wert. Und bei mir geht das mit 31250 baud 
(Ctrl-C Ctrl-V) siehe Bildschirmschuss.

von Christoph K. (chriskuku)


Lesenswert?

Clemens L. schrieb:
> Christoph K. schrieb:
>> Ist die Konverterschaltung OK?
>
> Ja. (Einen 10-Mbps-Optokoppler für 0,03 Mbps zu verwenden ist Overkill,
> aber schadet nicht.)

Hatte vorher dieselbe Schaltung, aber mit einem CNY17-2 aufgebaut und 
dachte, vielleicht läge es daran und habe dann noch mal die Schaltung 
mit 6N317 gebaut.

>
>> Statt 90 25 40 kommt z.B. 90 25 ff an.
>
> Das klingt nicht nach einem elektrischen Problem, sondern dass die
> Software das letzt Byte nicht schnell genug liest.
>
>> Jemand eine Idee, was man noch machen könnte?
>
> Hardware-Serial-Eingang verwenden.
>
> Der Nano hat nur einen, der schon für die Kommunikation mit dem PC
> verwendet wird. Du brauchst einen Mega oder Due.

Könnte ich den verwenden, wenn ich die Programmierung nicht über USB 
sondern über den ICSP Adapter mache? Hätte noch einen Blackmagic USB 
Adapter.

Andererseits, kann der UART im Arduino Nano die Baudrate von 31250 Bd?

von Andreas M. (amesser)


Lesenswert?

Christoph K. schrieb:
> Andererseits, kann der UART im Arduino Nano die Baudrate von 31250

Ja, sogar ganz exakt. 16MHz  16  31250 Baud = 32 Rest 0. Also UBRR := 
15

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Christoph K. schrieb:
> aber mit einem CNY17-2 aufgebaut

Der ist zu langsam. Der 6N137 ist ok. Man könnte den Pullup 4k7 noch 
etwas verkleinern, damit wird die steigende Flanke am Ausgang steiler. 
Z.B. 1k5 oder 2k2.

von Andreas M. (amesser)


Lesenswert?

Hmm, irgendwer hat meine Slashes gegessen. Wollen mich wohl veräppeln, 
in der Vorschau sindse da, nach dem Absenden sind se weg...

Also UBRR:=31: Oben leider vertan.

: Bearbeitet durch User
von -gb- (Gast)


Lesenswert?

Joachim L. schrieb:
> freier Software (Sigrok und Pulseview)
Kennt einer eine SW die MIDI direkt konvertiert? Als Protokoll und die 
Befehle als Text ausgibt?

von Steve van de Grens (roehrmond)


Lesenswert?

Christoph K. schrieb:
> Ich dachte, der hat'n Quarz und gut ist.

Ich glaube, es ist (bei den nicht originalen Arduino Nanos) nur ein 
Keramik-Schwinger, sollte aber trotzdem reichen.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Georg B. schrieb:
> Joachim L. schrieb:
>> freier Software (Sigrok und Pulseview)
> Kennt einer eine SW die MIDI direkt konvertiert? Als Protokoll und die
> Befehle als Text ausgibt?

Es ist mir jetzt mit PulseView gelungen. Man setzt den MIDI-Decoder auf 
den UART auf. Die Einstellung (Eingabe) der Baudrate in der Mac Version 
hat wohl einen Bug. Tastatureingabe in dem Baudraten-Feld geht nicht 
über eine Stelle hinaus. Hole ich mir die 31250 mit Copy/Paste in die 
Zwischenablage (paste buffer), kann ich dort 31250 eingeben. Dann 
dekodiert Pulseview die Sigale auch schön. Aber die Dauer der 
Aufzeichnung ist durch Samplerate und Anzahl der Samples natürlich arg 
begrenzt.

Ich dachte, Pocket Midi könne das, also Befehle dekodieren, sehe aber da 
so auf die schnelle keine Option.

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Steve van de Grens schrieb:
> Christoph K. schrieb:
>> Ich dachte, der hat'n Quarz und gut ist.
>
> Ich glaube, es ist (bei den nicht originalen Arduino Nanos) nur ein
> Keramik-Schwinger, sollte aber trotzdem reichen.

"A.T" steht drauf. (s. Foto, Uhrmacherlupe vor iPhone-Objektiv). Auf 
einem anderen Exemplar steht "A.L".

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Ich glaube man kann die Keramikschwinger daran erkennen, dass die ohne 
externe Kondensatoren betrieben werden. Habe gerade gesehen, das das 
wohl auch beim originalen Arduino Nano und Uno der Fall ist.

Hier ist das für ein Arduino UNO Board erklärt: 
https://linuxhint.com/ceramic-resonator-in-arduino/

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.