Jump to content

IIC-Bus Modual an C-Control M-Unit 2.0


Recommended Posts

Posted

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 Dank

mfg FTZ

Posted

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.

Posted

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

start

sende adresse/lesen

Slave (Midi IIC Mdul):

send Acknwlegebit

Send byte 1 (z.b.: note on :0x09)

Master

receive 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 byte2

send Ack

Slave:

send byte3 (Velocity)

Master:

receive byte3

send Ack

Slave:

send stop

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

mfg

FTZ

P.s. gibt es vielleicht irgendwo Code Beispiele fürs IIC Modul die ich zur verständnis erleichterung übersetzen könnte?

Posted

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 senden

0x10: Slave ID

0x09: Type "Note"

0x93: oberes Nibble: nochmals Note, unteres Nibble: MIDI-Kanal 4

0x3c: Notenwert (hier: C-4)

0x7f: Velocity

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...