Followthezorn Posted December 4, 2007 Report Posted December 4, 2007 Hallöchen allerseits...bin gestern erst auf diese wunderbare Seite gestoßen *TOP*Nun hätt ich eine kleine verständnis frage,... denn wenn mein vorhaben nicht klappt, würde ich es mir glaub ich ersparen mich durch die ganzen gesammelten werke durch zu arbeiten um erst am ende zu dieser erkenntnis zu kommen ::)Grundsätzlich bin ich dringend auf der suche nach einer möglichkeit Midi Note-on Befehle mit einer C-Control M-Unit 2.0 zu verarbeiten. Die interne serielle schnittstelle ist leider nicht schnell genung (19200), allerdings verfügt die m-unit auch über einen IIC-Bus.So wollt ich fragen ob das IIC-Bus modul als eigenständis Modul mir die Kovertierung von midi in IIC übernehmen könnte oder ob das Core Modul umbedingt von nöten ist. Ich wäre sehr dankbar für eine Antwort da ich vermutlich wochen brauchen würde um auf diese zu kommen ;-)Besten Dankmfg FTZ Quote
TK. Posted December 4, 2007 Report Posted December 4, 2007 Hallo,willkommen im Forum! :)Ja, das MBHP_IIC_MIDI Modul kann man auch von anderen Mikrocontrollern aus ansprechen. Dazu braucht es noch nicht einmal einen IIC Port, die Kommunikation funktioniert auch per "Bit-Banging" (SCL und SDA direkt von der Software aus stimulieren). Mit einem integrierten IIC Master Peripheral ist es natuerlich bequemer. :)Gruss, Thorsten. Quote
Followthezorn Posted December 6, 2007 Author Report Posted December 6, 2007 Hallo Thorsten,mit deiner antwort hast du mir den morgen so richtig versüßt ;)naja dann muss ich ja nur noch den IIC-Bus begreifen und versuchen einen passend Code in zu Basic++ schreiben *puh-angst*wenn ich es bis jetzt richtig verstanden habe müsste es ungefär so funktionieren? oder lieg ich da komplett falsch?!Master (C-Control):startsende adresse/lesen Slave (Midi IIC Mdul): send Acknwlegebit Send byte 1 (z.b.: note on :0x09)Masterreceive byte1 (an dieser Stelle könnte ich die Übertragung mit Nak unterbrechen, falls der ankommende Befehl nicht note on ist, oder?)send Ack Slave: send byte2 (midi channel)Master:receive byte2send Ack Slave: send byte3 (Velocity)Master:receive byte3send Ack Slave: send stopund das müsste ich dann in einer schleife abfragen...oder muss ich noch mehr mit dem Module kommunizieren?Besten dank nochmals für die rasche und erfreuliche antwort! :)mfgFTZP.s. gibt es vielleicht irgendwo Code Beispiele fürs IIC Modul die ich zur verständnis erleichterung übersetzen könnte? Quote
TK. Posted December 7, 2007 Report Posted December 7, 2007 Hallo,das wird so nicht stabil funktionieren, der Retry-Mechanismus, wie er auf der MBHP_IIC_MIDI Seite gezeigt wird (IIC_MIDI_Send() Funktion) ist sehr wichtig, ansonsten koennen Daten verloren gehen, falls die CPU schneller sendet als das IIC Modul ueber die MIDI Leitung uebertragen kann. IIC laeuft ja mit 400 kbit, und MIDI mit nur 31.25 kbit -> Flaschenhals-Problem)Um eine Note zu uebertragen, muesstest der Master Start, 0x10, 0x09, 0x93, 0x3c, 0x7f, Stop senden0x10: Slave ID0x09: Type "Note"0x93: oberes Nibble: nochmals Note, unteres Nibble: MIDI-Kanal 40x3c: Notenwert (hier: C-4)0x7f: VelocityDer Slave antwortet meistens mit einem ACK. Doch wenn er mal keine Daten mehr annehmen kann (Datenstau), antwortet er stattdessen mit NAK. Der Master muss den Transfer dann mit einem Stop/Start solange neu aufsetzen, bis der Slave wieder ACK sendet.Es gibt eine Demo-Applikation (midi_router Projekt), doch ich befuerchte, dass sie die Sache nicht verstaendlicher macht, zumal hier die Uebertragungsroutine in Assembler geschrieben ist.Gruss, Thorsten. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.