Serial to Serial Conversion - TeachMeSoft

Serial to Serial Conversion







Serial to Parallel Shifting-Out dengan 74HC595


Shifting Out (Menggeser Keluar) & chip 595
Terkadang Anda mungkin kehabisan pin pada papan Arduino Anda dan perlu memperpanjangnya dengan register geser. Contoh ini didasarkan pada 74HC595. Lembar data merujuk ke 74HC595 sebagai "8-bit register geser serial, paralel atau keluar dengan kait keluaran; 3-negara." Dengan kata lain, Anda dapat menggunakannya untuk mengontrol 8 output sekaligus sekaligus hanya mengambil beberapa pin pada mikrokontroler Anda. Anda dapat menautkan beberapa register secara bersamaan untuk lebih meningkatkan hasil Anda. (Pengguna juga mungkin ingin mencari chip driver lain dengan "595" atau "596" di nomor bagian mereka, ada banyak. STP16C596 misalnya akan menggerakkan 16 LED dan menghilangkan resistor seri dengan built-in sumber arus konstan.)

Cara ini semua bekerja adalah melalui sesuatu yang disebut "komunikasi serial sinkron," yaitu Anda dapat menggerakkan satu pin ke atas dan ke bawah dengan demikian mengkomunikasikan byte data ke register sedikit demi sedikit. Ini dengan menggandakan pin kedua, pin jam, yang Anda gambarkan di antara bit. Ini berbeda dengan menggunakan "komunikasi serial asinkron" dari fungsi Serial.begin () yang bergantung pada pengirim dan penerima untuk diatur secara independen ke kecepatan data yang ditentukan yang disepakati. Setelah seluruh byte ditransmisikan ke register, pesan TINGGI atau RENDAH yang disimpan dalam setiap bit dibagikan ke masing-masing pin output individual. Ini adalah bagian "output paralel", membuat semua pin melakukan apa yang Anda inginkan sekaligus.

Bagian "keluaran serial" dari komponen ini berasal dari pin ekstra yang dapat meneruskan informasi serial yang diterima dari mikrokontroler keluar lagi tidak berubah. Ini berarti Anda dapat mengirimkan 16 bit berturut-turut (2 byte) dan 8 bit pertama akan mengalir melalui register pertama ke register kedua dan diekspresikan di sana. Anda dapat belajar melakukannya dari contoh kedua.

"3 status" mengacu pada fakta bahwa Anda dapat mengatur pin output sebagai tinggi, rendah atau " impedansi tinggi ." Tidak seperti status TINGGI dan RENDAH, Anda tidak dapat mengatur pin ke status impedansinya yang tinggi secara individual. Anda hanya dapat mengatur keseluruhan chip. Ini adalah hal yang cukup khusus untuk dilakukan - Pikirkan array LED yang mungkin perlu dikendalikan oleh mikrokontroler yang benar-benar berbeda tergantung pada pengaturan mode khusus yang dibangun ke dalam proyek Anda. Tidak ada contoh mengambil keuntungan dari fitur ini dan Anda tidak akan perlu khawatir tentang mendapatkan chip yang memilikinya.

Berikut adalah tabel yang menjelaskan pin-out yang diadaptasi dari lembar data Phillip .

PIN 1-7, 15Q0 "Q7Pin Output
PIN 8GNDTanah, Vss
PIN 9Q7 "Serial Out
PIN 10PAKMaster Reclear, aktif rendah
PIN 11SH_CPGeser pin pin register
PIN 12ST_CPPin jam register penyimpanan (pin kait)
PIN 13OEOutput aktif, aktif rendah
PIN 14DSInput data serial
PIN 16VccTegangan suplai positif


Contoh 1


Langkah pertama adalah memperpanjang Arduino Anda dengan satu register geser.


Sirkuit
1. Hidupkan
Buat koneksi berikut:
  • GND (pin 8) ke ground,
  • Vcc (pin 16) ke 5V
  • OE (pin 13) ke ground
  • MR (pin 10) ke 5V

Pengaturan ini membuat semua pin output aktif dan dapat dialamatkan setiap saat. Satu kekurangan dari pengaturan ini adalah bahwa Anda berakhir dengan lampu menyala ke keadaan terakhir mereka atau sesuatu yang sewenang-wenang setiap kali Anda pertama kali menyalakan sirkuit sebelum program mulai berjalan. Anda dapat menyiasatinya dengan mengendalikan pin MR dan OE dari papan Arduino Anda juga, tetapi cara ini akan berhasil dan membuat Anda memiliki lebih banyak pin yang terbuka.



2. Hubungkan ke Arduino
  • DS (pin 14) ke Ardunio DigitalPin 11 (kabel biru)
  • SH_CP (pin 11) ke ke Ardunio DigitalPin 12 (kabel kuning)
  • ST_CP (pin 12) ke Ardunio DigitalPin 8 (kabel hijau)

Mulai sekarang mereka akan disebut sebagai dataPin, clockPin dan latchPin masing-masing. Perhatikan kapasitor 0,1 "pada latchPin, jika Anda memiliki sedikit kedipan ketika pin kait Anda dapat menggunakan kapasitor untuk meratakannya.






3. Tambahkan 8 LED .
Dalam hal ini Anda harus menghubungkan katoda (pin pendek) dari setiap LED ke landasan bersama, dan anoda (pin panjang) dari masing-masing LED ke pin output register geser masing-masing. Menggunakan register geser untuk memasok daya seperti ini disebut sumber arus. Beberapa register shift tidak dapat sumber arus, mereka hanya dapat melakukan apa yang disebut tenggelam saat ini. Jika Anda memilikinya, itu artinya Anda harus membalik arah LED , mengarahkan anoda langsung ke daya dan katoda (pin ground) ke output register geser. Anda harus memeriksa lembar data spesifik Anda jika Anda tidak menggunakan chip seri 595. Jangan lupa untuk menambahkan resistor 470-ohm secara seri untuk melindungi LED dari kelebihan beban.


Diagram Sirkuit



Kode
Berikut adalah tiga contoh kode. Yang pertama hanyalah beberapa kode "hello world" yang hanya menampilkan nilai byte dari 0 hingga 255. Program kedua menyalakan satu LED pada satu waktu. Siklus ketiga melalui array.

tabel logika
595 Diagram Waktu
tabel logika
595 Tabel Logika
Kode didasarkan pada dua bagian informasi dalam lembar data: diagram waktu dan tabel logika. Tabel logika adalah apa yang memberi tahu Anda bahwa pada dasarnya segala sesuatu yang penting terjadi pada ketukan. Ketika clockPin beralih dari rendah ke tinggi, register geser membaca status pin data. Saat data dipindahkan, data disimpan dalam register memori internal. Ketika latchPin beralih dari rendah ke tinggi, data yang dikirim dipindahkan dari register geser, register memori yang disebutkan sebelumnya ke dalam pin output, menyalakan LED .

Contoh Kode 1.1 Sampel Kode Hello World
Contoh Kode 1.2 Satu per Satu
Contoh Kode 1.3 Menggunakan array

Contoh 2






Sirkuit
1. Tambahkan register shift kedua
Mulai dari contoh sebelumnya, Anda harus meletakkan register shift kedua di papan tulis. Itu harus memiliki mengarah yang sama ke kekuasaan dan tanah.





2. Hubungkan 2 register
Dua koneksi ini hanya memperpanjang sinyal jam dan kait yang sama dari Arduino ke register shift kedua (kabel kuning dan hijau). Kabel biru bergerak dari pin keluar seri (pin 9) dari register shift pertama ke input data serial (pin 14) dari register kedua.


3. Tambahkan set LED kedua.
Dalam hal ini saya menambahkan yang hijau jadi ketika membaca kode jelas byte mana yang akan pergi ke set LED


Diagram Sirkuit



Kode

Di sini sekali lagi ada tiga contoh kode. Jika Anda penasaran, Anda mungkin ingin mencoba sampel dari contoh pertama dengan rangkaian ini diatur hanya untuk melihat apa yang terjadi.

Contoh Kode 2.1 Penghitung Biner Ganda.
Hanya ada satu baris kode tambahan dibandingkan dengan sampel kode pertama dari Contoh 1. Ia mengirimkan byte kedua. Ini memaksa register geser pertama, yang langsung terhubung ke Arduino, untuk melewatkan byte pertama yang dikirim ke register kedua, menyalakan LED hijau . Byte kedua akan muncul di LED merah .

Contoh Kode 2.2 2 Byte One By One
Membandingkan kode ini dengan kode yang sama dari Contoh 1 Anda melihat bahwa sedikit lebih banyak harus berubah. Fungsi blinkAll () telah diubah menjadi fungsi blinkAll_2Bytes () untuk mencerminkan fakta bahwa sekarang ada 16 LED untuk dikendalikan. Selain itu, dalam versi 1, denyut latchPin terletak di dalam subfungsi lightShiftPinA dan lightShiftPinB (). Di sini mereka perlu dipindahkan kembali ke loop utama untuk mengakomodasi perlu menjalankan setiap subfungsi dua kali berturut-turut, sekali untuk LED hijau dan sekali untuk yang merah.

Contoh Kode 2.3 - Dual Defined Array
Seperti sampel 2.2, sampel 2.3 juga memanfaatkan fungsi blinkAll_2bytes () yang baru. Perbedaan besar 2.3 dari sampel 1.3 hanya bahwa alih-alih hanya variabel tunggal yang disebut "data" dan array tunggal yang disebut "dataArray" Anda harus memiliki dataRED, dataGREEN, dataArrayRED, dataArrayGREEN yang ditentukan di depan. Ini berarti garis itu

data = dataArray[j];

Menjadi
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];

dan
shiftOut(dataPin, clockPin, data);

Menjadi
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);


SUMBER

  • [1] https://www.arduino.cc/en/Tutorial/ShiftOut

Disqus comments