Bagian: 4 × 4 tombol RGB Pad pengontrol SPI

November 23, 2022 0 By btav

Kami meliputi pengontrol tombol RGB SPARKFUN yang baru beberapa minggu yang lalu. Ini adalah klon penuh warna dari antarmuka monome; Tombol 4 × 4 grid dengan LED tri-warna di bawahnya. Setiap LED memiliki 24bit kontrol warna, untuk kombinasi lebih dari 16 juta warna. Hingga 10 panel dapat dirantai bersama untuk menciptakan kisi-kisi tombol yang substansial, seperti Tabel Tetris Sparkfun. Kami sebelumnya menggunakan versi yang lebih kecil di kunci kombinasi RGB kami.

Kami meminta Sparkfun untuk mengirimi kami versi SPI dari pengontrol tombol untuk menguji. Ini adalah produk baru yang dikembangkan di rumah di Sparkfun, dengan perangkat keras dan perangkat lunak sumber terbuka. Baca tentang pengalaman kami antarmuka papan ini di bawah ini.

4 × 4 tombol RGB pad pengontrol SPI (Sparkfun # wig-09022, $ 39,95)

Tombol pad pengontrol adalah PCB kosong, kami juga menerima penutup tombol (Sparkfun # com-07835, $ ​​9,95), dan dua dari setiap bezel (SparkFun # com-08747, $ 3,95). Versi SPI yang kami kerjakan dapat didorong langsung dengan mikrokontroler, atau dengan USB ‘Master’. Versi pengontrol USB memiliki mikrokontroler tambahan dan konverter serial USB FTDI untuk konektivitas PC.

Ketika bantalan tombol tiba, kami segera duduk dengan lembar data dan mencoba berinteraksi dengan papan dengan antarmuka serial universal bus bajak laut kami. Protokol yang dijelaskan dalam versi 1 dari lembar data tidak berfungsi, sama sekali.

SparkFUN membuka proyek ini, jadi kami menentukan protokol antarmuka yang benar dari kode sumber untuk tombol PAD SPI (ZIP) dan tombol PAD USB Controller (ZIP). Kami menemukan sebagian besar protokol dari sumbernya, tetapi masih butuh bantuan dari insinyur Sparkfun untuk mengungkap beberapa titik yang tidak berdokumen, lebih halus dari menghubungkan papan. Versi 2 dari datasheet (PDF) secara akurat menggambarkan protokol antarmuka.

Koneksi

Bajak laut bus.
Tombol pad.

SUP KEDELAI JEPANG
SUP KEDELAI JEPANG

MUSI
MUSI

Jam
SCK.

CS.
CS.

+ 5volts.
VCC.

Gnd.
Gnd.

Sinyal SPI tombol PAD dijelaskan karena mereka berhubungan dengan mikrokontroler on-board, yang berlawanan dengan notasi yang biasa. Sinyal MOSI (Master Out, Slave in) sebenarnya adalah output data dewan, dan miso (master in, slave out) adalah input data.

Kami menguji tombol pad dengan bajak laut bus, tetapi kepala sekolah dasar yang sama berlaku untuk setiap kode mikrokontroler khusus. Dewan beroperasi pada 5Volts, jadi kami menyalakannya dari catu daya 5volt Bajak Laut Bajak Laut. Antarmuka SPI beroperasi pada kadar logika 5Volt, jadi kami menghubungkan resistor pull-up bajak laut ke catu daya 5volt dan memungkinkan mereka pada semua garis sinyal.

Kami menghubungkan papan tombol menggunakan pustaka Raw3Wire Bus Pirate. Raw3Wire adalah perangkat lunak SPI Library dengan operasi bit-wise. Perangkat keras spi perpustakaan hanya memungkinkan operasi byte penuh yang tidak cukup granular untuk berinteraksi dengan papan. Kami menempatkan bajak laut bus dalam mode Raw3Wire (opsi menu m), dan memilih opsi Hiz Pin karena resistor pull-up akan menahan bus pada 5Volts.

Raw3Wire> l <-configure bit order 1. MSB First. 2. LSB Pertama Mode> 2 <-least bit signifikan pertama Set LSB: paling sedikit sig lebih dulu Raw3Wire> w <-catu daya Perlengkapan tegangan pada Raw3Wire>

Tombol PAD mengkomunikasikan sedikit signifikan pertama, jadi kami juga mengkonfigurasi perpustakaan untuk mengkomunikasikan LSB terlebih dahulu. Akhirnya, kami menekan Capital ‘W’ untuk memungkinkan catu daya bajak laut bus. Papan tombol akan mem-flash setiap warna sejenak sebagai bagian dari uji mandiri daya.

Pengaturan papan tombol tunggal / ganda

Setiap dewan perlu dikonfigurasi untuk penggunaan tunggal atau multi-board. Papan datang pra-diprogram untuk operasi satu-papan, tetapi mungkin ide yang baik untuk mengatur konfigurasi. Konfigurasi Dewan disimpan secara permanen di EEPROM, sehingga hanya harus dilakukan sekali.

Raw3Wire> [\ _ <-buat semua sinyal rendah CS Diaktifkan <-cs Diaktifkan adalah 0volts Jam, 0. Output data, 0 Raw3Wire>

Urutan khusus menempatkan papan dalam mode konfigurasi. Mulailah dengan semua garis sinyal rendah (] \ _).

Raw3Wire> – ^ 1 1 <- operasi papan tunggal Output data, 1 <-data tinggi Kutu jam 0x01 <-satu clock centang Tulis: 0x01 <-config Option 1, Jumlah papan Tulis: 0x01 <-Set Jumlah papan Raw3Wire> W <-Small 'W', Matikan Perlengkapan tegangan dilepas Raw3Wire> W <-capital 'W', Power On Perlengkapan tegangan pada Raw3Wire>

Untuk memasukkan mode konfigurasi, ambil garis data tinggi (-) dan kirim satu pulsa jam (^), tetapi tinggalkan chip pilih rendah. Papan sekarang siap untuk menerima pengaturan konfigurasi.

Byte pertama yang dikirim setelah memasuki mode konfigurasi memberi tahu papan pengaturan mana yang akan dimodifikasi. Saat ini, hanya jumlah papan yang dapat dikonfigurasi (0x01). Selanjutnya, kirim jumlah papan yang terhubung, antara 1 dan 10. Kami mengirim 1 karena kami menghubungkan satu papan. Setel ulang papan dan itu akan menyalakan LED yang sesuai dengan jumlah papan yang diprogram.

Atur warna dan baca status tombol

Sekarang kami siap mengirim data warna ke papan dan membaca status tombol. Pertama, perhatikan sinyal CS (Pilihan Chip) adalah konvensi normal berlawanan. Biasanya CS mengaktifkan chip ketika sinyalnya low (0volts), dan menganggur ketika sinyal tinggi (5VOLTS); Ini biasanya dilambangkan dengan / cs, #cs, atau! cs. Sebaliknya, pengontrol tombol aktif ketika CS tinggi.

Transaksi 64byte menetapkan warna LED dan mengambil status tombol. Program 16bytes pertama tingkat merah untuk setiap LED, diikuti oleh 16bytes of Green, dan 16bytes of Blue. Selesai dengan membaca 16bytes dari papan untuk mendapatkan status setiap tombol. Tombol data dikirim sebagai 0x00 jika ditekan, dan 0xFF jika tidak ditekan. Datasheet merekomendasikan penundaan 400US antara menulis bingkai warna dan membaca data tombol, tetapi bajak laut bus cukup lambat sehingga kami tidak akan khawatir tentang itu.

Protokolnya cukup sederhana, tetapi ada satu tangkapan besar. Garis jam harus tinggi sebelum menaikkan CS, atau bytestream akan mati 1 bit. Untuk alasan ini, banyak modul SPI perangkat keras tidak akan berfungsi dengan papan. Ini bukan masalah jika mikrokontroler Anda memungkinkan Anda pin twiddle yang dikendalikan oleh modul perangkat keras, tetapi micros yang telah kami kerjakan tidak mengizinkan ini.

Raw3Wire> /] 255: 16 255: 16 255: 16 R: 16 [
Jam, 1 <-Clock harus tinggi sebelum menaikkan CS CS dinonaktifkan <-cs hingga 5volts, berlawanan dengan penggunaan normal Massal Tulis 0xff, 0x10 kali <-Red LED Massal Tulis 0xff, 0x10 kali <-Green LED Massal menulis 0xff, 0x10 kali <-Blue LED Massal Baca 0x10 Bytes: <-read Button State 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xff 0xff 0xFF CS Diaktifkan <-cs ke 0volts, berlawanan dengan penggunaan normal Raw3Wire>

Perintah ini menetapkan setiap warna masing-masing LED hingga penuh, dan membaca kembali byte status 16 tombol.

Kami pertama-tama menetapkan jam tinggi (/), dan hanya kemudian kami dapat meningkatkan CS ke 5volts (]) dan memulai transaksi data. 255: 16 adalah perintah berulang yang mengirimkan nilai 255 enam belas kali. Karena setiap saluran warna memiliki kontrol intensitas 8bit, 255 adalah 100% pada. Kami mengirim 255 total 48 kali, sekali untuk setiap warna masing-masing LED. Akhirnya, kami mengambil satu bingkai data tombol 16byte (R: 16) dan menurunkan CS untuk mengakhiri transaksi ([). Nilai tombol semua 0xFF, menunjukkan bahwa tidak ada tombol yang ditekan.

Raw3Wire> /] 0:16 0:16 128: 16 R: 16 [
Jam, 1
CS Dinonaktifkan
Massal Tulis 0x00, 0x10 kali
Massal Tulis 0x00, 0x10 kali
Massal menulis 0x80, 0x10 kali <-solong biru hingga 50% Massal Baca 0x10 byte: 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xff 0xFF CS diaktifkan Raw3Wire>

Di sini, kami mengatur level biru setiap LED hingga 50% (128) dan mematikan semua warna lainnya. Tombol output sekarang menunjukkan bahwa tombol 0 ditekan.

Raw3Wire> /] 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0:16 0:16 R: 16 [
Jam, 1
CS Dinonaktifkan
Tulis: 0x00 <- Red LED 0, Mati ... <-Lebih sama Tulis: 0x00 <- Red LED 3, Mati Tulis: 0xff <- Red LED 4, 100% on Tulis: 0xff <- Red LED 5, 100% on Tulis: 0xff <- Red LED 6, 100% on Tulis: 0xff <- Red LED 7, 100% on Tulis: 0x00 <- Red LED 8, Mati ... <-Lebih sama Tulis: 0x00 <- Red LED 15, Mati Massal menulis 0x00, 0x10 kali <- semua LED hijau mati Massal menulis 0x00, 0x10 kali <-Semua LED biru mati Massal Baca 0x10 Bytes: <-Belum status tombol 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xff 0xff 0xFF CS diaktifkan Raw3Wire>

Contoh ini menunjukkan cara mengatasi LED tunggal. Kali ini kami benar-benar menulis semua 16 byte dari bingkai warna merah. Tombol 0-3 dan 8-15 memiliki nilai merah 0 (merah mati), tombol 4-7 diatur ke 100% merah (255). Semua LED hijau dan biru mati (0, 0%).

Kesimpulan

Sungguh frustasi untuk mendapatkan papan ini bekerja karena versi pertama dari lembar data memiliki begitu banyak kesalahan. Para insinyur dan dukungan Sparkfun sangat membantu, dan memposting lembar data yang dikoreksi dalam beberapa hari. Selama Anda memiliki lembar data yang diperbarui, ini adalah papan yang mudah untuk dikerjakan.

Kami ingin melihat pembaruan firmware yang menghilangkan kebutuhan untuk menjaga sinyal clock tinggi sebelum menaikkan CS. Kuirk ini membuat dewan tidak kompatibel dengan banyak modul spi perangkat keras, meninggalkan rutinitas bit-bang yang lambat sebagai satu-satunya opsi antarmuka. Untungnya, kode sumber terbuka dan tersedia untuk siapa saja yang ingin melakukan perubahan ini.

Kontroler tombol pad adalah papan yang sangat rapi, dan kami berharap dapat menggunakannya dalam proyek masa depan.

Hack A Day Review Pengungkapan: Kami meminta papan gratis dan Sparkfun mengirimkannya kepada kami. Kami memiliki waktu yang mengerikan untuk membuatnya bekerja dengan instruksi dalam versi pertama dari lembar data, kami mendokumentasikan pengalaman itu di sini.