Iklan
Hari ini saya akan mencoba mengajari Anda sedikit tentang Shift Register. Ini adalah bagian yang cukup penting dari pemrograman Arduino, pada dasarnya karena mereka memperluas jumlah output yang dapat Anda gunakan, dengan imbalan hanya 3 pin kontrol. Anda juga dapat mendaftarkan daisy-chain shift bersama untuk mendapatkan lebih banyak output.
Ini adalah lompatan signifikan dalam kesulitan dari tutorial sebelumnya, dan saya sangat menyarankan Anda memilikinya benar-benar pemahaman yang baik tentang materi sebelumnya (tautan di akhir artikel ini), serta pengertian itu dasar-dasar biner Apa itu Biner? [Teknologi Dijelaskan]Mengingat bahwa biner sangat mendasar bagi keberadaan komputer, rasanya aneh bahwa kami tidak pernah membahas topik sebelumnya - jadi hari ini saya pikir saya akan memberikan tinjauan singkat tentang apa yang biner ... Baca lebih banyak yang saya tulis terakhir kali.
Apa itu Daftar Shift?
Register shift output, secara teknis, menerima data dalam bentuk serial dan mengeluarkannya secara paralel. Secara praktis, ini berarti kita dapat dengan cepat mengirim banyak perintah keluaran ke chip, memerintahkannya untuk mengaktifkan, dan output akan dikirim ke pin yang relevan. Alih-alih melakukan iterasi melalui masing-masing pin, kami hanya mengirim output yang diperlukan untuk semua pin sekaligus, sebagai satu byte atau lebih informasi.
Jika ini membantu Anda untuk memahami, Anda dapat menganggap register geser sebagai ‘array’ dari output digital, tetapi kita dapat melewati perintah digitalWrite yang biasa dan cukup mengirim serangkaian bit untuk mengaktifkannya atau mati.
Bagaimana cara kerjanya?
Register geser yang akan kita gunakan - 74HC595N yang termasuk dalam starter kit Oomlout - hanya membutuhkan 3 pin kontrol. Yang pertama adalah jam - Anda tidak perlu terlalu khawatir tentang ini sebagai kontrol perpustakaan seri Arduino itu - tetapi jam pada dasarnya hanya nyala / mati pulsa listrik yang menentukan kecepatan sinyal data.
Pin kait digunakan untuk memberi tahu register shift kapan harus menghidupkan dan mematikan outputnya sesuai dengan bit yang baru saja kami kirimkan - mis., Menempelkannya pada tempatnya.
Akhirnya, pin data adalah tempat kami mengirimkan data serial aktual dengan bit untuk menentukan status on / off dari output register geser.
Seluruh proses dapat dijelaskan dalam 4 langkah:
- Atur pin data ke tinggi atau rendah untuk pin output pertama pada register geser.
- Pulsa jam untuk clock menggeser ’data ke dalam register.
- Lanjutkan pengaturan data dan pularkan jam sampai Anda telah mengatur status yang diperlukan untuk semua pin output.
- Pulsa pin kait untuk mengaktifkan urutan output.
Penerapan
Anda memerlukan komponen berikut untuk proyek ini:
- Chip register geser 7HC595N
- 8 LED dan resistor yang sesuai, atau apa pun yang Anda inginkan
- Papan tempat memotong roti biasa, konektor, dan Arduino dasar
Jika Anda memiliki starter kit Oomlout, Anda dapat mengunduh tata letak papan tempat memotong roti dari sini.
Ini video perakitan:
Tata letak papan:
Dan versi rakitan saya:
Saya telah memodifikasi kode asli yang disediakan oleh Ooolmout, tetapi jika Anda ingin mencobanya, kode itu dapat diunduh sepenuhnya di sini. Penjelasan kode disertakan, jadi salin dan tempel semuanya dari bawah atau pastebin untuk membaca penjelasan kode.
/ * * | Tutorial Shift Register, berdasarkan pada | * | Kit Eksperimen Arduino CIRC-05 | * |.: 8 Lebih Banyak LED:. (74HC595 Shift Register) | * * | Dimodifikasi oleh James @ MakeUseOf.com | * * / // Pin Definisi. // 7HC595N memiliki tiga pin. data int = 2; // tempat kami mengirim bit untuk mengontrol output int clock = 3; // menyimpan data dalam sinkronisasi. int latch = 4; // memberitahu register geser kapan harus mengaktifkan pengaturan urutan output batal () {// atur tiga pin kontrol ke output pinMode (data, OUTPUT); pinMode (clock, OUTPUT); pinMode (latch, OUTPUT); Serial.begin (9600); // jadi kami dapat mengirim pesan debug ke monitor serial. } void loop () {outputBytes (); // output dasar kami yang menulis 8-bit untuk menunjukkan cara kerja register geser. //outputIntegers(); // mengirimkan nilai integer sebagai data, bukan byte, secara efektif menghitung dalam biner. } membatalkan outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Debug, mengirimkan output ke shiftOut monitor serial (data, jam, MSBFIRST, i); digitalWrite (latch, HIGH); keterlambatan (100); }} void outputBytes () {/ * Bytes, atau 8-bit, diwakili oleh B diikuti oleh 8 0 atau 1s. Dalam contoh ini, anggap ini seperti array yang akan kita gunakan untuk mengontrol 8 LED. Di sini saya telah memulai nilai byte sebagai 00000001 * / byte dataValues = B00000001; // ubah ini untuk menyesuaikan pola awal / * Pada for loop, kita mulai dengan menarik kait rendah, menggunakan fungsi shiftOut Arduino untuk berbicara dengan register geser, mengirimkannya byte Nilai data kami mewakili keadaan LED kemudian tarik kait tinggi untuk mengunci mereka ke dalam tempat. Akhirnya, kami menggeser bit satu tempat ke kiri, artinya iterasi berikutnya akan menyalakan LED berikutnya dalam seri. Untuk melihat nilai biner yang tepat dikirim, periksa monitor serial. * / untuk (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // Debug, mengirimkan output ke shiftOut monitor serial (data, jam, MSBFIRST, dataValues); digitalWrite (latch, HIGH); dataValues = dataValues << 1; // Geser bit satu tempat ke kiri - ubah ke >> untuk menyesuaikan penundaan arah (100); } }
Bit-Shifting (Fungsi OutputBytes)
Pada contoh loop pertama - outputBytes () - kode menggunakan urutan 8-bit (byte) yang kemudian bergeser ke kiri setiap iterasi dari for loop. Penting untuk dicatat bahwa jika Anda menggeser lebih jauh dari yang mungkin, bit itu hilang begitu saja.
Bit-shifting dilakukan menggunakan << atau >> diikuti dengan jumlah bit yang ingin Anda ubah.
Lihat contoh berikut dan pastikan Anda memahami apa yang terjadi:
byte val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, kami kehilangan bit-bit lainnya! val = val >> 5 // B00000010.
Sebagai gantinya Mengirim Integer (Fungsi OutputIntegers)
Jika Anda mengirim seluruh nomor ke register shift alih-alih byte, itu hanya akan mengubah nomor menjadi urutan byte biner. Dalam fungsi ini (batalkan komentar pada loop dan unggah untuk melihat efeknya), kami memiliki loop for yang dihitung dari 0-255 (integer tertinggi yang dapat kami wakili dengan satu byte), dan mengirimkannya sebagai gantinya. Pada dasarnya ini dihitung dalam biner, sehingga urutannya mungkin tampak sedikit acak kecuali LED Anda diletakkan dalam garis panjang.
Misalnya, jika Anda membaca artikel yang dijelaskan biner, Anda akan tahu bahwa angka 44 akan diwakili sebagai 00101100, sehingga LED 3,5,6 akan menyala pada titik itu dalam urutan.
Daisy Chaining Lebih dari Satu Shift
Hal yang luar biasa tentang Shift Register adalah bahwa jika mereka diberikan lebih dari 8-bit informasi (atau seberapa besar registri mereka), mereka akan menggeser bit tambahan lainnya lagi. Ini berarti Anda dapat menghubungkan serangkaian mereka bersama-sama, mendorong dalam satu rantai bit panjang, dan mendistribusikannya ke setiap register secara terpisah, semua tanpa pengkodean tambahan di pihak Anda.
Meskipun kami tidak akan merinci proses atau skema di sini, jika Anda memiliki lebih dari satu register shift, Anda dapat mencoba proyek dari situs Arduino resmi di sini.
Artikel lain dalam seri:
- Apa itu Arduino & Apa Yang Dapat Anda Lakukan dengannya Apa Arduino & Apa Yang Dapat Anda Lakukan dengannya?Arduino adalah perangkat elektronik kecil yang luar biasa, tetapi jika Anda belum pernah menggunakannya sebelumnya, apa sebenarnya itu, dan apa yang dapat Anda lakukan dengan itu? Baca lebih banyak ?
- Apa itu Kit Starter Arduino & Apa Isinya? Apa Yang Termasuk Dalam Kit Starter Arduino? [MakeUseOf Menjelaskan]Saya sebelumnya telah memperkenalkan perangkat keras open-source Arduino di MakeUseOf di sini, tetapi Anda akan membutuhkan lebih dari sekadar Arduino yang sebenarnya untuk membangun sesuatu darinya dan benar-benar memulai. Arduino "starter kit" adalah ... Baca lebih banyak
- Lebih Banyak Komponen Keren Untuk Dibeli dengan Starter Kit Anda 8 Komponen Lebih Keren Untuk Proyek Arduino AndaJadi, Anda berpikir untuk mendapatkan starter kit Arduino, tetapi bertanya-tanya apakah beberapa LED dasar dan resistor akan cukup untuk membuat Anda sibuk untuk akhir pekan? Mungkin tidak. Berikut ini 8 lainnya ... Baca lebih banyak
- Memulai dengan Starter Kit Arduino Anda? Menginstal Driver & Memasang Board & Port Memulai dengan Starter Kit Arduino Anda - Menginstal Driver & Menyiapkan Board & PortJadi, Anda telah membeli sendiri kit starter Arduino, dan mungkin beberapa komponen keren acak lainnya - sekarang apa? Bagaimana Anda memulai pemrograman dengan hal Arduino ini? Bagaimana Anda mengaturnya ... Baca lebih banyak
- Fritzing, alat gratis untuk menggambar diagram sirkuit Fritzing - Alat Utama Untuk Membuat Sketsa Proyek Elektronik [Cross Platform]Meskipun terdengar seperti alcopop, Fritzing sebenarnya adalah perangkat lunak gratis luar biasa yang dapat Anda gunakan untuk membuatnya diagram sirkuit dan komponen untuk digunakan dengan papan elektronik prototipe cepat seperti open-source yang fantastis Arduino ... Baca lebih banyak
- Melihat Lebih Dekat Struktur Aplikasi Arduino & Program Contoh Blink Langkah Pertama Dengan Arduino: Melihat Lebih Dekat Papan Sirkuit & Struktur ProgramTerakhir kali saya meninggalkan Anda telah mengatur Arduino Anda untuk bekerja dengan Mac atau Windows, dan setelah mengunggah aplikasi tes sederhana yang berkedip LED on-board. Hari ini saya akan menjelaskan kode ... Baca lebih banyak
- Proyek lampu pohon Arduino Xmas Proyek Arduino: Cara Membuat Ornamen Lampu Natal yang MenyilaukanIni adalah bagian selanjutnya dari seri Arduino pembelajaran kami, dan kali ini kita akan belajar tentang dan menggunakan Array untuk membuat hiasan pohon Natal kecil dengan berbagai urutan berkedip. Ini akan menjadi ... Baca lebih banyak (AKA belajar tentang array)
- Apa itu Biner? Apa itu Biner? [Teknologi Dijelaskan]Mengingat bahwa biner sangat mendasar bagi keberadaan komputer, rasanya aneh bahwa kami tidak pernah membahas topik sebelumnya - jadi hari ini saya pikir saya akan memberikan tinjauan singkat tentang apa yang biner ... Baca lebih banyak
Sejauh ini kita akan pergi dengan register shift hari ini, karena saya pikir kita sudah membahas banyak hal. Seperti biasa, saya mendorong Anda untuk bermain dan menyesuaikan kode, dan merasa bebas untuk mengajukan pertanyaan apa pun yang Anda miliki di komentar, atau bahkan membagikan tautan ke proyek berbasis register geser yang mengagumkan.
James memiliki gelar BSc dalam Artificial Intelligence, dan bersertifikat CompTIA A + dan Network +. Dia adalah pengembang utama MakeUseOf, dan menghabiskan waktu luangnya bermain VR paintball dan boardgames. Dia telah membangun PC sejak dia masih kecil.