MIDI Merger mit AVR

OP #1307540
Lesenswert?
• ▲
▼
Guten Morgen..
gibt es eigentlich einen MIDI-Merger mit einem AVR ?
Finde den auf ucapps.de zwar schon ganz interessant, nur fehlt mit der 
Progger für die PIC´s. Das Ding kostet ja soviel wie ein gebrauchter 
Merger !!
Kennt jemand einen Link für Merger mit AVR.

Gruß aus Berlin
Ingo
Gast #1307720
Lesenswert?
• ▲
▼
also mit den 4p-typen (mega164p oder kleiner) ist das kein thema, da 
diese über 2 uarts verfügen. auch andere typen mit 2 uarts sollten kein 
thema sein. eine sw uart dürfte schon deutlich schwieriger werden.
OP #1307730
Lesenswert?
• ▲
▼
TheMason schrieb:
> also mit den 4p-typen (mega164p oder kleiner) ist das kein thema,...

.....für mich schon, Komme mal gerade so mit einem UART klar.
Wie ist da die Vorgehensweise? Könnte jetzt natürlich die beiden UARTs 
ständig abfragen und sie auf die OUT Buchse leiten, aber ich darf ja die 
zusammengehörigen Datenpakete nicht zerstückeln wenn jetzt gleichzeitig 
Daten an den INs eintreffen.
Gast #1307767
Lesenswert?
• ▲
▼
2 uarts für midi baudrate initalisieren, 2 rx-interrupts um beide 
datenströme zu empfangen (empfangsfifo), 1 tx interrupt um den 
auszugebenden datenstrom interruptgesteuert auszugeben und eine kleine 
logik die die einkommenden pakete (sortiert) in den ausgabepuffer 
schreibt. fertig :-)
OP #1307811
Lesenswert?
• ▲
▼
TheMason schrieb:
> eine kleine
> logik die die einkommenden pakete (sortiert) in den ausgabepuffer
> schreibt. fertig :-)

Da ist für mich das Problem..wie sortiere ich die Daten.
Angenommen auf Eingang 1 kommt ein $C0, 00 (Prg. Change )
und auf Eingang 2 kommt ein $90,55, 127 (Key on). Wie verhindere ich, 
dass dann z.B. ein $C0,90,00,55,127 ausgegeben wird, womit dann der 
Emfänger ja  nun gar nichts angfangen kann.
Gast #1307872
Lesenswert?
• ▲
▼
ganz einfach : du schreibst dir eine routine die in abhängigkeit von der 
länge des befehls die enstprechende anzahl an bytes in deinen 
ausgabebuffer kopiert. beispiel :

buffer 1 : 90 34 45 b0 12 34 c0 45 80 23 12
buffer 2 : b0 45 46 90 40 30 b0 45 34 c0 00

buffer 1 hat 90 -> 3 bytes

ausgabe buffer : 90 34 45

buffer 2 hat b0 -> 3 bytes

ausgabe buffer  : 90 34 45 b0 45 46

buffer 1 hat b0 -> 3 bytes

ausgabe buffer : 90 34 45 b0 45 46 b0 12 34

buffer 2 hat 90 -> 3 bytes

ausgabe buffer : 90 34 45 b0 45 46 b0 12 34 90 40 30

usw.

du müsstest dann nur noch vorm kopieren eines pakets prüfen ob das paket 
auch schon komplett da ist.
etwas komplizierter ist es mit dem running status (wenn das die korrekte 
bezeichnung ist), aber das sollte auch kein thema sein. schwieriger 
wirds erst wenn du sys-ex daten verwalten bzw umschalten mußt. da diese 
daten sehr groß sein können und du während auf einem port sys-ex daten 
laufen der andere puffer dann entsprechen überlaufen kann ist es sinnig 
bei sys-ex den jeweils anderen port auszuschalten (bzw eben keine daten 
mehr in den ausgabpuffer zu schreiben).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren