MIDI Merger mit AVR

OP #1307540
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.