Kontrol perangkat eksternal dari komputer. Kontrol beban melalui antarmuka USB

Penulis telah mengembangkan program dan perangkat untuk mengendalikan berbagai perangkat listrik dan radio dengan menggunakan komputer. Perangkat terhubung ke salah satu port COM, dan perangkat dapat dikontrol menggunakan tombol di layar dan sensor eksternal.

Diagram perangkat ditunjukkan pada Gambar.1. Basisnya adalah chip 74HC595, yang merupakan 8-bit daftar geser dengan input serial dan output informasi serial dan paralel. Output paralel dilakukan melalui register buffer dengan output yang memiliki tiga status. Sinyal informasi disuplai ke input SER (pin 14), sinyal tulis ke input SCK (pin 11), dan sinyal output ke input RSK (pin 12). Chip DA1 berisi pengatur tegangan 5 V untuk memberi daya pada register DD1.

Gambar 1. Diagram perangkat

Perangkat terhubung ke salah satu port COM komputer. Sinyal informasi tiba di pin 7 soket XS1, sinyal perekaman informasi menuju ke pin 4, dan sinyal keluaran informasi menuju pin 3. Sinyal port COM, menurut standar RS-232, memiliki level sekitar -12 V (log. 1) dan sekitar +12 V (log.0). Level-level ini dipasangkan dengan level input register DD1 menggunakan resistor R2, R3, R5 dan dioda zener VD1-VD3 dengan tegangan stabilisasi 5,1 V.

Sinyal kontrol untuk perangkat eksternal dihasilkan pada output Q0-Q7 dari register DD1. Level tinggi sama dengan tegangan suplai sirkuit mikro (sekitar 5 V), level rendah kurang dari 0,4 V. Sinyal-sinyal ini statis dan diperbarui ketika level tinggi tiba di input RSK (pin 12) dari DD1 daftar. LED HL1-HL8 dirancang untuk memantau pengoperasian perangkat.

Perangkat dikendalikan menggunakan program UmiCOM yang dikembangkan oleh penulis. Penampilan jendela program utama ditampilkan di Gambar.2.

Gambar 2. Tampilan program UniCOM

Setelah memulainya, Anda harus memilih port COM gratis dan kecepatan peralihan keluaran. Status masing-masing keluaran perangkat dimasukkan ke dalam baris tabel (tingkat tinggi - 1, tingkat rendah - 0 atau kosong). Program yang “menyortir” kolom tabel dalam siklus operasi menetapkan level logis yang sesuai pada output perangkat. Informasi yang dimasukkan ke dalam tabel secara otomatis disimpan ketika program dihentikan dan dimuat kembali pada peluncuran berikutnya. Untuk kejelasan, di sisi kiri jendela program, jumlah output yang diatur ke level tinggi disorot.

Perangkat juga dapat dikontrol menggunakan sensor kontak eksternal, yang dihubungkan ke input 1-3 dan saluran +5 V. Perangkat tersebut harus beroperasi untuk menutup atau membuka kontak. Contoh diagram koneksi sensor ditunjukkan pada Gambar.3.

Gambar 3. Menghubungkan sensor kontak

Saat Anda menekan tombol softkey "Pengaturan Input", jendela "Penetapan Input dan Output" akan terbuka ( Gambar.4.), dimana masukan dipilih yang akan mengubah keadaan keluaran. Anda dapat mensimulasikan pengoperasian input dengan mengklik tombol lunak"1", "2", "3" dari jendela program utama. Dalam kasus di mana perangkat tidak dapat dikontrol menggunakan level logis, relai harus digunakan, diagram koneksinya ditunjukkan pada Gambar.5, atau pengkopling optis transistor ( Gambar.6.).

Gambar 4. Pencocokan input dan output

Gambar 5. Diagram sambungan relai

Gambar 6. Diagram koneksi optokopler transistor

Sebagian besar bagian dipasang pada papan sirkuit tercetak yang terbuat dari fiberglass foil satu sisi dengan ketebalan 1...1,5 mm, gambarnya ditunjukkan pada Gambar.7. Resistor R1-R6 dipasang pada terminal soket XS1.

Gambar 7. Gambar PCB

Perangkat ini menggunakan resistor C2-23. MLT, kapasitor oksida- K50-35 atau diimpor, soket XS1 - DB9F. Selain dioda zener yang ditunjukkan dalam diagram, Anda dapat menggunakan BZX55C5V1 atau KS174A domestik, LED apa pun. Perangkat ini diberi daya dari sumber listrik yang stabil atau tidak stabil dengan tegangan 12 V dan arus hingga 100 mA.

Perangkat kontrol komputer
berbagai perangkat, diagramnya ditunjukkan pada Gambar. 1, secara fungsional serupa
dijelaskan dalam, tetapi terhubung ke port USB komputer, yang (tidak seperti
dari port COM) hadir di masing-masing port saat ini. Satu-satunya chip perangkat
- mikrokontroler umum ATmega8. Hal ini diperlukan untuk organisasi
Komunikasi bus USB. Meskipun tidak memiliki perangkat keras khusus
modul, fungsi ini dilakukan dalam perangkat lunak. Resistor R1 terhubung antara
terminal positif catu daya dan saluran D- bus USB, transfer ke kecepatan rendah
Mode LS dengan nilai tukar 1,5 Mbit/s, yang memungkinkan Anda mendekripsi paket
komputer secara terprogram. Resistor R4 dan R5 menghilangkan transien
proses yang timbul selama pertukaran informasi, yang meningkatkan stabilitas kerja.
Kapasitor C1 memblokir gangguan impuls di sirkuit daya, yang juga meningkat
stabilitas perangkat. Dioda VD1 dan VD2 digunakan untuk menurunkan tegangan
suplai mikrokontroler ke sekitar 3,6 V - ini diperlukan untuk
tingkat kecocokan dengan bus USB. Sinyal kontrol perangkat dihasilkan
keluaran РВ0-РВ5 dan PC0, PC1 dari mikrokontroler. Tinggi tingkat logika -
tegangan sekitar 3,4 V. Tegangan tingkat rendah mendekati nol. Ke pintu keluar
Anda dapat menghubungkan perangkat yang mengkonsumsi arus tidak lebih dari 10 mA (dari setiap output).
Jika diperlukan nilai arus atau tegangan yang besar, maka node harus digunakan
perjanjian yang ditunjukkan pada Gambar. 5 dan 6.

Perangkat ini dirakit di papan tempat memotong roti,
tidak ada versi cetak yang dikembangkan. Resistor MLT, kapasitor C2 dan C3 digunakan -
keramik frekuensi tinggi, C1 - K50-35 atau sejenisnya diimpor. Dioda
silikon dengan penurunan tegangan pada sambungan sekitar 0,7 V. Program untuk mikrokontroler
dikembangkan di lingkungan Bascom-AVR versi 1.12.0.0. Untuk pengoperasian bus USB
Pustaka swusb.LBX digunakan, yang melakukan decoding sinyal perangkat lunak
USB secara real-time. Kode program yang dihasilkan
dari file dengan ekstensi HEX harus dimuat ke memori FLASH mikrokontroler.
Untuk tujuan ini, programmer digunakan bersama dengan Bascom-AVR bawaan
kegunaan. Keadaan bit konfigurasi mikrokontroler harus sesuai
ditunjukkan pada Gambar. 2. Saat menghubungkan perangkat ke komputer untuk pertama kalinya, sistem operasi
sistem akan mendeteksi USB HID baru perangkat yang kompatibel dengan nama
"uniUSB" dan instal driver yang diperlukan. Dalam beberapa detik
Perangkat telah dikonfigurasi dan siap digunakan.

Sebuah program telah dibuat untuk bekerja dengannya
UniUSB. Itu disajikan dalam dua versi: untuk 32-bit (x86) dan 64-bit
(x64) sistem operasi keluarga Windows. Versi 32-bit telah diverifikasi berfungsi
di sistem operasi Windows 98, Windows XP, Windows 7, dan 64-bit -
hanya di Windows XP x64. Program UniUSB ditulis dalam bahasa PureBasic (versi
4.31) menggunakan perpustakaan HID_lib dari fungsi yang ditentukan pengguna,
mendukung pekerjaan dengan perangkat USB HID. Tampilan jendela program
ditunjukkan pada Gambar. 3. Di folder yang sama dengannya file yang dapat dieksekusi harus
file bernama UniUSB_Code.txt atau UniCOM_Code.txt. Opsi terakhir diperlukan
untuk kompatibilitas dengan program UniCOM yang diusulkan di . Dalam berkas ini
Skrip untuk mengendalikan perangkat eksternal disimpan. Saat program dimulai, datanya
dari file dimuat ke dalam tabel yang terletak di jendela utama, dan setelah selesai
karya disimpan dalam sebuah file. Mengklik kiri pada sel tabel memungkinkan Anda melakukannya
ubah statusnya: 1 - tingkat logika tinggi, 0 atau kosong - rendah
tingkat logis. Untuk menambah atau menghapus kolom tabel, Anda perlu menggunakannya
klik klik kanan mouse dan pilih tindakan yang diperlukan di menu yang muncul.

Saat menghubungkan perangkat ke port USB
program akan mendeteksinya dan mengaktifkan tombol yang terletak di atas
jendela pada toolbar. Mengklik tombol ini memulai prosesnya
mencari melalui kolom tabel dan mengatur status keluaran yang ditunjukkan di dalamnya. Untuk
Untuk lebih jelasnya, nomor keluaran disorot di sebelah kiri tabel, di
yang saat ini disetel ke tingkat logika tinggi. Kecepatan
pencarian (waktu dalam milidetik antara transisi dari kolom ke kolom) diatur
di bidang “Kecepatan, ms”.

Harap dicatat bahwa sistem operasinya adalah Windows
- multitugas! Ini berarti waktu CPU dibagi ke banyak orang
terkadang tersembunyi dari pengguna proses yang dijalankan secara bergantian
dengan mempertimbangkan prioritas yang ditetapkan dalam sistem. Jadi jangan berharap banyak
akurasi mempertahankan interval waktu kurang dari 100 ms. Untuk jangka pendek
Untuk berhenti mengulangi kolom, gunakan tombol Klik lagi
akan melanjutkan pencarian dari tempat berhentinya. Tombol ini benar-benar berhenti melakukan iterasi melalui kolom
tabel. Jika selama pertukaran informasi antara komputer dan perangkat
kegagalan akan terjadi atau perangkat akan terputus dari konektornya USB Komputer,
program akan melaporkan kesalahan dengan menampilkan yang sesuai
pesan.

LITERATUR

1. Nosov T. Kontrol perangkat
melalui port COM komputer. - Radio, 2007, No.11,0.61,62.

2. Ryzhkov A. Pemrogram AS
Mikrokontroler AVR dan AT89S, kompatibel dengan AVR910. - Radio, 2008, No. 7, hal.
28, 29.

Dari editor. Program untuk mikrokontroler dan komputer berada
di server FTP kami di ftp://ftp.radio.ru/pub/2011/02/uniUSB.zip

Skor 1 Skor 2 Skor 3 Skor 4 Skor 5

Perangkat kontrol komputer untuk berbagai perangkat, diagramnya ditunjukkan pada Gambar. 1, terhubung ke port USB komputer, yang ada di masing-masing komputer saat ini. Satu-satunya chip perangkat ini adalah mikrokontroler umum ATmega8. Hal ini diperlukan untuk mengatur komunikasi melalui bus. USB. Meski kurang terspesialisasi modul perangkat keras, fungsi ini dilakukan oleh perangkat lunak.

Gambar 1

Resistor R1, terhubung antara terminal positif catu daya dan jalur USB D-bus, mengalihkannya ke mode LS kecepatan rendah dengan nilai tukar 1,5 Mbit/s, yang memungkinkan Anda mendekripsi pesan komputer secara terprogram. Resistor R4 dan R5 menghilangkan transien yang terjadi selama pertukaran informasi, sehingga meningkatkan stabilitas pengoperasian. Blok kapasitor C1 kebisingan impuls di sirkuit catu daya, yang juga meningkatkan stabilitas perangkat. Dioda VD1 dan VD2 digunakan untuk menurunkan tegangan suplai mikrokontroler menjadi sekitar 3,6 V - ini diperlukan untuk mencocokkan level dengan bus USB.

Sinyal kontrol perangkat dihasilkan pada output PB0-PB5 dan PC0, PC1 mikrokontroler. Tingkat logika tinggi - tegangan sekitar 3,4 V. Tegangan tingkat rendah mendekati nol. Anda dapat menghubungkan perangkat ke output yang mengkonsumsi arus tidak lebih dari 10 mA (dari setiap output). Jika diperlukan nilai arus atau tegangan yang besar, maka node yang cocok harus digunakan.

Perangkat dirakit di papan tempat memotong roti, papan sirkuit tercetak belum dikembangkan. Resistor MLT digunakan, kapasitor C2 dan SZ adalah kapasitor keramik frekuensi tinggi, C1 adalah K50-35 atau sejenisnya yang diimpor. Dioda silikon dengan penurunan tegangan pada sambungan sekitar 0,7 V.

Program untuk mikrokontroler dikembangkan di lingkungan Bascom-AVR versi 1.12.0.0. Perpustakaan digunakan untuk bekerja dengan bus USB swusb.LBX, yang melakukan decoding perangkat lunak sinyal USB secara real time. Kode program yang dihasilkan dari file berekstensi HEX harus dimuat ke dalam memori FLASH mikrokontroler. Keadaan bit konfigurasi mikrokontroler harus sesuai dengan yang ditunjukkan pada Gambar. 2.

Gambar 2

Saat Anda menghubungkan perangkat ke komputer untuk pertama kalinya, sistem operasi akan mendeteksi perangkat baru USB TERSEMBUNYI perangkat yang kompatibel bernama " uniUSB" dan akan menginstal driver yang diperlukan. Setelah beberapa detik, perangkat dikonfigurasi dan siap digunakan. Program UniUSB dibuat untuk bekerja dengannya. Ini tersedia dalam dua versi: untuk 32-bit (x86) dan 64-bit (x64) sistem operasi keluarga Windows Versi 32-bit telah diuji pada sistem operasi Windows 98, Windows XP, Windows 7, dan versi 64-bit hanya diuji pada Windows XP x64.

Program UniUSB ditulis dalam bahasa Dasar Murni(versi 4.31) menggunakan perpustakaan fungsi khusus HID_Lib, mendukung pekerjaan dengan USB TERSEMBUNYI perangkat. Tampilan jendela program ditunjukkan pada Gambar. 3.

Gambar 3

Di folder yang sama dengan file yang dapat dieksekusi, seharusnya ada file bernama UniUSB_KOfl.txt. File ini menyimpan skrip untuk mengendalikan perangkat eksternal. Saat program dimulai, data dari file dimuat ke dalam tabel yang terletak di jendela utama, dan ketika pekerjaan selesai, data tersebut disimpan dalam file. Mengklik kiri pada sel tabel memungkinkan Anda mengubah statusnya: 1 - tingkat logika tinggi, 0 atau kosong - tingkat logika rendah.

Untuk menambah atau menghapus kolom tabel, Anda perlu mengklik kanan kolom tersebut dan memilih tindakan yang diperlukan di menu yang muncul. Saat Anda menghubungkan perangkat ke port USB, program akan mendeteksinya dan mengaktifkan tombol Start yang terletak di bagian atas jendela pada toolbar. Mengklik tombol ini akan memulai proses penyortiran kolom tabel dan mengatur status keluaran yang ditunjukkan di dalamnya. Untuk lebih jelasnya, di sebelah kiri tabel adalah jumlah keluaran saat ini Tingkat logikanya disetel tinggi. Kecepatan pencarian (waktu dalam milidetik antara transisi dari kolom ke kolom) diatur di bidang "Kecepatan, ms".

kelas="eliadunit">

Harap dicatat bahwa sistem operasi Windows bersifat multitasking! Ini berarti bahwa waktu prosesor dibagi di antara banyak proses, terkadang tersembunyi dari pengguna, yang dijalankan secara bergantian, dengan mempertimbangkan prioritas yang ditetapkan dalam sistem. Oleh karena itu, Anda tidak boleh mengharapkan akurasi yang tinggi dalam mempertahankan interval waktu kurang dari 100 ms.

Untuk menghentikan penyortiran kolom sebentar, gunakan tombol "Jeda". Menekannya lagi akan melanjutkan pencarian dari tempat berhentinya. Tombol "Stop" benar-benar menghentikan pencarian di kolom tabel. Jika terjadi kegagalan selama pertukaran informasi antara komputer dan perangkat, atau perangkat terputus dari konektor USB komputer, program akan melaporkan kesalahan dengan menampilkan pesan terkait di bilah status.

Sumber: Radio No.2, 2011

Arsip untuk artikel "Muat kontrol melalui Antarmuka USB"
Keterangan: Teks sumber program, file firmware mikrokontroler, program uniUSB
Ukuran berkas: 89,3 KB Jumlah unduhan: 2 773

Artikel ini mencoba memberikan petunjuk langkah demi langkah- cara menghubungkan perangkat buatan sendiri USB TERSEMBUNYI pada mikrokontroler AVR dan komputer dengan sistem operasi jendela 7x64 untuk berkomunikasi dan mengontrol port mikrokontroler. Contoh aplikasi mengontrol pin port mikrokontroler melalui USB (LED indikator terhubung dengannya). Dimungkinkan juga untuk membaca status LED - apakah mati atau hidup. Topik ini ditujukan untuk pemula, jadi permintaan besar kepada para ahli pemrograman - simpan komentar ironis telur busuk dan tomat busuk untuk kesempatan yang lebih nyaman.

Perangkat lunak yang digunakan

1 . Untuk mikrokontroler - perpustakaan V-USB dari Objective Development dan IDE Studio Atmel 6 dari Atmel. Anda juga perlu mengunduh dan menginstal rantai alat WinAVR untuk mengkompilasi firmware mikrokontroler (untuk spesialis hal ini tidak diperlukan, karena Anda dapat menggunakan rantai alat yang disertakan dalam Atmel Studio).
2 . Untuk menulis program Windows(perangkat lunak host) Perpustakaan LibUsbDotNet dan IDE Travis Robinson digunakan Studio Visual C# 2010 dari Microsoft.

Semua perangkat lunak, kecuali Visual Studio 2010, gratis, meskipun Anda dapat menggunakan Visual Studio C# 2010 Express gratis untuk waktu terbatas. Seluruh kegiatan dilakukan di lingkungan ruang operasi sistem Windows 7 x64, tetapi sistem operasi lain dari keluarga Windows (Windows XP dan yang lebih baru) mungkin juga dapat berfungsi.

Besi yang digunakan

Menampilkan perpustakaan V-USB untuk membuat perangkat USB HID Apapun bisa dilakukan Mikrokontroler AVR. Jika Anda merasa nyaman dengan besi solder, Anda bahkan dapat memasang sendiri koneksi USB menggunakan salah satu diagram yang diterbitkan. Sirkuit seperti itu (diambil dari paket V-USB) ditunjukkan pada gambar sebagai contoh.

Untuk menghemat waktu dan tenaga, lebih baik menggunakan papan tempat memotong roti yang sudah jadi. Sangat nyaman jika bootloader USB ditulis ke papan, maka Anda tidak perlu membeli programmer untuk mem-flash papan. Saya menggunakan papan pengembangan AVR-USB-MEGA16 dengan mikrokontroler ATmega32A, ia memiliki bootloader (USBasploader, meniru perilaku Pemrogram USBasp). Ini penampakan syal dalam ukuran penuh:

Anda juga dapat menggunakan metaboard (memiliki ATmega168 atau ATmega328), atau bahkan programmer pada mikrokontroler ATmega8. Kelenjar seperti itu bisa dibeli dengan harga murah di eBay.com atau dx.com.

Membuat firmware mikrokontroler menggunakan Atmel Studio 6 dan perpustakaan V-USB

Melakukan proyek baru di Atmel Studio 6 (selanjutnya disebut AS6). Saat AS6 meminta Anda memilih mikrokontroler, pilih Atmega32 tanpa surat A, bukan Atmega32A (meskipun board memilikinya Atmega32A) - ini penting, karena toolchain WinAVR tidak melihat perbedaannya, ia hanya mengetahui Atmega32. Mikrokontroler ini adalah struktur internal identik, jadi bagi kami tidak ada perbedaan, tapi untuk AS6 ada.

Sekarang Anda perlu mengkonfigurasi kompiler dengan benar. DI DALAM menu teratas AS6 menguangkan Peralatan, lebih jauh Pilihan.. dan jendela ini akan muncul:

Dari daftar di sebelah kiri, pilih rantai alat. Daftar Rasa akan muncul di sebelah kanan. Atmel mengkodekan kata ini pilihan yang memungkinkan alat yang digunakan (rantai alat).

Catatan. Daftar tersebut sudah berisi rantai alat Asli, yang digunakan secara default (Default). Toolchain Native adalah kompiler GCC bersama dengan file header dan perpustakaan yang menyediakan lingkungan yang diperlukan kompilasi kode sumber untuk mikrokontroler. Toolchain ini disediakan oleh Atmel dan diinstal secara otomatis dengan instalasi AS6. Seperti yang telah saya sebutkan, Anda dapat menggunakan rantai alat ini untuk kompilasi, tetapi kemudian ke dalam kode sumber Contoh V-USB(berdasarkan Contoh USB HID akan berfungsi pada perangkat USB kami) Anda harus melakukan koreksi secara manual. Sederhana saja, tetapi untuk pemula akan lebih baik menambahkan toolchain WinAVR di sini dan menggunakannya untuk kompilasi.
Untuk menambahkan rantai alat WinAVR ke daftar Flavours, klik tombol Tambahkan Rasa, jendela berikut akan muncul:

Di baris atas jendela ini, masukkan nama kompiler WinAVR (sewenang-wenang), dan di baris paling bawah, masukkan jalur penuh, tempat kompiler toolchain itu sendiri diinstal (menunjukkan folder \bin) dan klik tombol Menambahkan. Kompiler yang ditambahkan akan muncul di daftar Flavours, seperti yang ditunjukkan pada tangkapan layar.

Pilih kompiler WinAVR kami yang baru ditambahkan dengan mouse dan klik tombol Tetapkan Sebagai Default(jadikan ini alat default) dan klik OK. Setelah prosedur ini, AS6 kami akan menggunakan kompiler WinAVR.

Saatnya untuk mengkonfigurasi properti proyek kita; untuk melakukan ini, dengan kursor di Solution Explorer, klik kiri pada nama proyek dan klik Alt+F7(menu Project -> Properties), sebuah jendela dengan pengaturan akan muncul:

Melakukan pengaturan berikut:

  • Di bagian Kompiler AVR/GNU C -> Simbol tambahkan ke lapangan -D garis F_CPU=12000000UL- ini sesuai dengan frekuensi mikrokontroler 12 MHz (kuarsa ini dipasang pada papan pengembangan AVR-USB-MEGA16 saya).
  • Di bagian Perakit AVR/GNU -> Umum di lapangan Bendera perakit perlu ditambahkan -DF_CPU=12000000UL.
  • Di bagian Kompiler AVR/GNU C -> Optimasi di lapangan Tingkat Optimasi harus berdiri Optimalkan ukuran (-Os).
Lebih jauh lagi poin penting- di sisi kiri jendela, pilih bagian dalam daftar Canggih, seperti yang ditunjukkan pada gambar di bawah ini.

Di daftar tarik-turun Rasa Rantai Alat pilih kompiler WinAVR yang ditambahkan sehingga AS6 menggunakannya saat mengkompilasi proyek. Ini menyelesaikan pengaturan AS6.

Selanjutnya, Anda perlu menambahkan file kode sumber proyek ke proyek yang dibuat - lihat folder firmware\VUSB, file VUSB.c, usbdrv.c, usbdrvasm.S dan oddsebug.c. Proyek ASS6 didasarkan pada salah satu contoh perpustakaan V-USB: hid-custom-rq, yang awalnya dikompilasi menggunakan utilitas make dari baris perintah. Banyak contoh kode lain dapat ditemukan berdasarkan perpustakaan V-USB - sebagian besar perangkat USB HID (mouse, keyboard, perangkat input dan output), tetapi ada juga perangkat USB CDC (virtual COM port). Jika Anda terlalu malas untuk membuat proyek sendiri, buka saja file proyek VUSB.atsln di AS6, semuanya sudah selesai di dalamnya pengaturan yang diperlukan dan semua file yang diperlukan ditambahkan.

Jika Anda menggunakan papan pengembangan yang berbeda, Anda perlu mengkonfigurasi file dengan benar usbconfig.h. Ini adalah file konfigurasi perpustakaan V-USB, banyak pengaturan dan parameter ditentukan di dalamnya (VID, PID, pin mikrokontroler, nilai deskriptor, dan pengaturan lainnya). Deskripsi rinci Semua pengaturan diberikan di komentar file ini. Perhatian utama harus diberikan pada penetapan pin mikrokontroler, yang digunakan untuk sinyal USD D+ dan D- (definisi makro USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT, USB_CFG_DPLUS_BIT), persyaratan khusus dikenakan pada pin ini. Berkas konfigurasi usbconfig.h dari arsip yang dirancang untuk kaki perutean papan tempat memotong roti AVR-USB-MEGA16 dan dijamin berfungsi. Program akan mengedipkan LED yang sudah ada pada breadboard dan terhubung ke pin 0 port B.

Membuat program komputer (perangkat lunak host)

Program kami harus dikirim melalui koneksi USB paket yang akan mengontrol mikrokontroler.

Catatan. Program ini dibuat berdasarkan contoh aplikasi konsol dari perpustakaan V-USB yang sama. Kode sumber untuk aplikasi konsol dikompilasi menggunakan makefile dan paket MinGW, dan menggunakan perpustakaan LibUSB. Dalam contoh kita, kita akan menggunakan lingkungan grafis Visual Studio dan perpustakaan LibUsbDotNet. Namun, manfaat utama menggunakan LibUsbDotNet sama sekali bukan bahwa sekarang Anda dapat dengan mudah dan nyaman membuat tidak hanya konsol, tetapi juga aplikasi grafis. Kelebihan terbesarnya adalah sekarang tidak diperlukan driver filter, yang telah dibawa oleh perpustakaan LibUSB selama bertahun-tahun. Bagi mereka yang berada di dalam tangki, driver filter adalah perangkat lunak tambahan khusus untuk perpustakaan LibUSB, yang melaluinya data ditukar dengan perangkat USB di platform Windows. Sekarang atavisme ini tidak diperlukan.
Berlari Microsoft Visual C# 2010 Express dan buat proyek baru di Berbasis Windows Membentuk. Sekarang Anda perlu menghubungkan perpustakaan ke proyek LibUsbDotNet.dll. Di Solution Explorer, klik kanan pada nama proyek, dan pilih "Tambahkan Referensi".

Jendela lain akan muncul

Di sini Anda perlu menemukan jalur pada disk tempat perpustakaan LinUsbDotNet.dll berada (secara default diinstal di folder C:\Program Files\LibUsbDotNet, tetapi lebih baik membuat salinan berkas DLL ke direktori kerja proyek. Setelah menghubungkan perpustakaan, itu perlu dideklarasikan dalam proyek; untuk melakukan ini, tambahkan baris berikut ke modul program utama (file Form1.cs):

Menggunakan LibUsbDotNet; menggunakan LibUsbDotNet.Info; menggunakan LibUsbDotNet.Utama;
Pergi ke editor formulir visual dan buatlah terlihat seperti ini (tambahkan 3 tombol dan 3 label teks Label):

Buat pengendali acara pemuatan formulir. Hal ini diperlukan agar ketika program dimulai, sebuah instance dari kelas LibUsbDotNet diinisialisasi, yang melaluinya pertukaran dengan perangkat USB dilakukan. Sebelum memulai pertukaran, perlu untuk membuka akses ke perangkat kami, karena beberapa perangkat USB HID dapat dihubungkan ke komputer, dan Anda harus dapat mengakses masing-masing perangkat secara terpisah. Untuk tujuan mengidentifikasi perangkat USB, ada pengenal khusus yang dimiliki semua perangkat USB, yaitu VID dan PID.

Catatan. Terkadang perangkat unik juga digunakan untuk mengidentifikasi perangkat tersebut. nomor seri atau deskriptor teks terpisah - ketika beberapa perangkat USB dengan VID dan PID yang sama terhubung ke komputer, tetapi ini bukan kasus kami. Karena biasanya setiap perangkat USB yang terhubung ke komputer memiliki pasangan VID/PID masing-masing, berbeda dengan perangkat lain, maka temukan perangkat yang diperlukan dan menghubunginya tidak masalah.
VID adalah ID Vendor dan PID adalah ID Produk. Perangkat USB kami memiliki VID: 0x 16C0, PID: 0x 05DF, nilai-nilai ini ditunjukkan dalam file konfigurasi usbconfig.h(kami telah menyebutkan file ini) dari proyek mikrokontroler AS6. Agar perangkat lunak host dapat mengakses perangkat USB kita secara khusus, kita perlu menginisialisasi objek MyUsbFinder dengan parameter yang sama VID: 0x16c0, PID: 0x05df, seperti yang ditentukan dalam file usbconfig.h. Untuk melakukannya, tambahkan kode berikut ke area definisi variabel global kelas Form1:

UsbDevice statis publik MyUsbDevice;
UsbDeviceFinder statis publik MyUsbFinder = UsbDeviceFinder baru (0x16c0, 0x05df);

Setelah kami memutuskan perangkat USB mana yang akan kami gunakan, kami dapat menyambungkannya, dan ini mudah dilakukan saat program dimulai (membuka jendela formulir). Untuk melakukan ini, pilih bentuk utama program, dan di editor properti buat event handler beban Form1_Load. Di badan handler, masukkan kode berikut:
Private void Form1_Load(pengirim objek, EventArgs e) ( MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); if (MyUsbDevice != null) ( label2.Text = "terhubung!"; ) else label2.Text = "tidak ditemukan!"; ) Buat event handler klik pada tombol button1 (“On”), untuk melakukan ini, lakukan di editor visual pada tombol klik dua kali

, dan tambahkan kode berikut ke badan pengendali kejadian:
Private void button1_Click(object sender, EventArgs e) ( // Kirim paket yang menyalakan LED pada papan pengembangan AVR-USB-MEGA16. Paket UsbSetupPacket = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags .Direction_Out) , 1, (pendek)1, 0, 0); byte data = byte baru; ControlTransfer(paket referensi, data, 0, hitungan keluar);

Untuk pengendali tombol "Off", tambahkan kode berikut:
Private void button3_Click(pengirim objek, EventArgs e) ( // Kirim paket yang akan mematikan LED pada papan pengembangan AVR-USB-MEGA16. Paket UsbSetupPacket = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out) ), 1, (pendek)0, 0, 0); byte data = byte baru; ControlTransfer(ref paket, data, 0, keluar countIn);

Private void button2_Click(object sender, EventArgs e) ( //Menerima data dari papan pengembangan AVR-USB-MEGA16 - status LED. Paket UsbSetupPacket = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_In) , 2, (pendek)0, (pendek)0); int countIn; byte data = byte baru; if (MyUsbDevice.ControlTransfer(ref paket, data, 1, out countIn) && (countIn == 1) ) ( label3. Teks = "Baca nilai " + data.ToString();
Form close event handler (penghentian program) mematikan LED jika menyala:

Private void Form1_FormClosed(pengirim objek, FormClosedEventArgs e) ( Paket UsbSetupPacket = UsbSetupPacket baru((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out), 1, (pendek)0, 0, 0); t countIn; data = byte baru; MyUsbDevice.ControlTransfer(paket referensi, data, 0, hitungan keluar)

Bagaimana paket USB diterjemahkan dalam firmware mikrokontroler

Penerimaan dan pengolahan data pada sisi mikrokontroler dilakukan pada fungsi pengaturan fungsi usb(terletak di modul utama VUSB.c dari proyek firmware AS6). Inilah fungsinya:

UsbMsgLen_t usbFunctionSetup(uchar data) ( usbRequest_t *rq = (void *)data; if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR)( DBG1(0x50, &rq->bRequest, 1); /* keluaran debug: cetak permintaan kami */ if(rq->bRequest == CUSTOM_RQ_SET_STATUS)( if(rq->wValue.bytes & 1)( /* atur LED */ LED_PORT_OUTPUT |= _BV(LED_BIT); )else( /* hapus LED */ LED_PORT_OUTPUT &= ~_BV(LED_BIT); )else if(rq->bRequest == CUSTOM_RQ_GET_STATUS)( static uchar dataBuffer; /* buffer harus tetap valid saat keluar dari usbFunctionSetup */ dataBuffer = ((LED_PORT_OUTPUT & _BV(LED_BIT)) ! = 0); usbMsgPtr = dataBuffer; /* beri tahu pengemudi data apa yang harus dikembalikan */ kembalikan 1; /* beri tahu pengemudi untuk mengirim 1 byte */ ) )else( /* panggilan ke USBRQ_HID_GET_REPORT dan permintaan USBRQ_HID_SET_REPORT tidak diterapkan, * karena kami tidak memanggilnya . Sistem operasi juga tidak akan mengaksesnya * karena pegangan kami tidak menentukan nilai apa pun */ ) mengembalikan 0 /* default untuk permintaan yang belum terselesaikan: jangan mengembalikan data ke host */ )
Perangkat USB HID kami sederhana, dan hanya merespons transfer kontrol yang melewati titik akhir kontrol default 0. Arah transmisi data didekodekan berdasarkan jenis permintaan (bidang bRequest). Jika CUSTOM_RQ_SET_STATUS, maka ini adalah data yang ditujukan untuk mikrokontroler. Data diterjemahkan dan mikrokontroler menjalankan perintah yang tertanam di sana. Dalam hal ini, dalam byte pertama data yang diterima, status LED dikodekan - jika ada satu dalam bit paling tidak signifikan, maka LED menyala, dan jika nol, maka padam. Jika bidang bRequest menerima nilai CUSTOM_RQ_GET_STATUS, maka buffer diisi sebagai respons keadaan saat ini LED dan data buffer dikirim kembali ke host. Semuanya sangat sederhana, dan jika diinginkan, perilaku kode dapat dengan mudah dimodifikasi sesuai kebutuhan Anda.

Video cara kerjanya:

Saya akan dengan senang hati menjawab pertanyaan dan komentar yang membangun di komentar.

Banyak dari kita mungkin ingin mengelolanya rangkaian listrik melalui komputer. Dan apa? Itu akan menyenangkan. Bayangkan, seorang teman menelepon Anda dan berkata: “Saya akan sampai di sana dalam 20 menit,” lalu 20 menit berlalu, bel pintu berbunyi, tetapi Anda tidak ingin bangun dari komputer, membuka pintu, dll. Bayangkan situasi yang berbeda: bel pintu berbunyi, pesan seperti "Anda punya tamu" muncul di monitor Anda, Anda menekan tombol di komputer - kunci magnet di pintu terbuka, dan Anda berteriak ke seluruh rumah: "Masuk, ” atau Anda perlu menyalakan ketel listrik, lampu, atau yang lainnya. Saat ini, hal ini bukan lagi fantasi, tetapi cukup realistis, hanya karena perekonomian yang buruk, tidak semua orang mampu membeli “rumah pintar” yang paling sederhana sekalipun, tetapi jika Anda memiliki keinginan dan tangan langsung, maka Anda dapat dengan mudah mengontrol rangkaian listrik melalui PC. .

Saat ini cukup banyak orang yang mengetahui cara memprogram; mereka dapat menulis program untuk komputer yang dapat dikontrol perangkat eksternal, tapi bagaimana cara menghubungkan ketel listrik yang sama ke komputer? Ya, Anda bisa, misalnya, melalui Pelabuhan LPT, tapi sekarang kamu jarang bisa melihatnya dimanapun, lalu apa yang tersisa? USB!!!

Mari kita membuat perangkat yang dapat terhubung ke USB dan mampu mengontrol rangkaian listrik (misalnya menyalakan lampu), merespons penutupan tombol (misalnya bel pintu) dan lainnya.

Jadi, kita akan membuatnya dari apa? Mereka yang tertarik dengan masalah ini mungkin pernah mendengar tentang modul Ke-USB24A.

Keterangan:

Modul Ke-USB24A dirancang untuk menghubungkan perangkat digital dan analog eksternal, sensor dan aktuator dengan komputer melalui bus USB. Didefinisikan sebagai opsional (virtual) Pelabuhan COM. Modul ini memiliki 24 jalur input/output terpisah (baik logika 0 atau logika 1) dengan kemampuan untuk mengkonfigurasi arah transfer data (input/output) dan ADC 10-bit bawaan. Untuk mengontrol modul, disediakan seperangkat perintah kontrol teks (KE - perintah).

Fitur khas:

  • modul antarmuka untuk antarmuka USB
  • didefinisikan oleh OS Windows/Linux sebagai port COM virtual
  • tidak memerlukan elemen rangkaian tambahan, langsung siap digunakan
  • 24 jalur input/output terpisah dengan kemampuan untuk secara mandiri mengkonfigurasi arah transfer data (input/output) dan menyimpan pengaturan di memori non-volatil modul
  • ADC 10-bit bawaan dengan frekuensi pengambilan sampel terjamin hingga 400 Hz.
  • rentang dinamis tegangan input sinyal analog untuk ADC dari 0 hingga 5 V.
  • satu set perintah kontrol teks tingkat tinggi yang sudah jadi (KE - perintah)
  • faktor bentuk yang nyaman dalam bentuk modul dengan blok DIP dan konektor USB-B
  • Kemungkinan catu daya dari bus USB dan sumber eksternal catu daya (mode dipilih oleh jumper di papan)
  • kemampuan untuk menyimpan data pengguna dalam memori non-volatil modul (hingga 32 byte)
  • kemampuan untuk mengubah deskriptor string perangkat USB
  • setiap modul memiliki nomor seri unik yang dapat diakses oleh perangkat lunak
  • dukungan untuk Windows 2000, 2003, XP 32/64 bit, Vista 32/64 bit dan Windows 7 32/64 bit
  • dukungan OS Linux

Sepertinya ini yang kita butuhkan, TAPI... harga keajaiban ini mulai dari $40. Anda mungkin sudah kehilangan keinginan untuk membelinya.

Mari kita merakit sendiri modul seperti itu, agar dapat diakses bahkan oleh siswa yang lapar!

Kriteria wajib: biaya rendah dan ketersediaan komponen yang mudah, kemudahan perakitan.

Mari kita ambil ATmega8 yang banyak digunakan (tanpa huruf L di akhir) sebagai mikrokontroler. Karakteristik modul kami adalah sebagai berikut:

  • Hubungkan ke PC melalui USB.
  • terdeteksi oleh OS Windows sebagai perangkat USB HID, tidak diperlukan pengemudi.
  • Siap untuk langsung berangkat.
  • 7 jalur keluaran dengan keadaan logika (aktif/tidak aktif).
  • 2 jalur keluaran dengan kontrol tegangan halus dari minimum hingga maksimum. Hanya saja ini bukan DAC ( konverter digital-ke-analog) dan PWM ( modulasi lebar pulsa). Namun dengan bantuan filter Anda dapat dengan mudah mengubahnya menjadi DAC.
  • 7 jalur input dengan keadaan logis (aktif/tidak aktif).
  • 1 ADC (konverter analog-ke-digital) dengan kemampuan untuk menghubungkan sumber eksternal tegangan referensi(ION).
  • Kemungkinan untuk diisi firmware baru langsung melalui USB.

Mengapa saya memilih HID dan bukan port COM virtual (CDC)? Pertama, driver tidak diperlukan, kedua, HID memuat mikrokontroler beberapa kali lebih sedikit daripada CDC, karena data tidak diminta terus-menerus, tetapi hanya ketika host (komputer) membutuhkannya, dan secara umum, port COM sudah mati, Saat ini ada praktis tidak ada port COM perangkat keras, hanya port virtual yang tersisa. Jalur keluaran logis dirancang untuk mengontrol hanya dua keadaan - hidup atau mati, ketika mati, output (kaki mikrokontroler) akan menjadi 0V, ketika hidup - 5V, di sini Anda cukup menghubungkan LED dan mengontrolnya dari PC, atau Anda dapat menghubungkan relai (melalui transistor) dan mengontrol beban yang lebih kuat (pencahayaan, dll.). Jalur keluaran dengan pengaturan tegangan (keluaran PWM) memungkinkan Anda mengubah tegangan pada kaki mikrokontroler dengan lancar dari 0V menjadi +5V dalam langkah 5/1024V. Jalur masukan status Boolean dirancang untuk memantau status tombol, tombol, dll. Ketika saluran disingkat ke ground (case, GND), statusnya = 0, jika tidak ditutup - 1. ADC memungkinkan Anda mengukur tegangan, Anda dapat menghubungkan potensiometer, sensor suhu analog, atau yang lainnya di sini, hanya tegangannya , pada kaki ini tegangan nutrisinya tidak boleh melebihi. Baik ION eksternal maupun tegangan suplai modul dapat digunakan sebagai sumber tegangan referensi untuk ADC. Agar pada saat flashing tidak perlu menghubungkan mikrokontroler ke programmer, kami akan memungkinkan untuk mengupload firmware langsung melalui USB, tanpa menggunakan programmer eksternal.

Diagram perangkat:

Seperti yang Anda lihat, diagramnya cukup sederhana, hanya konektor pada diagram yang saya pasang rusak, hal ini karena ATmega8 memiliki kaki-kaki untuk setiap port, entah kenapa letaknya tersebar, tetapi di papan itu sendiri akan terlihat cantik.

PCB:

Nah, hasilnya begini:

Sekarang mari kita cari tahu apa yang akan kita sambungkan di mana.

  1. USB - Pelabuhan. Saya pikir semua orang mengenalnya.
  2. Indikator daya.
  3. Masukan logika 1.
  4. Masukan logika 2.
  5. Masukan logika 3.
  6. Masukan logika 4.
  7. Masukan logika 5.
  8. Masukan logika 6.
  9. Masukan logika 7.
  10. masukan ADC.
  11. Masukan untuk menghubungkan ION.
  12. Pin ini terhubung ke catu daya perangkat. Tutup pin 12 dan 13 dengan jumper sehingga tegangan ION sama dengan tegangan suplai.
  13. Keluaran logika 1.
  14. Keluaran logika 2.
  15. Keluaran PWM 1.
  16. Keluaran PWM 2.
  17. Keluaran logika 3.
  18. Keluaran logika 4.
  19. Keluaran logika 5.
  20. Keluaran logika 6.
  21. Keluaran logika 7.

Apa itu GND?

Bahkan seorang amatir radio pemula pun tahu apa itu GND, tetapi bagi sebagian orang itu tampak seperti surat yang menakutkan. GND, bisa dikatakan, adalah kontak umum. Itu juga disebut bumi dan massa. Kabelnya biasanya berwarna hitam (terkadang putih atau lainnya). GND juga terhubung ke kotak logam perangkat. Dalam kebanyakan kasus, semuanya sudah ada di papan ruang bebas mengisi GND dalam bentuk poligon besar. Modul kami memiliki poligon dalam bentuk mesh, mereka juga terhubung Perumahan USB- konektor.

Program mikrokontroler.

Karena pada artikel ini saya ingin memberi tahu Anda cara mengontrol rangkaian melalui USB menggunakan modul selesai, selanjutnya saya tidak akan menjelaskan cara kerja program mikrokontroler, anda bisa mendownload source codenya dibawah ini dan lihat, banyak sekali komentar disana. Disini saya hanya akan menulis tentang pengenal perangkat.

Jadi, di sumbernya ada file usbconfig.h, itu memiliki garis

#tentukan USB_CFG_VENDOR_ID 0x10, 0x00

#tentukan USB_CFG_DEVICE_ID 0x01, 0x00

#define USB_CFG_VENDOR_NAME "k","i","b","e","r","m","a","s","t","e","r","." ,"p","l",".","u","a"

#tentukan USB_CFG_VENDOR_NAME_LEN 17

#define USB_CFG_DEVICE_NAME "U","S","B","-","C","o","n","t","r","o","l"

#tentukan USB_CFG_DEVICE_NAME_LEN 11

Dua baris pertama adalah ID perangkat dan ID produk, setiap perangkat USB memiliki ini, hanya saja di file ini byte rendah ditunjukkan terlebih dahulu, lalu byte tinggi, dalam program komputer sebaliknya. Berikutnya adalah nama pabrikan (vendor) dan nama perangkat, dan panjang garis dalam byte juga ditunjukkan. Program PC pertama-tama akan mencari perangkat berdasarkan ID dan kemudian, di antara perangkat yang ditemukan, akan mencari berdasarkan nama.

Firmware perangkat.

Pada file yang diunduh di folder MCUusb_bootloader, temukan file tersebut main.hex- ini adalah usb-bootloader, perlu dimuat ke MK menggunakan programmer eksternal. Setelah menuangkan, Anda juga perlu mengatur sekring dengan benar di jendela programmer STK500 akan terlihat seperti ini:

Jika Anda menggunakan program lain, Anda cukup memasukkan nilai bit sekering HIGH dan LOW (lihat tangkapan layar).

Setelah firmware berhasil, Anda dapat mencoba mem-flash perangkat melalui bootloader. Bagaimana cara kerjanya? Saat MK dihidupkan (cukup saat listrik disalurkan, atau setelah reset), bootloader langsung dijalankan, diperiksa kondisinya, jika benar maka inisialisasi bootloader dimulai (komputer menemukan perangkat). Sebagai syaratnya kita akan mendapatkan “Logical input 1 = 0″, yaitu untuk memulai bootloader, Anda perlu menutup Logic input 1 ke GND dan tekan pada perangkat tombol RESET, perangkat HID baru akan muncul di pengelola perangkat, yang juga tidak memerlukan driver:

Ok, sekarang di folder MCUUSB_Controldefault kita jalankan filenya boot.bat, sebuah jendela akan muncul dengan angka-angka yang berkeliaran:

Jika jendela langsung tertutup, berarti Anda melakukan kesalahan. Jika semuanya baik-baik saja, maka Anda tidak lagi memerlukan pemrogram eksternal untuk perangkat ini. Anda sekarang dapat memutuskan Logic Input 1 dari GND. Dan untuk berjaga-jaga, tekan RESET. Perangkat HID juga akan muncul di pengelola perangkat (komputer akan menulis bahwa perangkat baru telah ditemukan). Pastikan perangkat khusus ini muncul di pengelola.

Tuan rumah- inilah yang akan mengontrol perangkat, dalam kasus kami komputer. Saya akan menjelaskan cara mengendalikan perangkat dari PC secara lebih rinci.

Bagi pemrogram Delphi, menulis program kontrol HID tidak akan menjadi masalah, karena terdapat banyak informasi di Internet. Namun bagi programmer C++ Builder, tidak semuanya begitu manis, namun ternyata, semuanya tidak terlalu buruk. Saya menemukan perpustakaan hidlibrary.h di Internet, dan dengan bantuannya kami akan bekerja dengan perangkat HID.

Unduh sumbernya dan jalankan Kontrol USB.cbproj(C++Pembangun 2010).

Dalam berkas perpustakaan tersembunyi.h di bagian paling atas ada garis

Mari kita buat sebuah form. Form tersebut akan memiliki satu CheckListBox untuk mengontrol output logis, 2 ScrollBar untuk mengontrol saluran PWM, satu ListBox untuk menampilkan input logis, satu Label untuk menampilkan status ADC dan satu timer. Seharusnya terlihat seperti ini:

Ganti nama ScrollBars menjadi ScrollBar_PWM1 dan ScrollBar_PWM2, atur Max=1023 di propertinya.

Mari kita membuat struktur

#paket pragma (dorong, 1)

struct status_t(

char yang tidak ditandatangani logis_outputs;

karakter logis_inputs yang tidak ditandatangani;

karakter yang tidak ditandatangani ADC_DATA;

unsigned int pendek PWM1;

unsigned int pendek PWM2;

struct status_t DeviceStatus;

#paket pragma (pop)

#pragma pack diperlukan untuk mencegah compiler menyelaraskan struktur. DI DALAM logika_output keadaan semua keluaran logis disimpan dalam mode bitwise, yaitu bit pertama menyimpan keadaan keluaran pertama, bit kedua - yang kedua, dan seterusnya hingga bit ketujuh. Juga input_logis menyimpan keadaan input logis. DI DALAM ADC_DATA keadaan ADC disimpan, nilai minimum 0, maksimum - 255.V PWM1 keadaan keluaran PWM pertama disimpan (pengaturan tegangan halus), in PWM2- keadaan kedua, nilai minimum 0, maksimum - 1023.

Dalam program PC, Anda perlu membaca struktur ini dari mikrokontroler dan kemudian memproses data yang diterima. Untuk menetapkan nilai keluaran baru, Anda harus terlebih dahulu menulis nilai baru ke struktur, lalu mengirimkan struktur yang diubah ke mikrokontroler. Saat menetapkan nilai baru, Anda hanya perlu mengedit elemen pertama, 4 dan 5; mengedit dua elemen lainnya tidak akan berpengaruh apa pun.

Perpustakaan HID bersembunyi;

Dan tambahkan fungsi connect().

Sekarang data dari perangkat HID dapat diminta menggunakan fungsi hid.ReceiveData, dengan menentukan penunjuk ke struktur sebagai parameter, hanya sebelum permintaan Anda perlu memeriksa apakah perangkat terhubung:

Sekarang mari tambahkan program kita (atau cukup unduh sumbernya, semuanya sudah siap di sana).

Tambahkan baris ini di suatu tempat dalam kode (sebaiknya tepat setelah struktur):

Di properti pengatur waktu, tentukan Enabled = True, Interval = 500. Klik dua kali padanya dan tulis di handler

jika (!connect()) kembali; // Keluar jika perangkat tidak terhubung

sembunyikan.ReceiveData(&DeviceStatus); // Membaca data dari perangkat

untuk (karakter saya = 0; saya< 7; i++)

CheckListBox_LogOuts->Diperiksa[i] = CheckBit(DeviceStatus.logical_outputs, i);

ScrollBar_PWM1->Posisi = DeviceStatus.PWM1;

ScrollBar_PWM2->Posisi = DeviceStatus.PWM2;

ListBox_LogInputs->Hapus();

untuk (karakter saya = 0; saya< 7; i++)

ListBox_LogInputs->Item->Tambah(" Input logis "+IntToStr(i+1)+" = "+BoolToStr(CheckBit(DeviceStatus.logical_inputs, i)));

Label_ADC->Keterangan = DeviceStatus.ADC_DATA;

Saya pikir semuanya sudah jelas di sini dan tidak memerlukan penjelasan.

Klik dua kali pada CheckListBox, tulis di handler

Itu saja, Anda bisa mengkompilasinya!

Uji coba.

Jadi, semuanya sudah siap: perangkat sudah dirakit, mikrokontroler di-flash, program untuk komputer dibuat, Anda dapat mengujinya.

Hubungkan perangkat ke PC, luncurkan program. Di sebelah kiri dalam kotak daftar status semua input logis ditampilkan; jika, misalnya, input Logika 1 tidak disingkat ke GND, maka akan tertulis “Log. masukan 1 = -1″, jika terhubung maka “Log. masukan 1 = 0″. Inilah layarnya:

Hasilnya ditampilkan di bawah kotak daftar ini konversi ADC. Tutup input ADC ke minus, maka hasilnya 0, mendekati + daya, hasilnya 255. Anda bisa menghubungkan potensiometer di sini, atau yang lainnya. Tegangan pada pin ADC dapat dihitung dengan menggunakan rumus: Tegangan_ION/255*ADC_hasil.

Sekarang sambungkan beberapa beban kecil ke Logic Output 1 (LED atau hanya voltmeter). Centang kotak di sebelah "Logical output 1" - LED akan menyala.

Hubungkan voltmeter ke saluran PWM pertama, putar penggeser - tegangan akan berubah.

Penyelesaian.

Sekarang Anda dapat menggunakan modul ini untuk mengontrol penerangan atau peralatan listrik lainnya. Anda dapat menghubungkan tombol bel pintu atau kunci lain ke input logis. KE masukan ADC Anda dapat menghubungkan sensor kelembaban analog, sensor suhu atau fotoresistor (Anda akan mengetahui apakah di luar malam atau siang).



Apa pendapat Anda tentang artikel ini?

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat