
Brian Curtis
0
1855
42
Bugün size Shift Registers hakkında biraz bilgi vermeye çalışacağım. Bunlar, Arduino programlamanın oldukça önemli bir parçasıdır, çünkü temel olarak yalnızca 3 kontrol pimi karşılığında kullanabileceğiniz çıkış sayısını artırırlar. Daha fazla çıktı almak için papatya zinciri kaydırma kayıtlarını da birlikte kullanabilirsiniz.
Bu, önceki derslerden gelen zorlukta önemli bir sıçramadır ve ben önceki materyalin (bu makalenin sonunda yer alan bağlantılar) gerçekten iyi bir şekilde anlamanızın yanı sıra binary Nedir? [Teknoloji Açıklaması] İkili Nedir? [Teknoloji Açıklaması] İkili bilgisayarların varlığı için kesinlikle çok önemli olduğu göz önüne alındığında, daha önce konuyla hiç ilgilenmemiş olmamız garip görünüyor - bu yüzden bugün ne yazdığım hakkında hangi kısa bir bakış ... son kez.
Vardiya Kayıt Nedir??
Teknik olarak konuşan bir çıkış kaydırma yazmacı seri olarak veri alır ve paralel olarak çıkarır. Pratik açıdan, bu, çipe hızlıca bir grup çıktı komutu gönderebileceğimiz, etkinleştirmesini söyleyebileceğimiz ve çıktıların ilgili pinlere gönderileceği anlamına gelir. Her pin boyunca yineleme yapmak yerine, tüm pinlere gereken çıktıyı bir kerede, tek bir bayt veya daha fazla bilgi olarak göndeririz..
Anlamanıza yardımcı olursa, bir kaydırma yazmacını dijital çıkışların 'dizisi' olarak düşünebilirsiniz, ancak normal digitalWrite komutlarını atlayabilir ve bunları açıp kapatmak için bir dizi bit gönderebiliriz..
O nasıl çalışır?
Kullanacağımız vardiya kayıt - Oomlout başlangıç kitinde bulunan 74HC595N - sadece 3 kontrol pimine ihtiyaç duyuyor. Birincisi bir saat - Arduino seri kütüphaneleri kontrol ettiği için bu konuda çok fazla endişelenmenize gerek yok - fakat bir saat veri sinyallerine ayak uydurabilen sadece açık / kapalı bir elektrik darbesidir.
Mandal pimi, kaydırma yazmacına ne zaman göndermiş olduğumuz bitlere göre çıkışlarını açıp kapatması gerektiğini (yani, yerine oturtmaları gerektiğini) bildirmek için kullanılır..
Son olarak, veri pimi, vardiya kaydının çıkışlarının açık / kapalı durumunu belirlemek için gerçek seri verileri bitlerle gönderdiğimiz yerdir.
Tüm süreç 4 adımda tanımlanabilir:
- Kaydırma kaydındaki ilk çıkış pimi için veri pinini yüksek veya düşük olarak ayarlayın..
- Verileri kayıt cihazına 'kaydırmak' için saatin darbesini alın.
- Tüm çıkış pinleri için gerekli durumu ayarlayana kadar verileri ayarlamaya ve saati atmaya devam edin.
- Çıkış sırasını etkinleştirmek için mandal pimini darbe.
uygulama
Bu proje için aşağıdaki bileşenlere ihtiyacınız var:
- 7HC595N vardiya kayıt yongası
- 8 LED ve uygun dirençler veya çıkış yapmak istediğiniz her neyse
- Her zamanki breadboard, konnektörler ve temel bir Arduino
Oomlout başlangıç kitiniz varsa, breadboard düzenini buradan indirebilirsiniz..
İşte montaj videosu:
Tahta düzeni:
Ve benim montaj sürümüm:
Ooolmout tarafından sağlanan orijinal kodu değiştirdim, ancak bunun yerine denemek isterseniz, tam olarak buradan indirebilirsiniz. Kodun açıklaması dahil edilmiştir; kodun açıklamasını okumak için her şeyi aşağıdan veya pastebin'den kopyalayıp yapıştırın.
/ * ---------------------------------------------------- --------- * | Tabanlı Shift Register Eğitimi, | * | Arduino Deney Seti CIRC-05 | * | .: 8 Diğer LED'ler:. (74HC595 Shift Register) | * --------------------------------------------------- -------- * | James @ MakeUseOf.com tarafından değiştirildi | * --------------------------------------------------- -------- * / // Pin Tanımları // 7HC595N, üç pime sahiptir int data = 2; // çıktıları kontrol etmek için bitleri gönderdiğimiz int clock = 3; // verileri senkronize halde tutar int latch = 4; // vardiya registerına ne zaman çıkılacağını bildirir void setup () // üç kontrol pimini çıkış pinMode'a ayarla (data, OUTPUT); pinMode (saat, ÇIKIŞ); pinMode (mandal, ÇIKIŞ); Serial.begin (9600); // böylece hata ayıklama mesajlarını seri monitöre gönderebiliriz void loop () outputBytes (); // bir vardiya kaydının nasıl çalıştığını göstermek için 8 bit yazan temel çıktımız. // outputIntegers (); // etkin olarak ikili sayımı yaparak bayt yerine veri olarak bir tamsayı değeri gönderir. void outputIntegers () için (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100); void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues <> yön gecikmesini ayarlamak için (100);
Bit Değiştirme (OutputBytes İşlevi)
İlk döngü örneğinde - outputBytes () - kod, 8-bitlik bir diziyi (bir bayt) kullanır ve daha sonra for döngüsünün her yinelemesinden sola kayar. Mümkün olduğunca öteye giderseniz, bit basitçe kaybolur olduğunu not etmek önemlidir.
Bit kaydırma, <> ve ardından kaydırmak istediğiniz bit sayısı ile yapılır..
Aşağıdaki örneği inceleyin ve neler olduğunu anladığınızdan emin olun:
bayt val = B00011010 val = val << 3 // B11010000 val = val <> 5 // B00000010
Bunun yerine Tamsayıları Gönderme (OutputIntegers Fonksiyonu)
Bir bayt yerine shift yazmacına tam bir sayı gönderirseniz, bu sayıyı bir ikili bayt sırasına dönüştürür. Bu işlevde (efekti görmek için döngüdeki ve yüklemedeki kayıtsızlık), 0-255 (bir bayt ile temsil edebileceğimiz en yüksek tam sayı) sayılan bir for döngüsü var ve bunu gönderir. Temelde ikili olarak sayılır, bu nedenle LED'leriniz uzun bir çizgide belirtilmedikçe dizi biraz rasgele görünebilir..
Örneğin, ikili açıklanmış makaleyi okursanız, 44 sayısının 00101100 olarak gösterileceğini bilirsiniz, yani 3,5,6 LED'leri dizinin bu noktasında yanacaktır.
Birden Fazla Vardiya Kayıtlı Papatya Zinciri
Shift Kayıtları ile ilgili kayda değer bir şey, eğer 8 bitlikten fazla bilgi verilirse (veya kayıt defterleri büyükse), diğer ek bitleri tekrar değiştirecekleridir. Bu, bir dizi diziyi birbirine bağlayabileceğiniz, uzun bir bit zinciri iterek ve her bir sicile ayrı olarak dağıttığını, sizin için ek bir kodlama yapamayacağınız anlamına gelir.
Buradaki süreç veya şemaları detaylandırmayacak olsak da, birden fazla vardiya kaydınız varsa, buradaki resmi Arduino sitesinden projeyi deneyebilirsiniz.
Serideki diğer makaleler:
- Arduino Nedir ve Onunla Ne Yapabilirsiniz Arduino Nedir ve Onunla Ne Yapabilirsiniz? Arduino Nedir ve Bununla Ne Yapabilirsiniz? Arduino dikkat çekici bir küçük elektronik cihazdır, ancak daha önce hiç kullanmadıysanız, tam olarak ne olduklarını ve bir cihazla ne yapabilirsiniz? ?
- Arduino Başlangıç Seti Nedir ve İçerir? Bir Arduino Başlangıç Kitine Neler Dahil? [MakeUseOf Açıklar] Bir Arduino Başlangıç Kitine Neler Dahil? [MakeUseOf Açıklıyor] Arduino açık kaynaklı donanımını daha önce MakeUseOf'ta tanıtmıştım, ancak bir şey oluşturmak ve gerçekten başlamak için gerçek Arduino'dan daha fazlasına ihtiyacınız olacak. Arduino "başlangıç kitleri"…
- Başlangıç Kitinizle Satın Almak İçin Daha Soğuk Bileşenler 8 Arduino Projeleriniz İçin Daha Serin Bileşenler 8 Arduino Projeleriniz İçin Daha Soğuk Bileşenleri Yani, bir Arduino başlangıç kitiniz olmasını düşünün, ancak bazı temel LED'lerin ve dirençlerin olup olmayacağını merak ediyorsunuz seni haftasonu meşgul edecek kadar mı? Muhtemelen değil. İşte 8 tane daha…
- Arduino Başlangıç Kitinize Başlarken? Sürücüleri Takma ve Tahta ve Bağlantı Noktasını Kurma Arduino Başlangıç Kitinize Başlarken - Sürücüleri Takma ve Tahta ve Bağlantı Noktasını Kurma Arduino Başlangıç Kitinize Başlarken - Sürücüleri Takma ve Tahta ve Bağlantı Noktasını Kurma Böylece, kendiniz satın aldınız Bir Arduino başlangıç kiti ve muhtemelen başka bazı rastgele havalı bileşenler - şimdi ne olacak? Bu Arduino şeyini programlamaya gerçekten nasıl başladınız? Nasıl ayarladınız…
- Fritzing, devre şemaları çizmek için ücretsiz bir araç Fritzing - Elektronik Projeleri Çizim için nihai bir araç [Cross Platform] Fritzing - Elektronik Projeleri Çizim için Ultimate bir araç [Cross Platform] Alcopop gibi ses çıkarmasına rağmen, Fritzing aslında inanılmaz bir bit fantastik açık kaynaklı Arduino gibi hızlı prototipleme elektronik panolarıyla kullanım için devre ve bileşen şemaları oluşturmak için kullanabileceğiniz özgür yazılım…
- Bir Arduino Uygulamasının Yapısına Yakından Bir Bakış ve Örnek Blink Programı Arduino ile İlk Adımlar: Devre Kartına ve Bir Programın Yapısına Yakından Bir Bakış Arduino ile İlk Adımlar: Devre Kartına ve Yapısına Yakından Bir Bakış Bir Programın Son bıraktığımda, Arduino'nuzu Mac veya Windows ile çalışacak şekilde ayarladınız ve tümleşik LED'i yanıp sönen basit bir test uygulaması yükledik. Bugün kodu açıklayacağım…
- Arduino Xmas ağacı ışıkları projesi Arduino Projesi: Gösterişli Noel Işıkları Süslemeleri Nasıl Yapılır Arduino Projesi: Gösterişli Noel Işıkları Süsleri Nasıl Yapılır Bu, Arduino serisini öğreneceğimiz bir sonraki bölümdür ve bu sefer Dizileri öğrenip kullanacağız. çeşitli yanıp sönen dizilerle küçük bir Noel ağacı süsü yapmak için. Bu bir… (AKA dizileri öğreniyor)
- İkili nedir? İkili Nedir? [Teknoloji Açıklaması] İkili Nedir? [Teknoloji Açıklaması] İkili bilgisayarların varlığı için kesinlikle çok önemli olduğu göz önüne alındığında, daha önce konuyla hiç ilgilenmemiş olmamız garip görünüyor - bu yüzden bugün hangi ikili hakkında kısa bir genel bakış vereceğimi düşündüm ...
Bugün vardiya kayıtlarımızla gideceğimiz kadarıyla, sanırım çok fazla konuştuk. Her zaman olduğu gibi, kodunuzu oynamanızı ve ayarlamanızı ve yorumlarda olabilecek soruları sormaktan çekinmeyin, hatta müthiş vardiya kayıt tabanlı projeniz için bir bağlantı paylaşın..