
PIC16F877 ile 2×16 LCD göstergeli basit bir voltmetre ya da vumetre devresi yapabilirsiniz. Sistemin temeli neredeyse aynı, yazılım PicBasic/Proton tarafında hazırlanmış ve devre LCD, PIC ve birkaç pasif elemanla kuruluyor. Burada önemli nokta şu: Bu yapı kendi başına doğrudan bir DC seviye göstergesi gibi çalışıyor.
Yani en kolay haliyle bir voltmetre. Fakat giriş katını uygun şekilde düzenlediğinizde aynı mantıkla ses için bir vumetre, su seviyesi göstergesi, akım göstergesi ya da RF seviye göstergesi de elde edebilirsiniz.
Kısacası işin kalbi ADC okuma ve LCD üzerinde bar gösterimi; asıl uygulamayı belirleyen kısım ise girişte ne ölçtüğünüz oluyor.
Şemadaki yapı ne anlatıyor?
İçerik

Şemada U1 olarak PIC16F877A kullanılmış. Saat tarafında X1 4 MHz kristal ve buna eşlik eden C1 ile C2 33 pF kondansatörler var.
Reset tarafında R1 10K ve C5 100 nF ile klasik bir MCLR ağı kurulmuş.
Besleme hattında C3 ve C4 100 nF bypass kondansatörleri görülüyor; bu da devrenin kararlı çalışması için iyi bir ayrıntı.
Giriş örneği özellikle sade tutulmuş. RV2 10K potansiyometre ile analog girişte değişken bir gerilim üretiliyor ve bu değer PIC’in ADC girişine veriliyor.
Girişte bulunan D1 1N4734A zener diyot, ADC pinini aşırı gerilime karşı sınırlandırmak için eklenmiş.

C6 10 µF ise girişte küçük bir yumuşatma ve kararlılık sağlıyor.
Bu kurgu deneme amacı için güzel; potansiyometreyi çevirip LCD’de hem sayısal değeri hem de bar göstergesini izleyebiliyorsunuz.
LCD tarafında Proteus modelinde LCD1 LM032L olarak görünen 2×16 karakter ekran kullanılmış.
RV1 10K trimpot da kontrast ayarı için bağlanmış. Bağlantı şekli dört bitlik kullanım mantığına yakın olduğu için PIC’in portları daha verimli kullanılıyor.
LCD tarafıyla uğraşırken PicBasic Pro örnekleri içinden benzer LCD uygulamalarına bakmak da işe yarar.
Bu devre aslında nasıl çalışıyor?
PIC16F877A içindeki ADC birimi 0 ile 5 Volt arasındaki analog gerilimi 10 bit çözünürlükle sayısal değere çeviriyor.
Yani girişte 0 V varken sonuç 0, 5 V civarında ise sonuç 1023 oluyor. Yazılım da bu değeri önce ekranda anlaşılır bir voltaj bilgisine dönüştürüyor, ardından ikinci satırda hareketli bir seviye çubuğu halinde gösteriyor.
Bu yüzden proje sadece “volt ölçüp yazdıran” bir yapı değil. Aynı ölçüm bilgisini iki farklı biçimde veriyor: üst satırda sayısal okuma, alt satırda gözle daha rahat takip edilen bar gösterim.
Özellikle değişken seviyeleri izlerken bu yaklaşım çok kullanışlı oluyor.
Mesela yavaş değişen bir gerilimde sayısal değer işe yararken, hızlı değişen bir sinyalde çubuğun hareketi çoğu zaman daha sezgisel okunuyor.
Voltmetre mi, vumetre mi?
İkisi de olabilir ama giriş katı aynı olmaz. Basit voltmetre yapmak istiyorsanız iş kolay: PIC’in ADC girişine gelecek gerilimi güvenli aralıkta tutmanız yeterli.
Ölçmek istediğiniz değer 5 Volt’u aşacaksa direnç bölücü kurmanız gerekir.
Bu konuya biraz daha detaylı bakmak isterseniz PIC ile ADC/DAC uygulamaları tarafı güzel tamamlayıcı olur.
Gerçek anlamda ses vumetresi yapmak istiyorsanız ses sinyalini doğrudan ADC pinine vermek doğru olmaz.
Önce sinyali doğrultan, seviyesini ayarlayan ve gerekirse tepe değeri tutan bir giriş katı gerekir.
Aynı durum akım, sıcaklık, RF seviye ya da başka herhangi bir büyüklük için de geçerli. Sonuçta PIC’in görmek istediği şey yine 0-5 V aralığında düzgün bir analog bilgidir.
Proton / PicBasic tarafındaki mantık
Yazılım kısmında klasik ADC okumanın yanında LCD’ye özel birkaç püf nokta var.
PRINT komutundan sonra konum bilgisi verilmediğinde komut doğrudan LCD’ye gönderiliyor.
Özellikle PRINT $FE ile ekran komutları, PRINT $0 ile de LCD’nin CGRAM tarafına özel karakter yazımı kullanılıyor.
Bu sayesinde ikinci satırda normal metin yerine özel hazırlanmış çubuk karakterleri gösterilebiliyor.
Bar göstergenin mantığı da hoş. 16 karakterlik bir satır doğrudan 16 ayrı blok gibi düşünülmüyor; her karakter kendi içinde parçalı dolum seviyesine sahip olacak şekilde kullanılıyor.
Böylece çubuk daha akıcı ilerliyor. Tam dolu karakterler, kısmi dolu karakter ve boş alanlar birleştirilerek satır tamamlanıyor.
Yani ekranda gördüğünüz seviye çubuğu, düz metin değil; CGRAM içine tanımlanmış özel karakterlerle oluşturulmuş dinamik bir gösterim.
ADC değerinin voltaja çevrilmesi neden böyle yapılmış?
Ölçüm döngüsünde ADC’den gelen 0-1023 arası değer, 0-5 Volt aralığına dönüştürülüyor.
Bunun için yazıda geçen VERİ = (VERİ * 500) / 1024 mantığı kullanılıyor. Buradaki 500 değeri, sonucu 0.00-5.00 V biçiminde gösterebilmek için pratik bir ölçekleme sağlıyor.
Proton tarafında doğrudan büyük çarpma yapınca WORD sınırına yaklaşma derdi olduğundan, bunun yerine VERİ = (VERİ */ 500) >> 2 biçimindeki kısaltılmış yöntem tercih edilmiş.
Bu iki açıdan güzel: Birincisi, kayan nokta kullanmadan iş çözülüyor.
İkincisi, PIC tarafında gereksiz bellek harcamadan voltaj hesabı yapılabiliyor.
Küçük işlemcilerle çalışırken bu tip sade matematik hamleleri çoğu zaman kodu hem hızlandırır hem de hafifletir.
Pratikte dikkat edilmesi gereken birkaç nokta
- ADC girişi için yalnızca zener eklemek çoğu durumda yeterli değildir; harici voltaj ölçecekseniz seri dirençli bölücü de kullanın.
- Harici referans kullanılmadığı için ölçüm doğruluğu doğrudan 5V beslemenin kararlılığına bağlıdır.
- Laboratuvar tipi hassas voltmetre beklememek gerekir; bu devre daha çok gösterge ve izleme amaçlıdır.
- Ses vumetresi yapılacaksa doğrultucu ve seviye uyarlama katı eklenmelidir.
- Girişteki filtreleme çok artırılırsa bar gösterge hantallaşır; çok azaltılırsa görüntü gereğinden fazla titreyebilir.
Bu yapıyla neler yapılabilir?
Basit bir giriş katı ile bu devre voltmetre olarak kullanılabilir. Küçük değişikliklerle akü voltaj göstergesi, su seviye göstergesi, sıcaklık bar grafiği, ışık seviyesi göstergesi, sinyal seviyesi ölçeri ya da ses göstergesi haline de gelir.
Buradaki esnekliği güzel yapan şey, PIC16F877A’nın ADC yapısı ile 2×16 LCD’nin birlikte çok sade ama anlaşılır bir arayüz oluşturması.
Proteus tarafında benzer PIC denemeleri yapmak isteyenler için PIC16F877 ve PIC18F örnekleri de fikir verebilir. Özellikle ADC, LCD ve basit gösterge mantığını bir arada görmek isteyenler için bu tip uygulamalar iyi bir başlangıç oluyor.
Kısacası bu çalışma, fazla parçaya boğmadan bar göstergeli LCD ölçüm mantığını anlatan güzel bir örnek.
Temel haliyle basit bir voltaj göstergesi, doğru giriş katıyla ise çok farklı ölçüm uygulamalarına dönüşebilecek esnek bir yapı sunuyor.
PicBasic/Proton kullananlar için de LCD üzerinde dinamik gösterge oluşturmanın güzel bir örneği olmuş.

3 özel karakter tanımla.
ADC’den genliği oku.
Ona göre LCD’ye bas.
Oldukça kolay..
Selam
bu devrenin hex dosyasını buraya yüklermisiniz . yardım edecek arkadaşlardan şimdiden teşekkürler …
Güzel projeymiş. Görseldeki kodu proton basic ile derledim ama denemedim. Osman usta, isiste veya gerçekte kontrol edilmesi lazım. Deneyip durumu bildirisiniz. İyi çalışmalar.
Hex dosyası: ADC-HEX.zip