Reklamcılık
Bugün size Shift Register'ları biraz öğretmeye çalışacağım. Bunlar Arduino programlamanın oldukça önemli bir parçasıdır, çünkü temel olarak sadece 3 kontrol pini karşılığında kullanabileceğiniz çıkış sayısını arttırırlar. Ayrıca daha fazla çıktı elde etmek için kaydırmalı yazmaçları birbirine zincirleme bağlayabilirsiniz.
Bu, önceki öğreticilere göre zorlukta önemli bir sıçramadır ve şiddetle tavsiye ederim. önceki materyal hakkında gerçekten iyi bir anlayış (bu makalenin sonundaki bağlantılar) ve aynı zamanda anlayış NS ikilinin temelleri İkili Nedir? [Teknoloji Açıklandı]İkilinin bilgisayarların varlığı için kesinlikle temel olduğu düşünüldüğünde, konuyu daha önce hiç ele almamış olmamız garip görünüyor - bu yüzden bugün ikilinin ne olduğuna dair kısa bir genel bakış sunmayı düşündüm... Devamını oku ki geçen sefer yazdım.
Vardiya Kaydı Nedir?
Teknik olarak bir çıkış kaydırma yazmacı, verileri seri olarak alır ve paralel olarak verir. Pratik anlamda bu, çipe hızlı bir şekilde 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 bir pini tekrarlamak yerine, gereken çıktıyı tüm pinlere aynı anda, tek bir bayt veya daha fazla bilgi olarak göndeririz.
Anlamanıza yardımcı olacaksa, kaydırmalı yazmacı bir dizi dijital çıktı olarak düşünebilirsiniz. ancak normal digitalWrite komutlarını atlayabilir ve bunları açmak için bir dizi bit gönderebilir veya kapalı.
O nasıl çalışır?
Kullanacağımız shift register – Oomlout başlangıç kitinde bulunan 74HC595N – sadece 3 kontrol pinine ihtiyaç duyar. Birincisi bir saat – Arduino seri kütüphaneleri kontrol ettiği için bu konuda çok fazla endişelenmenize gerek yok. o – ancak bir saat temelde sadece veri sinyalinin hızını ayarlayan bir açık/kapalı elektrik darbesidir.
Mandal pimi, kaydırma yazmacına, az önce gönderdiğimiz bitlere göre çıkışlarını ne zaman açıp kapatması gerektiğini söylemek için kullanılır - yani, onları yerine kilitler.
Son olarak, veri pini, kaydırma yazmacının çıkışlarının açık/kapalı durumunu belirlemek için bitlerle birlikte gerçek seri verileri gönderdiğimiz yerdir.
Tüm süreç 4 adımda açıklanabilir:
- Kaydırma kaydındaki ilk çıkış pini için veri pinini yüksek veya düşük olarak ayarlayın.
- Verileri kayıt defterine 'kaydırmak' için saate bası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 itin.
uygulama
Bu proje için aşağıdaki bileşenlere ihtiyacınız var:
- 7HC595N kaydırma yazmaç çipi
- 8 LED ve uygun dirençler veya çıkış yapmak istediğiniz her şey
- Her zamanki breadboard, konektörler ve temel bir Arduino
Oomlout başlangıç kitiniz varsa, devre tahtası düzenini buradan indirebilirsiniz.
İşte montaj videosu:
tahta düzeni:
Ve benim birleştirilmiş versiyonum:
Ooolmout tarafından sağlanan orijinal kodu değiştirdim, ancak bunu denemek isterseniz, tam olarak buradan indirilebilir. Kodun açıklaması dahildir, bu nedenle her şeyi aşağıdan kopyalayıp yapıştırın veya macun kutusu kodun açıklamasını okumak için.
/* * | Vardiya Kaydı Eğitimi, dayalı | * | Arduino Deney Kiti CIRC-05 | * |.: 8 Daha fazla LED:. (74HC595 Vardiya Kaydı) | * * | James @ MakeUseOf.com tarafından değiştirildi | * */ //Pin Tanımları. // 7HC595N'nin üç pini vardır. int veri = 2; // kontrol çıkışlarına bitleri gönderdiğimiz yer int saat = 3; // verileri senkronize tutar. int mandal = 4; // vardiya kaydına çıktı dizisinin ne zaman etkinleştirileceğini söyler void setup() { // üç kontrol pinini pinMode (veri, OUTPUT) çıkışına ayarlayın; pinMode (saat, ÇIKIŞ); pinMode (mandal, ÇIKIŞ); Seri.başlangıç (9600); // böylece seri monitöre hata ayıklama mesajları gönderebiliriz. } geçersiz döngü(){ outputBytes(); // bir vardiya kaydının nasıl çalıştığını göstermek için 8 bit yazan temel çıktımız. //outputIntegers(); // bayt yerine veri olarak bir tamsayı değeri gönderir, etkin bir şekilde ikili olarak sayar. } void outputIntegers(){ for (int i=0;i<256;i++){ digitalWrite (mandal, DÜŞÜK); Seri.println (i); // Hata ayıklama, seri monitör shiftOut'a çıktı gönderme (veri, saat, MSBFIRST, i); digitalWrite (mandal, YÜKSEK); gecikme (100); } } void outputBytes(){ /* Bayt veya 8 bit, bir B ve ardından 8 0 veya 1 ile temsil edilir. Bu örnekte, bunu 8 LED'i kontrol etmek için kullanacağımız bir dizi gibi düşünün. Burada bayt değerini 00000001 */ byte dataValues = B00000001; // başlangıç desenini ayarlamak için bunu değiştirin /* for döngüsünde, shiftOut Arduino işlevini kullanarak mandalı aşağıya çekerek başlıyoruz. shift register ile konuşun, ona LED'lerin durumunu temsil eden dataValues baytımızı gönderin, ardından bunları kilitlemek için mandalı yukarı çekin yer. Son olarak, bitleri bir yer sola kaydırıyoruz, yani bir sonraki yineleme serideki bir sonraki LED'i açacaktır. Gönderilen tam ikili değeri görmek için seri monitörü kontrol edin. */ for (int i=0;i<8;i++){ digitalWrite (mandal, DÜŞÜK); Serial.println (dataValues, BIN); // Hata ayıklama, çıktıları seri monitör shiftOut'a gönderme (veri, saat, MSBFIRST, dataValues); digitalWrite (mandal, YÜKSEK); dataValues = dataValues << 1; // Bitleri bir yer sola kaydırın - yön gecikmesini (100) ayarlamak için >> olarak değiştirin; } }
Bit Kaydırma (OutputBytes İşlevi)
İlk döngü örneğinde – outputBytes() – kod 8 bitlik bir dizi (bir bayt) kullanır ve daha sonra for döngüsünün her yinelemesini sola kaydırır. Mümkün olandan daha fazla kaydırırsanız, bitin basitçe kaybolacağını not etmek önemlidir.
Bit kaydırma, << veya >> kullanılarak ve ardından kaydırmak istediğiniz bit sayısı kullanılarak yapılır.
Aşağıdaki örneğe bakın ve neler olduğunu anladığınızdan emin olun:
bayt değeri = B00011010. değer = değer << 3 // B11010000. val = val << 2 // B01000000, diğer bitleri kaybettik! değer = değer >> 5 // B00000010.
Yerine Tamsayı Gönderme (OutputIntegers Function)
Vardiya kaydına bayt yerine tam sayı gönderirseniz, sayıyı ikili bayt dizisine dönüştürür. Bu fonksiyonda (döngüde yorum yapma ve efekti görmek için yükle), 0-255 (bir bayt ile temsil edebileceğimiz en yüksek tamsayı) arasında sayan ve bunun yerine bunu gönderen bir for döngüsüne sahibiz. Temelde ikili olarak sayılır, bu nedenle LED'leriniz uzun bir sıraya yerleştirilmediği sürece dizi biraz rastgele görünebilir.
Örneğin, ikili açıklamalı makaleyi okursanız, 44 sayısının 00101100 olarak temsil edileceğini bileceksiniz, bu nedenle dizide o noktada 3,5,6 LED'leri yanacaktır.
Zincirleme Birden Fazla Vardiya Kaydı
Shift Registerler ile ilgili dikkat çekici olan şey, eğer onlara 8 bitten fazla bilgi verilirse (veya kayıtları ne kadar büyük olursa olsun), diğer ek bitleri tekrar kaydıracaklarıdır. Bu, bunların bir dizisini birbirine bağlayabileceğiniz, uzun bir bit zincirini itebileceğiniz ve her bir kayıt defterine ayrı ayrı dağıtılmasını sağlayabileceğiniz anlamına gelir, üstelik sizin tarafınızdan herhangi bir ek kodlama olmadan.
İşlemi veya şemaları burada detaylandırmayacak olsak da, birden fazla vardiya kaydınız varsa, projeyi resmi Arduino sitesinden buradan deneyebilirsiniz.
Serideki diğer makaleler:
- Arduino Nedir ve Onunla Ne Yapabilirsiniz? Arduino Nedir ve Onunla Ne Yapabilirsiniz?Arduino, dikkate değer küçük bir elektronik cihazdır, ancak daha önce hiç kullanmadıysanız, tam olarak nedirler ve bir tanesiyle ne yapabilirsiniz? Devamını oku ?
- Arduino Başlangıç Kiti Nedir ve Neleri İçerir? Arduino Başlangıç Kitine Neler Dahildir? [MakeUseOf Açıklar]Arduino açık kaynaklı donanımını burada MakeUseOf'ta daha önce tanıtmıştım, ancak ondan bir şeyler inşa etmek ve gerçekten başlamak için gerçek Arduino'dan daha fazlasına ihtiyacınız olacak. Arduino "başlangıç kitleri"... Devamını oku
- Başlangıç Kitinizle Satın Alabileceğiniz Daha Harika Bileşenler Arduino Projeleriniz İçin 8 Harika Bileşen DahaYani, bir Arduino başlangıç kiti almayı düşünüyorsunuz, ancak bazı temel LED'lerin ve dirençlerin sizi hafta sonu meşgul etmek için yeterli olup olmayacağını mı merak ediyorsunuz? Muhtemelen değil. İşte 8 tane daha... Devamını oku
- Arduino Başlangıç Kitinize Başlarken? Sürücüleri Yükleme ve Anakartı ve Bağlantı Noktasını Ayarlama Arduino Başlangıç Kitinize Başlarken - Sürücüleri Yükleme ve Kart ve Bağlantı Noktasını AyarlamaKendinize bir Arduino başlangıç kiti ve muhtemelen başka rastgele harika bileşenler aldınız - şimdi ne olacak? Bu Arduino olayını programlamaya gerçekten nasıl başlıyorsunuz? nasıl kurarsın... Devamını oku
- Fritzing, devre şemaları çizmek için ücretsiz bir araç Fritzing - Elektronik Projelerin Eskizini Çizmek İçin En İyi Araç [Çapraz Platform]Bir alcopop gibi görünmesine rağmen, Fritzing aslında oluşturmak için kullanabileceğiniz inanılmaz bir özgür yazılımdır. fantastik açık kaynak gibi hızlı prototipleme elektronik kartlarıyla kullanım için devre ve bileşen şemaları Arduino... Devamını oku
- Arduino Uygulamasının Yapısına Yakından Bakış ve Örnek Blink Programı Arduino İle İlk Adımlar: Devre Kartına ve Bir Programın Yapısına Yakından BakışGeçen sefer Arduino'nuzu Mac veya Windows ile çalışacak şekilde ayarlayarak ve yerleşik LED'i yanıp sönen basit bir test uygulaması yükledikten sonra ayrıldım. Bugün kodu açıklayacağım... Devamını oku
- Arduino Noel ağacı ışıkları projesi Bir Arduino Projesi: Gösterişli Noel Işıkları Süsleri Nasıl YapılırBu, Arduino öğrenme serimizin bir sonraki kısmı ve bu sefer çeşitli yanıp sönen dizilerle küçük bir Noel ağacı süsü yapmak için Dizileri öğreneceğiz ve kullanacağız. Bu bir... Devamını oku (AKA dizileri öğreniyor)
- İkili nedir? İkili Nedir? [Teknoloji Açıklandı]İkilinin bilgisayarların varlığı için kesinlikle temel olduğu düşünüldüğünde, konuyu daha önce hiç ele almamış olmamız garip görünüyor - bu yüzden bugün ikilinin ne olduğuna dair kısa bir genel bakış sunmayı düşündüm... Devamını oku
Bugün vardiya kaydedicilerle gideceğimiz kadarıyla bu kadar, sanırım çok şey ele aldık. Her zamanki gibi, kodla oynamanızı ve kodu ayarlamanızı ve sorularınızı yorumlarda sormaktan ve hatta harika vardiyalı kayıt tabanlı projenizin bağlantısını paylaşmaktan çekinmeyin.
James, Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A+ ve Network+ sertifikalıdır. MakeUseOf'un baş geliştiricisidir ve boş zamanını VR paintball ve masa oyunları oynayarak geçirir. Çocukluğundan beri bilgisayar üretiyor.