Önceki makalelerden birinde, özellikle 74HC595 olmak üzere bir kaydırma yazmacının kullanımına kısaca değinmiştik. Bu mikro devre ile çalışma yeteneklerine ve prosedürüne daha yakından bakalım.
Gerekli
- -Arduino;
- - vardiya kaydı 74HC595;
- - bağlantı kabloları.
Talimatlar
Aşama 1
Kaydırma yazmacı 74HC595 ve benzerleri, seri verileri paralele dönüştürmek için aygıtlar olarak kullanılır ve aktarılan durumu tutan veriler için bir "mandal" olarak da kullanılabilir.
Pin çıkışı (pin çıkışı) soldaki şekilde gösterilmiştir. Amaçları aşağıdaki gibidir.
Q0… Q7 - paralel veri çıkışları;
GND - toprak (0 V);
Q7 '- seri veri çıkışı;
^ MR - master'ı sıfırla (aktif düşük);
SHcp - vardiya kaydı saat girişi;
STcp - "mandal" saat darbe girişi;
^ OE - çıkış etkinleştirme (aktif düşük);
Ds - seri veri girişi;
Vcc - güç kaynağı +5 V.
Yapısal olarak, mikro devre çeşitli durumlarda yapılır; Sağdaki şekilde gösterileni kullanacağım - çıktı - çünkü breadboard ile kullanmak daha kolay.
Adım 2
Kaydırma yazmacına veri aktarmak için kullanacağımız SPI seri arabirimini kısaca hatırlayalım.
SPI, bir master ve bir slave'in katıldığı dört telli çift yönlü bir seri arayüzdür. Bizim durumumuzdaki master Arduino olacak, slave 74HC595 kaydı olacak.
Arduino için geliştirme ortamı, SPI arayüzü üzerinde çalışmak için yerleşik bir kütüphaneye sahiptir. Uygularken, şekilde işaretlenmiş sonuçlar kullanılır:
SCLK - SPI saat çıkışı;
MOSI - master'dan slave'e veriler;
MISO - köleden efendiye veri;
SS - köle seçimi.
Aşama 3
Devreyi resimdeki gibi bir araya getirelim.
Ayrıca kaydırma yazmacı mikro devresinin tüm pinlerine bir mantık analizörü bağlayacağım. Onun yardımıyla fiziksel düzeyde neler olduğunu, hangi sinyallerin nereye gittiğini göreceğiz ve ne anlama geldiklerini anlayacağız. Fotoğraf gibi bir şey görünmelidir.
4. Adım
Bunun gibi bir kroki yazıp Arduino hafızasına yükleyelim.
PIN_SPI_SS değişkeni, burada kullandığımız SPI arayüzünün master'ı olarak kullanıldığında Arduino'nun "10" pinine karşılık gelen dahili bir standart sabittir. Prensip olarak, Arduino'daki diğer herhangi bir dijital pini de kullanabiliriz; o zaman bunu bildirmeli ve çalışma modunu ayarlamalıyız.
Bu pini DÜŞÜK besleyerek, gönderme/alma için kaydırma yazmacımızı etkinleştiririz. İletimden sonra voltajı tekrar YÜKSEK'e yükseltiriz ve değişim sona erer.
Adım 5
Devremizi işe çevirelim ve lojik analizörün bize ne gösterdiğini görelim. Zamanlama şemasının genel görünümü şekilde gösterilmiştir.
Mavi kesikli çizgi 4 SPI çizgisini, kırmızı kesikli çizgi kaydırma yazmacının 8 kanallı paralel verilerini gösterir.
Zaman ölçeğindeki A noktası, "210" sayısının kaydırma yazmacına aktarıldığı an, B, "0" sayısının yazıldığı andır, C, baştan tekrar eden döngüdür.
Gördüğünüz gibi, A'dan B'ye - 10.03 milisaniye ve B'den C'ye - 90.12 milisaniye, neredeyse çizimde istediğimiz gibi. 0, 03 ve 0, 12 ms'deki küçük bir ekleme, Arduino'dan seri veri aktarma zamanıdır, bu yüzden burada tam olarak 10 ve 90 ms'miz yok.
6. Adım
A bölümüne daha yakından bakalım.
En üstte, Arduino'nun SPI-ENABLE line - slave seçiminde iletimi başlattığı uzun bir darbe var. Bu sırada, SPI-CLOCK saat darbeleri (üstten ikinci satır), 8 adet (1 bayt aktarımı için) üretilmeye başlar.
Üstten sonraki satır SPI-MOSI - Arduino'dan vardiya kaydına aktardığımız veriler. Bu, ikili olarak "210" sayımız - "11010010".
Transfer tamamlandıktan sonra SPI-ENABLE darbesinin sonunda shift register'ın 8 bacağında aynı değeri ayarladığını görüyoruz. Bunu mavi noktalı bir çizgi ile vurguladım ve netlik için değerleri etiketledim.
7. Adım
Şimdi dikkatimizi B bölümüne çevirelim.
Yine, her şey bir köle seçmek ve 8 saat darbesi üretmekle başlar.
SPI-MOSI satırındaki veriler artık "0"dır. Yani, şu anda "0" sayısını kayıt defterine yazıyoruz.
Ancak aktarım tamamlanana kadar kayıt "11010010" değerini saklar. Q0.. Q7 paralel pinlerine çıkış yapılır ve paralel çıkış Q7'den burada gördüğümüz SPI-MISO hattına kadar olan hatta saat darbeleri olduğunda çıkış yapılır.
8. Adım
Böylece ana cihaz olan Arduino ile 74HC595 shift register arasındaki bilgi alışverişi konusunu detaylı olarak inceledik. Bir vardiya kaydının nasıl bağlanacağını, içine veri yazmayı ve ondan veri okumayı öğrendik.