Forum: Mikrocontroller und Digitale Elektronik MIDI Merger mit AVR


von Ingo L. (grobian)


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

von Phil J. (sunflower_seed)


Lesenswert?

---

von TheMason (Gast)


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.

von Ingo L. (grobian)


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.

von TheMason (Gast)


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 :-)

von Ingo L. (grobian)


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.

von TheMason (Gast)


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).

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.