Dla zgodności ze standardem MIDI odbiornik musi mieć separację galwaniczną (poszukaj rozwiązań interfejsu do SBlastera tam jest dokładny schemat o ile pamiętam to rezystory 270 omów i 220 omów, transoptor 6N35 ale CNY17-2 też działa) elementy obliczone dla 5V i 5 mA prądu pętli.
Za transoptorem dajesz bufor i wprowadzasz to na nóżkę rxd 8051.
Transmisja ma szybkość 31250 bit/s z dokładnością 1%.
1 bit startu, 8 bitów danych, 1 bit stopu (1 bajt trwa 320 us).
Komunikat jest 2 lub 3 bajtowy. Decyduje pierwszy bajt ciągu: 4 najstarsze bity to rozkaz, 4 najmłodsze numer kanału (numeracja od 0 do 15).
Bajt rozkazowy ma ustawiony najwyższy bit, bajty danych wyzerowany.
Zwykle kodowanie idzie:
rozkaz,dane
lub
rozkaz,dane,dane
czasami jeżeli idzie ciąg tych samych poleceń to wysyłany jest tylko pierwszy bajt rozkazowy a potem dane (tzw. running status). Jeżeli następuje zmiana rozkazu to znów przesyłany jest bajt rozkazowy.
Jeżeli dane nie są przesyłane (długie nuty, lub pauzy) to co ok. 300 ms
wysyłane jest jednobajtowy komunikat ActiveSensing sygnalizujący, że łącze jest aktywne i nie ma przerw w kablach.
Jeżeli idą komunikaty czasu rzeczywistego (Zegarm start, stop,itp) to ActiveSensing nie jest nadawany.
Dokładny rozdział sygnałów wymaga analizy starszych czterech bitów i reagowanie zależnie od ich zawartości.
Rozkazy nieobsługiwane (np.SystemExclusive) urządzenie pomija.
Pozdrawiam.