AT89C51RC2 ile 2X16 Lcd Göstergeli Frekansmetre

Hazırlayan: Abdülbaki Şahin Projenin Kaynak simülasyon ve C Kod Dosyaları frekans-metre Emeği geçen Kişilere Teşekkürler
Frekansmetre ile ilgili bütün konularda frekansın tanımını esas almak gerekmektedir. Aynı şekilde sayısal (dijital) Frekansmetre yapmak için de frekansın tanımını devre olarak aynen uygulamak gerekmektedir.
Frekans : 1 saniyedeki peryot sayısına frekans denir.
Peryod : Tam devir yapmış dalga bir peryotluktur (devirliktir). Devrini tamamlayan dalgaya peryot denir.
Pulse: Yarım peryota pals denir. 1 peryotta birisi pozitif, diğeri negatif olmak üzere iki adet pals vardır.
Frekans Birimi: HERTZ veya SAYKIL olarak belirtilir. Değerinin askatları yoktur, fakat üs katları vardır.
1 Hz ( Hertz )
1 000 Hz = 1 KHz ( Kilohertz )
1 000 000 Hz = 1 000 KHz = 1 MHz ( Megahertz )
1 000 000 000 Hz = 1 000 000 KHz = 1 000 MHz = 1 GHz ( Gigahertz )
( Yukarıya devam eder. Terahertz gibi )
Yukarıdaki temel tanımlar bir frekansmetre yapmak için yeterlidir. Şimdi frekansmetreyi açıklayabiliriz Frekansmetre 1 saniyedeki peryot sayısını ölçen ölçü aletlerine frekansmetre denir
Piyasada çeşitli yöntemler kullanarak yapılmış değişik tiplerde frekansmetreler satılmaktadır. Analog ibreli, titreşimli, sayısal, programlarla yapılmış olanlar bunlardan bazısıdır. Biz bu tiplerden sadece sayısal (dijital) entegrelerle gerçekleştirilen sayısal göstergeli tür üzerinde duracağız.
Frekanmetre Nasıl Yapılır ?
Frekansmetre yapmak için 2 saniyelik, eÅŸit palslı ve kare dalga bir peryot kullanılması yeterlidir. Bu peryotun pozitif ve negatif palsları birbirine eÅŸit olmalıdır. Bu 2 saniyelik peryotun 1′er saniyelik iki adet palsından istediÄŸimizi kullanarak bir frekans metre tasarımı yapabiliriz. Ayrıca yardımcı palslara da ihtiyacımız vardır. Bu yardımcı palslar, göstergeleri sayma esnasında tutma ve sayma iÅŸlemi bittiÄŸinde sayacıları resetlemek (sıfırlamak) olmak üzere iki adet olması gerekmektedir. Biz burada temel ölçüm devresini esas alıyoruz. DeÄŸiÅŸik aksesuar ve görüntü düzenleri için daha fazla palslar kullanılabilir. 2 saniyelik peryotta kullanacağımız pals deÄŸerini, öğrenmek istediÄŸimiz sayıcılara girecek olan frekans için anahtar görevi gören devreyi çalıştıracaktır.
Peryodalrın Sayılması
Salınımın olduğu bir teli bir anahtar kullanarak 1 saniye için açıp kapatırsak ve telden bu saniyede geçen salınım miktarını sayarsak o telden o anda geçen peryot miktarını öğrenmiş oluruz. Böylece frekansı öğrenmiş oluruz.
Referans Freaknsı ve Özellikleri: Öncelikle referans frekansını elde etmek gerekmektedir. Bu, 2 saniyelik, eşit palslı ve kare dalga bir peryottur. Frekansı 1/2 hertzdir.
Bu referans frekansını ne şekilde elde ettiğimiz önemli değildir. Temel şart, kararlı ve kullanacağımız palsın 1 saniyesinin kesin olması gerekmektedir. Bu temel şart yerine getirilemezse ölçüm hatalı ve karasız olur. Bu istenen bir durum değildir. Bu frekansta kararlılığı sağlamak için kristal kontrollu osilatör devresi hazırlamak gerekmektedir. Bu tür devreler, TTL veya CMOS entegrelerle yapılabilir.
![]()
Referans frekansı
Referans frekansı ile saydırma palsı, ekrana aktarma palsı ve sayıcıları resetleme palsı elde edilmesi gerekmektedir.
Referans frekansı ile elde edilmesi gereken palslar.

Saydırma palsı

Ekrana Aktarma Palsı

Sayıcıları Resetleme Palsi
Peryotları Kontrol Altına Alarak Geçirmek :Bunun için her bir palsı 1 saniye olan referans frekansı elde edildikten sonra, bu referans frekansı ile peryotların geçişi kontrollu olarak yapılır. Böylece frekans sayılmaya hazır hale getirilir. Yani 1 saniye geçirilen frekans 1 saniye bekletilir. Frekansın geçişi sırasında sayma işlemi yapılır, bekleme sırasında göstergelere aktarılır ve sayıcılar sıfırlanarak tekrar sayıma hazır hale getirilir. Düzenek böyle çalışır. Bu düzeneğin çalışması için referans frekansına ihtiyaç vardır. Bu referans frekansı ile ölçeceğimiz frekansı kıyaslayarak sonuca varırız. Bu türlü bir işlem için bir AND kapısı kullanılabilir. Bu devrede 4518 entegresi kullanıyoruz ve clock girişi kontrol edilir.
Frekans Saydırmak :Bu devrede sayılacak frekans 4518′un ENABLE giriÅŸine baÄŸlanıyor. RESET uçları birleÅŸtirilerek referans devresinden gelen resetleme ucuna baÄŸlanıyor. Sayma palsı ucu ise, CLOCK ucuna baÄŸlanıyor. İlk entegrenin Q3 çıkışı sonraki entegrenin ENABLE ucuna baÄŸlanıyor. Q1, Q2, Q3, Q4 çıkışları ise gösterge sürücü entegrelere gidiyor.

4518 Entegresi İle Yapılan Temel Frekans Sayma Devresi
2 x 4518 entegre
1 x 4017 entegre
1 x LCD ( 2×16 char ) +LCD soketi ve giriÅŸi
1 x 89c51rc2 ve soketi
1 x 12Mhz kristal
1 x 10×10luk plaket
2 x 2lik Klemens
1x 1k direnç
1x 10k direnç
LCD’de kullanılan komutların tanımlanması
#define Sil 1 // Ekranı temizler #define BasaDon 2 // İmleci sol üst köşeye getirir #define SolaYaz 4 // İmlecin belirttiği adres azalarak gider #define SagaYaz 6 // İmlecin belirttiği adres artarak gider #define ImlecGizle 12 // Göstergeyi aç, kursör görünmesin #define ImlecYanSon 15 // Yanıp sönen blok kursör #define ImlecGeri 16 // Kursörü bir karakter geri kaydır #define KaydirSaga 24 // Göstergeyi bir karakter sağa kaydır #define KaydirSola 28 // Göstergeyi bir karakter sola kaydır #define EkraniKapat 8 // Göstergeyi kapat (veriler silinmez) #define BirinciSatir 128 // LCD'nin ilk satir başlangıç adresi #define IkinciSatir 192 // İkinci satırın başlangıç adresi
LCD’de Kullanılan Fonksiyon Seçimi
#define CiftSatir8Bit 56 // 8 bit ara birim, 2 satır, 5*7 piksel #define CiftSatir4Bit 48 // 8 bit ara birim, 1 satır, 5*7 piksel #define TekSatir8Bit 40 // 4 bit ara birim, 2 satır, 5*7 piksel #define TekSatir4Bit 32 // 4 bit ara birim, 1 satır, 5*7 piksel
LCD Girişlerinin Tanımlanması
#define Data P1 // LCD Data girişleri için port ata #define RS P3_2 // Saklayıcı seçme girişi RS=0 komut, RS=1 veri #define RW P3_1 // Oku/Yaz girişi RW=0 yaz, RW=1 oku #define EN P3_0 // Yetki girişi
LCD Gecikme Fonksiyonu
void Gecikme ( long int sure )
{
long int i;
for ( i=1; i<=sure ; i++ )
{;}
}
LCD Hazır Olana Kadar Bekle Fonksiyonu
void LcdHazir ()
{
Data=0xFF; // LCD den veri almaya hazirlan
RS = 0; // Komut modu
RW = 1; // LCD den okuma
EN = 1; // Yetki için düşen kenar ayarı
Gecikme(200); // Kısa bir bekleme süresi
While ( Data & 0x7F == 0x80 ) ; // MeÅŸgul bitini kontrol et.
}
LCD’ye Komut Yazdırma Fonksiyonu
void Komut (int komut)
{
LcdHazir(); // LCD hazır olana kadar bekle
RS=0; // RS komut modunda
RW=0; // RW yaz modunda
EN=1; // İşlemin yetkilendirilmesi için düşen kenar ayarı
Data=komut; // LCD veri giriÅŸlerine komut bilgisini aktar
EN=0; // Yetki için düşen kenar sağlandı
Gecikme(1000); // Gecikme
LCD’ye Tek Bir Karakter Yazdırma Fonksiyonu
void Veri ( char veri, long int hız )
{
LcdHazir(); // LCD hazır olana kadar bekle
RS=1; // RS komut modunda
RW=0; // RW yaz modunda
EN=1; // Yetki için düsen kenar ayar işlemi
Data=veri; // LCD data giriÅŸlerine veri bilgisini aktar
EN=0; // Yetki için düşen kenar sağlandı
Gecikme(hız); // Ekranda karakterlerin görünmesi arasındaki süre
}
LCD’ye Karakter Dizisi (String) Yazdırma Fonksiyonu
void VeriDizi ( char veri[], long int hız )
{
int i=0;
While (veri[i]!=0 )
{
LcdHazir(); // LCD hazır olana kadar bekle
RS=1; // RS komut modunda
RW=0; // RW yaz modunda
EN=1; // Yetki için düsen kenar ayar işlemi
Data=veri[i]; // LCD data giriÅŸlerine veri bilgisini aktar
EN=0; // Yetki için düşen kenar sağlandı
i++; // Bir sonraki veri bitini almak için dizi'yi 1 arttır
Gecikme(hız); // Karakterlerin görünmesi arasındaki süre
LCD Başlangıç Ayarlarını Yapan Fonksiyon
void LcdAc ( void )
{
Komut( ImlecGizle );
Komut( CiftSatir8Bit );
Komut( SagaYaz );
}
