Orang menyukai musik. Banyak orang tahu cara memainkan alat musik. Dan beberapa mencoba berimprovisasi dan bahkan menggubah musik. Alat musik elektronik dapat dihubungkan ke komputer Anda untuk kemungkinan yang lebih kreatif. Ini tampaknya masalah sederhana, tetapi sebagian besar adaptor USB-MIDI Cina murah bekerja biasa-biasa saja. Siapa yang peduli bagaimana saya membuat adaptor MIDI2USB saya, saya mengundang Anda untuk membaca
Rumusan masalah
Beberapa tahun yang lalu keponakan saya, yang belajar musik, mulai berimprovisasi dan menggubah musik. Saya ingin karyanya tidak hilang, tetapi saya berhasil merekam pelajaran musiknya hanya dengan alat diktafon. Kualitas rekaman ini kurang memuaskan. Saya ingin merekam catatan langsung di Cubase atau MuseScore dan kemudian mengeditnya. Untuk ini, saya memutuskan untuk membeli adaptor (konverter) USB-ke-MIDI Cina.
Anekdot dalam subjek
:
β , !
β , ?
β !
β , !
β , ?
β !
Kabel adaptor ini murah dan tidak berfungsi dengan baik. Transfer data dari synthesizer (piano elektrik) ke komputer tidak berfungsi. Jika Anda bermain dengan satu jari, Anda dapat merekam beberapa nada, dan saat Anda memainkan akor atau tangga nada, adaptor membeku dan berubah menjadi batu bata. Arah lain, mis. mentransfer data dari komputer ke penyintesis berfungsi dengan baik. Cerita serupa dapat ditemukan di ulasan banyak pembeli.
Cara untuk menyelesaikan adaptor Cina
Ada banyak diskusi di Internet tentang cara meningkatkan atau memodifikasi adaptor berbahasa Mandarin. Dalam beberapa versi adaptor ini, optocoupler disediakan, tetapi tidak disolder, yang menyediakan isolasi galvanik antara komputer dan penyintesis. Sayangnya, dalam kasus saya, revisi itu sulit, karena Alih-alih optocoupler, dipasang dua transistor NPN. Perhatikan bahwa standar MIDI secara langsung menentukan penggunaan opto-isolator, misalnya, PC900V atau 6N138. Optocoupler H11L1M (DIP-8) atau H11L1SM (SO-6) memiliki karakteristik serupa. Komponen lain dengan parameter yang sesuai dapat digunakan.
Gambar 2. Adaptor Cina dalam proses pembongkaran. Foto oleh penulis.
Foto menunjukkan bahwa ada cukup ruang dalam case untuk menampung opto-isolator dan elemen terkait. Beberapa pengrajin menyolder komponen yang ada dan memasang opto-isolator dengan "body kit" di tempatnya. Tentunya, operasi ini tidak hanya membutuhkan pengetahuan, tetapi juga keterampilan motorik tangan yang baik.
Tetapi tidak cukup menyediakan isolasi optik antara alat musik dan komputer. Osilator kristal atau resonator presisi juga diperlukan untuk memastikan bahwa serial UART memiliki clock sesuai dengan standar MIDI. Adaptor Cina yang saya beli tidak hanya kekurangan optocoupler, tetapi juga resonator kuarsa. Tentu saja, ada sirkuit mikro di mana unit pencatatan jam kerja dikalibrasi di pabrik, tetapi tidak ada yang seperti ini. Secara umum performa produk China ini tergolong rendah. Ada adaptor yang dibangun di atas chip CH345 - konverter USB ke MIDI dalam paket SSOP-20, tetapi ini bukan kasus saya. Microchip CH345 memiliki tag USB perangkat keras ID Vendor: 1a86, ID Produk: 752d. Namun, sirkuit mikro "tangan kiri" dapat (dan memang) memberikan pengenal yang sama dan bahkan dapat "berpura-pura" menjadi apa saja.
Cacat kecil terakhir yang saya temukan di adaptor Cina adalah perangkat lunak (firmware). Lebih tepatnya, ini adalah ukuran buffer kecil untuk titik akhir (EndPoints), hanya 8 byte. Ini cukup untuk mengirimkan not yang ditekan, karena pesan MIDI melalui antarmuka USB terdiri dari 4 byte (nomor kabel, nomor perintah, dan 2 byte data). Tetapi ekstensi apa pun, misalnya SysEx, bisa lebih besar.
Setelah beberapa saat saya membeli kabel adaptor lain, yang disebut "Professional USB MIDI Interface". Adaptor ini jauh lebih mahal dan berperforma jauh lebih baik, tetapi masih ada kesalahan. Ini diwujudkan dalam kenyataan bahwa setelah beberapa menit memainkan synthesizer, tiba-tiba dia mulai kehilangan penekanan tombol, atau sebaliknya - tidak merasakan pelepasan kunci. Saya kecewa dengan hasil dari adaptor China dan memutuskan untuk mengikuti saran: "Jika Anda ingin melakukan sesuatu dengan baik, lakukan sendiri."
Bagian perangkat keras
Pertama, perlu untuk memikirkan skema perangkat masa depan dan mempelajari pengalaman insinyur lain. Adaptor yang ada terlihat sangat bagus di luar, jadi saya memutuskan untuk menggunakan casing, LED, dan kabel berpelindung darinya. Selain itu, di Moskow, kabel MIDI lebih mahal daripada adaptor China yang sudah jadi. Saya mengeluarkan papan bahasa Mandarin, mengukur dimensinya dan mulai mempelajari standar MIDI dan proyek MIDI yang berhasil di domain publik.
Gbr. 3 Adaptor USB-MIDI dalam casing dan dengan kabel.
Pada saat penulisan ini, saya mengetahui beberapa proyek menarik:
- Diagram dari dokumentasi untuk chip CH345 dari Mikroelektronika Nanjing Qinheng.
- Proyek lama pada mikrokontroler Atmega dengan implementasi perangkat lunak protokol USB. Mereka menggunakan mode Kecepatan Rendah, yang sudah usang dan tidak didukung di Windows 7.
- Pustaka MIDIUSB untuk papan Arduino dengan dukungan perangkat keras untuk antarmuka USB (Atmega32u4, Cortex-M), serta Maple, dll.
Diagram skema kelistrikan di semua proyek berisi banyak fragmen sampel berdasarkan rekomendasi standar MIDI . Oleh karena itu, tetap memilih mikrokontroler dengan dukungan untuk mode USB Full Speed, temukan optocoupler PC900V dan soket DIN-5 (MIDI) yang dijual.
Tata letak papan
Inti dari adaptor MIDI2USB saya adalah mikrokontroler EFM8UB20F64G 8-bit dari Silicon Laboratories. Saya sangat menyukainya dan menggunakannya di mana pun saya bisa. Pengontrol ini adalah penerus (setelah rebranding) dari pengontrol C8051F380, yang menggantikan C8051F320 yang legendaris - pengembangan Cygnal yang sukses, yang dibeli oleh SiLabs pada tahun 2003.
Saya akan mencantumkan argumen saya yang mendukung mikrokontroler EFM8UB20F64:
- kenyamanan pengembangan perangkat lunak, yang diekspresikan dengan adanya GPIO, SPI, UART, USB, PCA yang cepat dan mudah digunakan;
- peningkatan 8.051-core (1-2 siklus per instruksi, 48MIPS), perubahan frekuensi "dengan cepat";
- pengatur tegangan bawaan, toleransi keluaran hingga + 5V, arus hingga 100 mA;
- generator jam akurat bawaan yang dikalibrasi dari host USB (Β± 0,25%);
- ketersediaan pustaka USBXpress, VCPXpress, USB Device API dan contoh untuk mulai cepat;
- ralat murni.
Sangat menyenangkan memprogram pengontrol ini, karena ada sedikit register dan Anda dapat berkonsentrasi pada pemecahan masalah terapan. Sayangnya, operasi aritmatika (terutama yang 32-bit) lambat, tetapi sebaliknya EFM8 bagus. Mengembangkan perangkat lunak untuk perangkat USB bukanlah tugas yang mudah. Dan di sini keuntungan utama dari pengontrol SiLabs adalah pustaka USBXpress, VCPXpress, USB Device API. Bahkan Texas Instruments menggunakan pengontrol C8051F320 di papan SmartRF mereka.
Optocoupler adalah komponen terpenting kedua dalam adaptor. Saya memutuskan untuk menggunakan Sharp PC900V karena persis seperti yang ditunjukkan dalam diagram spesifikasi MIDI yang direkomendasikan. Keunikan dari optocoupler ini adalah waktu hidup dan mati yang cepat (1ΞΌs dan 2ΞΌs), serta adanya keluaran digital. Tetapi ada juga kerugiannya - ukuran besar sirkuit mikro (7x10mm) dan kelelahan hingga 50% setelah 5 tahun beroperasi. Dimensi optocoupler tidak memungkinkan untuk menandai semua komponen di satu sisi papan. Saya juga tidak ingin melepaskan konektor MIDI, yang menghabiskan banyak ruang.
Gbr. 4 Sisi belakang papan dengan optocoupler PC900V dan LED. Foto oleh penulis.
Tahap keluaran dirakit sesuai dengan skema yang direkomendasikan oleh standar pada sirkuit mikro logika 74LVC2G04, yang terdiri dari dua inverter. Tujuan utama dari komponen ini adalah untuk mengubah level sinyal logika dari 3V => 5V dan memberikan arus keluaran minimal 10 mA.
Anekdot lain
:
- , , , , , β¦
. :
β - ?
β , !
- , , , , , β¦
. :
β - ?
β , !
Komponen lainnya menjalankan fungsi tambahan dan tidak mempengaruhi pengoperasian perangkat secara signifikan. Resistor, kapasitor, dioda dan LED dapat diganti secara wajar. Alih-alih konektor mini-USB, Anda dapat meletakkan micro-USB atau membuat konektor pin untuk menyolder kabel, seperti yang dilakukan orang Cina. Konektor MIDI memakan banyak ruang dan tidak cocok dengan casing, sehingga hanya digunakan dalam versi adaptor tanpa casing. Sinyal MIDI-IN dan MIDI-OUT dirutekan ke header pin untuk pemasangan kabel. Secara umum, lokasi LED dan konektor harus disesuaikan untuk penempatan optimalnya dalam casing.
Gbr. 5 Versi debug dan kotak dari adaptor MIDI2USB. Foto oleh penulis.
Arus konsumsi total tidak melebihi 50 mA. Ini terdiri dari bagian-bagian berikut:
- mikrokontroler, 15mA;
- tiga LED, 15mA (3x5mA);
- sirkuit mikro 74LVC2G04, 10 mA;
- optocoupler PC900V, 10 mA.
PCB 2 lapis dibuat oleh orang Amerika di OSH Park , tebal 1,6 mm, tembaga 0,035 mm, bahan FR-4.
Bagian perangkat lunak
Pembuatan perangkat lunak untuk peralatan merupakan tahap pengembangan yang penting dan krusial. Untungnya, semua sistem operasi modern memiliki driver untuk perangkat USB MIDI. Tugasnya berkurang dan Anda hanya perlu menulis firmware untuk adaptor.
Saya biasanya menggunakan Keil uVision PK51 dalam hubungannya dengan Wizard Konfigurasi 2, kadang-kadang IAR Embedded Workbench, dan sangat jarang SiLabs Simplicity Studio. Setiap lingkungan memiliki kelebihan dan kekurangan. Dalam proyek ini saya memutuskan untuk menggunakan IAR karena saya ingin memiliki "C dengan kelas". Selain itu, kompilator IAR menyediakan akses ke semua bit register sistem. Misalnya, P2_bit.B0 = 1; atau PCA0MD_bit.WDTE = 0;
Tidak perlu menggunakan "konstanta ajaib" atau ekspresi bit multi-level yang penuh dengan CMSIS atau "SI_EFM8UB2_Register_Enums.h". Sayangnya, semua fungsi ini dideklarasikan di file ioEFM8UB20F64G.h, yang ternyata tidak kompatibel dengan pustaka si_toolchain.h (misalnya, makro B0..B3). Saya tidak menerjemahkan proyek ini ke Keil uVision PK51, tetapi hanya menulis kode C yang kompatibel untuk semua lingkungan pengembangan.
Kode proyek dibagi menjadi beberapa bagian fungsional
- File "main.c" berisi titik masuk, deklarasi variabel global, panggilan untuk menginisialisasi periferal, dan loop program utama.
- File "init.c" berisi pengaturan clocking, port, UART dan interupsi-nya.
- File descriptors.c berisi deskriptor USB untuk perangkat Kelas Audio.
- File "midi.c" berisi dua fungsi untuk mengonversi pesan MIDI menjadi peristiwa USB dan sebaliknya. Mesin negara digunakan.
- File "usbconfig.h" berisi makro dan definisi (#define) untuk mengkonfigurasi mode pengoperasian pustaka API Perangkat USB.
Mari kita lihat fungsi main () dengan port, periferal, dan loop utama.
int main( void )
{
WDT_Init(); // Disable WDTimer (not used)
PORT_Init(); // Initialize ports (UART, LEDs)
SYSCLK_Init(); // Set system clock to 48MHz
UART0_Init(); // Initialize UART0 @31250, 8-N-1
USBD_Init( &usbInitStruct ); // Initialize USB, clock calibrate
LED_IN = 1; // Blink LED
LED_OUT = 1; // Blink LED
IE_EA = 1; // Global enable IRQ
while(1)
{
//--- MIDI => USB
if( nMidiCount > 0 )
{
IE_EA = 0; // Begin: Critical section
if( USB_STATUS_OK==USBD_Write(EP1IN,aMidiBuffer,nMidiCount,false) )
{
nMidiCount = 0; // Reset MIDI data byte counter
}
IE_EA = 1; // End of: Critical section
LED_IN = 0; // Turn off input LED
}
//--- USB => MIDI
if( nUsbCount )
{
uint8_t i;
LED_OUT = 1; // Turn on Led on New packet
for(i = 0; i < nUsbCount; i++) // Process every data byte
{
USB2MIDI( aUsbBuffer[i] ); // Convert USB packet into MIDI
}
nUsbCount = 0; // Reset counter
USBD_Read(EP2OUT, aUsbBuffer, sizeof(aUsbBuffer), true);
LED_OUT = 0; // Turn off Led, when done
}
}
}
Perpustakaan SiLabs untuk perangkat USB terdiri dari satu set subrutin yang dikompilasi dan disertakan dalam proyek tergantung pada pengaturan di file "usbconfig.h". Ini sangat mirip dengan pustaka "libusb, V-USB" yang ditemukan dalam kode untuk mikrokontroler dari Atmel (sekarang Microchip). Perlu dicatat bahwa SiLabs memiliki library yang bagus dan nyaman dari sudut pandang programmer.
Deskriptor (deskriptor) perangkat, konfigurasi, dan antarmuka memainkan peran penting dalam pengoperasian perangkat USB apa pun. Dengan menggunakan deskriptor ini, perangkat memberi tahu host (komputer) tentang persyaratan, kapabilitas, parameternya, dll. Sebuah fungsi untuk menangani permintaan deskriptor biasanya ditemukan di setiap perpustakaan USB, dan programmer hanya diminta untuk mengisi struktur data yang berisi deskriptor ini dengan benar.
Kode dengan deskriptor
SI_SEGMENT_VARIABLE
(usbDeviceDesc[], const USB_DeviceDescriptor_TypeDef, SI_SEG_CODE) =
{
USB_DEVICE_DESCSIZE, // bLength, 18 bytes
USB_DEVICE_DESCRIPTOR, // bDescriptorType, 1
htole16(0x0110), // bcdUSB Ver, 1.10
0x00, // bDeviceClass, 0 for Audio
0x00, // bDeviceSubClass, 0 for Audio
0x00, // bDeviceProtocol, 0 for Audio
SLAB_USB_EP1IN_MAX_PACKET_SIZE, // bMaxPacketSize0, 64 bytes
htole16(0x1209), // idVendor, Free GPL (SiLabs 0x10C4)
htole16(0x7522), // idProduct
htole16(0x0100), // bcdDevice, 1.00
0x01, // iManufacturer string
0x02, // iProduct string
0x03, // iSerialNumber (no serial string)
0x01 // bNumConfigurations
};
Semua deskriptor, topologi dan terminologi dirinci dan dirinci dalam standar "Definisi Kelas Perangkat Bus Serial Universal untuk Perangkat MIDI" . Dan untuk memulai dan mendalami topik dengan cepat, cukup mempelajari informasi yang diberikan oleh program "usbview.exe" dari Windows Driver Kit 7600 atau "USB Descriptor Dumper" . Sesuatu yang bahkan dapat Anda salin ke program Anda.
Gbr.6 Informasi tentang deskriptor dalam program "usbview.exe"
Deskriptor dan array serta struktur yang sesuai terletak di memori flash mikrokontroler (segmen kode), karena data ini tidak berubah (konstanta). Menyimpan konstanta dalam memori flash adalah trik pemrograman khas yang memungkinkan Anda menghemat RAM.
Perhatikan bidang Vendor_ID dan Product_ID di struktur deskriptor perangkat. Ini adalah sepasang angka untuk mengidentifikasi perangkat USB secara unik. Untuk mendapatkan nomor tersebut untuk perangkat Anda, Anda perlu membayar uang ke organisasi USB-IF atau mengirim permintaan ke pemilik Vendor_ID yang ada (pabrikan mikrokontroler) dan mendapatkan Product_ID. Dan Anda dapat, misalnya, menyukai orang China menggunakan VID & PID orang lain yang paling sesuai. Untuk proyek open source, ada opsi untuk mendapatkan Product_ID gratis .
Hal lain yang perlu diperhatikan saat mengembangkan perangkat USB dari kelas audio MIDI Streaming adalah konektor (Jack). Konektor adalah entitas imajiner (virtual) untuk menjelaskan topologi dan koneksi antara perangkat dan host. Mereka adalah input (Jack Masuk) dan output (Jack Keluar), internal (Tertanam) dan eksternal (Eksternal). Setiap konektor memiliki Jack_Id unik (nomor dari 0 hingga 15). Konektor keluaran berisi nomor ID Sumber, yaitu. nomor konektor untuk koneksi. Akhirnya, audio end-point (EP) bekerja di atas saluran yang terbentuk (aliran input dan output). Ini adalah EP Massal yang hampir biasa yang memiliki informasi pengikatan konektor di deskriptornya.
Angka: 7 Jack dan aliran virtual ke USB (kelas MIDI).
Deskriptor Jack MIDI
// EMB: IN Jack #1 <-----> EXT: OUT Jack #4
// EMB: OUT Jack #3 <-----> EXT: IN Jack #2
//--- Class-Specific MS Interface Header Descriptor, p.40
USB_MIDI_INTERFACE_DESCSIZE, // bLength, 7 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_HEADER, // bDescriptorSubtype, 0x01
0x00, // bcdADC(LSB)
0x01, // bcdADC(MSB), 0x0100 (version)
0x41, // wTotalLength(LSB), 65 bytes
0x00, // wTotalLength(MSB)
//--- MIDI IN JACK EMB(it connects to the USB OUT Endpoint), p.40
USB_IN_JACK_DESCSIZE, // bLength, 6 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_IN_JACK, // bDescriptorSubtype, 0x02
MIDI_JACK_TYPE_EMB, // bJackType, 0x01 (embedded)
1, // bJackID, #1
0, // Jack string descriptor, unused
//--- MIDI IN JACK EXT, p.40
USB_IN_JACK_DESCSIZE, // bLength, 6 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_IN_JACK, // bDescriptorSubtype, 0x02
MIDI_JACK_TYPE_EXT, // bJackType, 0x02 (external)
2, // bJackID, #2
0, // Jack string descriptor, unused
//--- MIDI OUT JACK EMB (connects to IN Endpoint), p.41
USB_OUT_JACK_DESCSIZE, // bLength, 9 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_OUT_JACK, // bDescriptorSubtype, 0x03
MIDI_JACK_TYPE_EMB, // bJackType, 0x01
3, // bJackID
1, // bNrInputPins
2, // baSourceID, this <=> Jack #2
1, // baSourcePin
0, // iJack, unused
//--- MIDI OUT JACK EXT, p.41
USB_OUT_JACK_DESCSIZE, // bLength, 9 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_OUT_JACK, // bDescriptorSubtype, 0x03
MIDI_JACK_TYPE_EXT, // bJackType, 0x02
4, // bJackID
1, // bNrInputPins
1, // baSourceID, this <=> Jack #1
1, // baSourcePin
0, // iJack, unused
Pertukaran data dalam perangkat audio kelas USB MIDI terdiri dari transmisi paket 32-bit (Paket Acara USB-MIDI). Pesan 1, 2 atau 3 byte diterima dari perangkat MIDI. Saat mentransfer melalui USB, byte kepala dengan nomor kabel dan kode perintah ditambahkan ke byte ini. Jika paket kurang dari 4 byte, maka paket tersebut diisi dengan 0. Dalam versi firmware saat ini, saya tidak mengisi dengan angka nol hingga batas 32-bit. Berhasil. Pertanyaannya tetap terbuka.
Misalnya, di kabel # 1, perintah untuk menekan tombol Note On (waktu transmisi 960us) diubah ke paket berikut:
MIDI: 0x90 0x60 0x7f => USB: 0x19 0x90 0x60 0x7f
Gbr. 8 Skema Paket Acara USB-MIDI dari spesifikasi USB.
typedef union
{
struct PACKET
{
uint8_t cable : 4; // Cable Number (we use #0)
uint8_t cin : 4; // Code Index Number (cmd: 0x08)
uint8_t cmd; // MIDI command (status byte)
uint8_t data1; // MIDI data byte #1
uint8_t data2; // MIDI data byte #2
};
uint8_t buffer[sizeof(struct PACKET)];
} MIDI_EVENT_PACKET;
Konversi langsung dan mundur dilakukan oleh fungsi MIDI2USB () dan USB2MIDI () . Dalam fungsi ini, mesin keadaan digunakan, ketika, saat data masukan tiba, fungsi beralih dari keadaan menunggu (IDLE) ke keadaan menerima perintah (STATUS), lalu ke keadaan menerima data (DATA), dan, akhirnya, mengirim data dengan kembali ke keadaan semula harapan.
Dalam protokol MIDI, byte data pada dasarnya adalah 7-bit (0..127). Mereka selalu memiliki bit paling signifikan ke-8 yang disetel ke 0. Perintah (byte status), sebaliknya, selalu datang dengan bit paling signifikan disetel ke 1, yaitu. memiliki nilai dari 128 hingga 255.
Gambar. 9 Jenis byte dalam protokol MIDI.
Lelucon tentang kapasitas digit angka
:
β , ?
β H, .
β , 11-22-33?
β H, 11-22-34.
β H ! , !
β , ?
β H, .
β , 11-22-33?
β H, 11-22-34.
β H ! , !
Semua skema dan kode sumber, serta firmware yang sudah selesai ada di repositori git saya . Lisensi MIT.
Perangkat lunak
Setelah memasang papan, mikrokontroler harus diprogram. Untuk melakukan ini, Anda dapat menggunakan SiLabs C2 Debug Adapter milik / klon, atau J-Link v10 + (dengan dukungan EFM8), atau bootloader yang di-flash di pabrik (revisi Rev-B), atau, terakhir, Arduino dengan skrip yang sesuai. Untuk memeriksa dan men-debug pesan MIDI , MIDI-OX sangat membantu .
Gambar 10 antarmuka program MIDI-OX.
Jika Anda bekerja dengan Cubase, Anda harus menginstal driver Asio, karena saat menggunakan DirectSound dan DirectInput, ada jeda antara menekan tombol dan memainkan not. Latensi tidak terkait dengan perangkat keras dan merupakan fitur implementasi OS. Secara umum, perangkat menjalankan fungsinya secara sempurna dengan instrumen Casio CDP-100.
Gambar 11 Antarmuka Cubase 5.
Firmware eksperimental menghasilkan aliran catatan terbesar dan perintah MIDI lainnya. Hingar bingar itu mengerikan, tetapi semuanya berjalan sebagaimana mestinya. Dan dengan MuseScore 3.2 Anda dapat merekam dan memutar file menengah.
Lelucon terakhir
1990-. . β . . :
β , !
β , ! β !
β ! !
β β¦ . !
β ! !
. . , , , β¦ . , . :
β , , ?
β , !
β , ! β !
β ! !
β β¦ . !
β ! !
. . , , , β¦ . , . :
β , , ?
Hasil pekerjaan
Adaptor berfungsi! Sepertinya saya berhasil membuat konverter MIDI ke USB yang bagus. Untuk perangkat saya, saya menggunakan casing, beberapa bagian dan kabel dari adaptor Cina. Konektor mini-USB berakhir jauh di dalam case dan saya harus mengulang kabel USB dan bekerja dengan file. LED, meskipun pada suatu sudut, tetap pas ke dalam lubang. Papan perlu dimodifikasi untuk kasus Cina.
Angka: 12. Steker mini-USB yang dibongkar kompak.
Keputusan untuk menggunakan mikrokontroler EFM8UB20 8-bit mungkin tampak kontroversial bagi sebagian orang. Ada opsi dan pengontrol lain, tentu saja. Cara alternatif adalah memilih solusi perangkat keras murni pada konverter CH345 dan membuat perangkat sesuai dengan rangkaian referensi yang direkomendasikan oleh Cina. Tapi versiku universal, tk. memungkinkan Anda untuk mengubah firmware, menambahkan fungsionalitas yang diinginkan atau memperbaiki kesalahan yang ditemukan. Akhirnya saya mendapatkan ilmu, pengalaman dan kepuasan moral dari proyek yang sudah selesai. Dan akhirnya, saya menyelesaikan artikel saya, dan Anda selesai membacanya.
tautan berguna
- Standar USB untuk perangkat MIDI
- Spesifikasi MIDI 1.0
- Perbandingan adaptor USB-MIDI
- Chip CH345T
- Dengarkan karya komposer muda
- Proyek terbuka penulis
Terima kasih atas perhatian Anda.