ShiftIn

İçeri Kaydırma ve CD4021B

Bazen Arduino'nuzda pinlerden daha fazla dijital girişe ihtiyacınız olur. Seri kaydırma yazmacına paralel olarak, Arduino'nuzdaki pinlerden sadece 3 tanesini kullanırken 8 veya daha fazla anahtardan bilgi toplayabilirsiniz.

Seri kayda paralel bir örnek, bazen 8 Aşamalı Statik Kaydırma Kaydı olarak da adlandırılan CD4021B'dir . Bu, kayda bir kerede 8 adede kadar dijital girişin durumunu okuyabileceğiniz anlamına gelir. Buna Asenkron Paralel Giriş denir. "Giriş" çünkü bilgi topluyorsunuz. "Paralel" çünkü hepsi aynı anda müzikal bir kablo duymak gibi. "Asenkron" çünkü CD4021B , tüm bu veri toplama işlemlerini Arduino ile koordine etmeden kendi hızında yapıyor.

8 giriş, kaydırma yazmacının seri çıkış pimi üzerindeki bir dizi YÜKSEK ve DÜŞÜK darbeye çevrilir. Bu pim, Arduino Kartınızdaki veri pimi olarak adlandırılan bir giriş pimine bağlanmalıdır. Veri pimi üzerindeki bilgi aktarımına "Senkron Seri Çıkış" adı verilir, çünkü kaydırma yazmacı Arduino bunu sorana kadar Arduino'ya doğrusal veri dizisi vermeyi bekler. Senkron Seri iletişim, giriş veya çıkış, saat pimi olarak adlandırılan şeye büyük ölçüde bağımlıdır . Saat pimi, kaydırma yazmacı ve Arduino arasındaki konuşmanın metronomudur, iki sistemi senkronize tutan şeydir. Arduino saat pimini DÜŞÜK'ten YÜKSEK'e her değiştirdiğinde, kaydırma yazmacı Seri Çıkış piminin durumunu değiştirerek bir sonraki anahtarın değerini gösterir.

Arduino'ya takılan üçüncü pim bir "Seri Kontrole Paralel" pimdir. Mandal pimi olarak adlandırılır. Mandal pimi YÜKSEK olduğunda kaydırma yazmacı 8 paralel girişini dinler. Mandal pimi DÜŞÜK olduğunda, saat pimini dinler ve seri olarak bilgi iletir. Bu, mandal piminin YÜKSEK'den DÜŞÜK'e her geçişinde, kaydırma yazmacının en güncel anahtar bilgilerini geçirmeye başlayacağı anlamına gelir.

Tüm bunları koordine etmek için sözde kod şöyle görünür:

  1. Kaydın paralel girişlerinden en son bilgilere sahip olduğundan emin olun (örn. Mandal piminin YÜKSEK)
  2. Kayıt defterine Arduino'nun bilgileri seri olarak almaya hazır olduğunu söyleyin (mandal pimi DÜŞÜK)
  3. Okunacak her giriş için clockPin'i darbeleyin ve veri pininin DÜŞÜK veya YÜKSEK olup olmadığını kontrol edin

Bu temel bir diyagramdır.

_______ switch -> | | switch -> | C | switch -> | D | switch -> | 4 | -> Serial Data to Arduino switch -> | 0 | switch -> | 2 | switch -> | 1 | <- Clock Data from Arduino switch -> |_____| <- Latch Data from Arduino

ShiftOut öğreticisinde kaydırma hakkında daha fazla bilgi var.

Kartınızı kablolamaya başlamadan önce, CD4021'in pin şeması PİMLER 1,4-7, 13-15 P1, P8 (Pimler 0-7) Paralel Girişler PİMLER 2, 12, 3 Q6, Q7, Q8 Dizideki farklı adımlardan Seri Çıkış Pimleri. Q7, Q8'in arkasında bir nabız ve Q6, Q7'nin arkasında bir nabızdır. Bu örneklerde sadece Q8 kullanılır. PİM 8 Vss GND PİM 9 P / SC Paralel / Seri Kontrol (mandal pimi) PİM 10 SAAT Shift register saat pimi PİM 11 SERİ-IN Seri veri girişi PİM 16 VDD DC besleme gerilimi

Örnek 1: Bir Vardiya Kaydı

İlk adım Arduino'nuzu bir vardiya kaydı ile genişletmektir.

Devre

1. Güç Bağlantıları

Aşağıdaki bağlantıları yapın:

  • GND (pin 8) toprağa,
  • VDD (pin 16) ila 5V

Arduino'ya bağlanın

  • Q8 (pin 3) - Ardunio DigitalPin 9 (mavi tel)
  • SAAT (pin 10) - Ardunio DigitalPin 7 (sarı tel)
  • P / SC (pin 9) - Ardunio DigitalPin 8 (yeşil tel)

Bundan sonra bunlar sırasıyla dataPin, clockPin ve latchPin olarak anılacaktır.

3. 8 Anahtar ekleyin

Diyagram

Kod

Kod Örneği 1.1 Merhaba Dünya
Kod Örneği 1.2 Basılan Nedir?
Kod Örneği 1.3 Düğme Kombinasyon Kontrolü
Kod Örneği 1.4 Basılı mı? (alt fonksiyon)

Örnek 2: Birden Fazla Vites Kaydı

Bu örnekte, Arduino'da aynı sayıda pin kullanırken hala giriş pinlerinin sayısını iki katına çıkaran ikinci bir kaydırma yazmacı ekleyeceksiniz.

Arduino'nuzu ek 8 dijital girişle desteklemek yeterli değilse, ikinci bir CD4021'in bilgisini 16 bit bilginin tümünü Arduino'ya aktaracak başka bir CD4021'e aktarabilirsiniz . Bunun gibi birden fazla vardiya kaydı kullanmanız gerektiğini biliyorsanız, satın aldığınız vardiya kayıtlarının standart Senkron Girişi ve standart Senkron Seri Çıktı kapasitesini işleyebildiğini kontrol edin. Senkron Seri Giriş, birinci kaydırma yazmacının seri çıkışı ikinci birinden almasını ve iletmesini sağlayan özelliktir. Aşağıdaki örnekte bu sistemin nasıl kullanılacağı açıklanmaktadır. Bu nedenle, ihtiyacınız olan tüm girişlere sahip olana kadar bu papatya zinciri kaydırma kayıtlarını genişletmeye devam edebilirsiniz.

_______ switch -> | | switch -> | C | switch -> | D | switch -> | 4 | -> Serial Data to Arduino switch -> | 0 | switch -> | 2 | <- Clock Data from Arduino switch -> | 1 | <- Latch Data from Arduino switch -> |_____| <------ | | | _______ | Serial Data Passed to First switch -> | | | Shift Register switch -> | C | | switch -> | D | | switch -> | 4 | ______| switch -> | 0 | switch -> | 2 | <- Clock Data from Arduino switch -> | 1 | <- Latch Data from Arduino switch -> |_____|

Devre

1. İkinci bir kaydırma yazmacı ekleyin.

2. 2 kaydı bağlayın.

Bu bağlantılardan ikisi, aynı saati ve mandal sinyalini Arduino'dan ikinci kaydırma kaydına (sarı ve yeşil teller) uzatır. Mavi tel, birinci kaydırma kaydının seri çıkış piminden (pim 9) ikinci kaydın seri veri girişine (pim 14) gider.

3. İkinci bir Anahtar kümesi ekleyin.

Bir anlık anahtarın ve geri kalanının geçiş anahtarları olduğuna dikkat edin. Bunun nedeni, kod örneklerinin ikinci kaydırma kaydına eklenen anahtarları olay tetikleyicileri yerine bir tercih dosyası gibi ayarlar olarak kullanmalarıdır. Bir anlık anahtar mikrodenetleyiciye ayar anahtarlarının değiştirildiğini söyleyecektir.

Diyagram

Kod

Kod Örneği 2.1 Merhaba Dünya
Kod Örneği 2.2 Ayarlar için ikinci baytı kullanma, Tümünü yazdır
Kod Örneği 2.3 Ayarlar için ikinci baytı kullanma, Yalnızca üzerine yazdırma (alt işlevi kullanır)

Başlatan Carlyn Maw ve Tom Igoe Jan, '07
Scott Fitzgerald tarafından güncellendi Şubat 2014