- Gerekli Bileşenler:
- Devre şeması:
- Frekans Ölçümü için 8051 ZAMANLAYICI kullanma:
- 555 Zamanlayıcı Frekans Kaynağı Olarak:
- Çalışma ve Kod Açıklaması:
Frekans, saniyedeki döngü sayısı olarak tanımlanır. Toplam 'T' süresinin tersi olarak da tanımlanabilir. Bu projede 8051 mikrodenetleyicinin Port 3.5'e giren puls sayısını sayacağız ve bunu 16 * 2 LCD ekranda görüntüleyeceğiz. Yani temelde 8051'in 3.5 numaralı Portunda sinyal frekansını ölçtük. Burada AT89S52 8051 yongasını kullandık ve Astable modunda bir 555 IC, gösteri için örnek atımı oluşturmak için kullanıldı. Daha önce Arduino kullanarak Frekans sayacı oluşturmuştuk.
Gerekli Bileşenler:
- 8051 mikrodenetleyici (AT89S52)
- 16 * 2 LCD ekran
- Frekans Kaynağı (555 Zamanlayıcı)
- Potansiyometre
- Bağlantı telleri
Devre şeması:
Frekans Ölçümü için 8051 ZAMANLAYICI kullanma:
8051 mikrodenetleyici, 128 byte on chip RAM, 4K byte on chip ROM, iki zamanlayıcı, bir seri port ve 4 adet 8bit porta sahip 8 bitlik bir mikrodenetleyicidir. 8052 mikro denetleyici, mikro denetleyicinin bir uzantısıdır. Bağlantı noktası 3.5'i sayaç olarak yapılandırmak için TMOD kayıt değerleri 0x51 olarak ayarlanır. Aşağıdaki şekil TMOD kaydını gösterir.
KAPI | C / T | M1 | M0 | KAPI | C / T | M1 | M2 |
ZAMANLAYICI 1 | ZAMANLAYICI 0 |
GATE - GATE ayarlandığında, zamanlayıcı veya sayaç yalnızca INTx pini HIGH ve TRx kontrol pini ayarlandığında etkinleştirilir. GATE temizlendiğinde, TRx kontrol biti her SET olduğunda zamanlayıcı etkinleştirilir.
C / T - C / T = 0 olduğunda, Zamanlayıcı görevi görür. C / T = 1 olduğunda, Sayaç görevi görür.
M1 ve M0, çalışma modunu gösterir.
TMOD = 0x51 için timer1 sayaç görevi görür ve mode1'de (16bit) çalışır.
16 * 2 LCD, sinyalin Frekansını Hertz (Hz) cinsinden görüntülemek için kullanılır. 16x2 LCD'de yeniyseniz, burada 16x2 LCD'nin pimleri ve komutları hakkında daha fazla bilgi edinin. Ayrıca LCD ile 8051 arasında nasıl arayüz oluşturacağınızı kontrol edin.
555 Zamanlayıcı Frekans Kaynağı Olarak:
Frekans kaynağı kare dalgalar üretmelidir ve maksimum genlik 5V ile sınırlıdır, çünkü 8051 mikrodenetleyicinin portları 5V'den büyük voltajı işleyemez. Ölçülmesi maksimum frekans 655,35 KHz için TH1 ve 1 TL kaydının bellek sınırlaması (her 8bit) arasında. 100 milisaniyede TH1 ve TL1, 65535'e kadar sayım tutabilir. Dolayısıyla ölçülebilen maksimum frekans 65535 * 10 = 655,35 KHz'dir.
Bu 8051 Frekans Ölçer projesinde, değişken frekanslı kare dalgalar üretmek için kararsız modda 555 zamanlayıcı kullanıyorum. 555 IC tarafından üretilen sinyalin frekansı, gösterildiği gibi potansiyometre ayarlanarak değiştirilebilir video Bu proje sonunda verilmiştir.
Bu projede Timer1 (T1), 100 milisaniye için 8051 mikro denetleyicinin 3.5 numaralı bağlantı noktasına giren darbe sayısını sayar. Sayım değerleri sırasıyla TH1 ve TL1 kayıtlarında saklanacaktır. TH1 ve TL1 kaydının değerlerini birleştirmek için aşağıdaki formül kullanılır.
Darbeler = TH1 * (0x100) + TL1
Şimdi 'darbe' 100 milisaniyede döngü sayısına sahip olacak. Ancak sinyalin frekansı, saniyedeki döngü sayısı olarak tanımlanır. Frekansa dönüştürmek için aşağıdaki formül kullanılır.
Bakliyat = Bakliyat * 10
Çalışma ve Kod Açıklaması:
Komple C programı bu Frekans Metre bu projenin sonunda verilir. Kod küçük anlamlı parçalara bölünmüş ve aşağıda açıklanmıştır.
8051 mikrodenetleyici ile 16 * 2 LCD arabirimi için, 8051 mikrodenetleyiciye 16 * 2 lcd'nin bağlı olduğu pinleri tanımlamamız gerekir. 16 * 2 lcd'nin RS pini P2.7'ye bağlanır, 16 * 2 lcd'nin RW pini P2.6'ya ve 16 * 2 lcd'nin E pini P2.5'e bağlanır. Veri pinleri 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına bağlanır.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
Daha sonra programda kullanılan bazı fonksiyonları tanımlamamız gerekiyor. Gecikme işlevi, belirtilen zaman gecikmesini oluşturmak için kullanılır. Cmdwrt işlevi, 16 * 2 lcd ekrana komut göndermek için kullanılır. datawrt işlevi, verileri 16 * 2 lcd ekrana göndermek için kullanılır.
void delay (unsigned int); void cmdwrt (işaretsiz karakter); void datawrt (işaretsiz karakter);
Kodun bu bölümünde 16 * 2 lcd'ye komutlar gönderiyoruz. Komutları böyle berrak ekran, artım imleç olarak, 1 başlangıcı imleci zorlamak st bazı belirli bir süre sonunda birer 16 * 2 lcd ekran birine gönderilir hattı.
için (i = 0; i <5; i ++) {cmdwrt (cmd); gecikme (1); }
Kodun bu bölümünde timer1 sayaç olarak yapılandırılır ve çalışma modu mod 1 olarak ayarlanır.
Zamanlayıcı0, zamanlayıcı olarak yapılandırılır ve çalışma modu, mod 1 olarak ayarlanır. Zamanlayıcı 1, darbe sayısını saymak için kullanılır ve zamanlayıcı 0, zaman gecikmesi oluşturmak için kullanılır. Saymanın 0'dan başlamasını sağlamak için TH1 ve TL1 değerleri 0 olarak ayarlanır.
TMOD = 0x51; TL1 = 0; TH1 = 0;
Kodun bu bölümünde, 100 milisaniye için zamanlayıcı çalıştırılır. Gecikme fonksiyonu kullanılarak 100 milisaniye gecikme üretilir. TR1 = 1, zamanlayıcıyı başlatmak içindir ve TR1 = 0, zamanlayıcıyı 100 milisaniyeden sonra durdurmak içindir.
TR1 = 1; gecikme (100); TR1 = 0;
Kodun bu bölümünde TH1 ve TL1 kayıtlarında bulunan sayma değerleri birleştirilerek 10 ile çarpılarak 1 saniyede toplam döngü sayısı elde edilir.
Darbeler = TH1 * (0x100) + TL1; Darbeler = darbeler * 10;
Kodun bu bölümünde, frekans değeri 16 * 2 lcd ekranda görüntülemeyi kolaylaştırmak için tek bayta dönüştürülür.
d1 = darbeler% 10; s1 = palslar% 100; s2 = palslar% 1000; s3 = palslar% 10000; s4 = palslar% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (darbeler-s4) / 100000;
Kodun bu bölümünde frekans değerinin münferit haneleri ASCII formatına dönüştürülerek 16 * 2 lcd ekranda görüntülenir.
Eğer (darbeler> = 100000) datawrt (0x30 + d6); eğer (darbeler> = 10000) datawrt (0x30 + d5); eğer (darbeler> = 1000) datawrt (0x30 + d4); eğer (darbeler> = 100) datawrt (0x30 + d3); eğer (darbeler> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
Kodun bu bölümünde 16 * 2 lcd ekrana komutlar gönderiyoruz. Komut 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına kopyalanır. RS, komut yazma için düşük yapılır. Yazma işlemi için RW düşük yapılır. Komut yazma işlemini başlatmak için etkinleştirme (E) pinine yüksekten düşüğe darbe uygulanır.
void cmdwrt (işaretsiz karakter x) {P0 = x; rs = 0; rw = 0; en = 1; gecikme (1); en = 0; }
Kodun bu bölümünde 16 * 2 lcd ekrana veri gönderiyoruz. Veriler, 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına kopyalanır. RS, komut yazma için yüksek yapılır. Yazma işlemi için RW düşük yapılır. Veri yazma işlemini başlatmak için etkinleştirme (E) pinine yüksekten düşüğe darbe uygulanır.
void datawrt (işaretsiz karakter y) {P0 = y; rs = 1; rw = 0; en = 1; gecikme (1); en = 0; }
8051 Mikrodenetleyiciyi kullanarak herhangi bir sinyalin frekansını bu şekilde ölçebiliriz. Aşağıdaki tam kodu ve Demo Video'yu kontrol edin.