PIC 12F675 ile Voltmetre
PIC 12F675 ile Voltmetre yapımı |
Mikrodenetleyici ile ilk çalışmalarıma 16f84 ile başlamıştım. İlk zamanlarda yaptığım devreler için yeterli olsa da, daha gelişmiş projelerde yetersiz kalmaya başlamıştı. 16F84’ün 13 adet dijital portu vardı ve 16f84 4mhz , 16f84a olan ise 10 mhz kristalle çalışabiliyordu. Microchip firmasının ürettiği çoğu mikrodenetleyicilerde işlem hızı osilatör frekansının 1 bölü 4’ü oluyor. Mikrodenetleyici kullanarak voltmetre yapmaya karar verdiğimde analog dijital çevirici portu olan mikrodenetleyici araştırması yaptım. 16f serisinden 16f876, 16f877 , 16f819 ve 16f88’ in proje için uygun olduğunu tespit ettim daha üst seviye olan 18f , 24f , 30f serilerinde de analog dijital çevirici vardı fakat sadece voltmetre için gereksiz olduğunu düşündüm. 16f serisini seçmemdeki sebep LCD ekranı çalıştırabilecek kadar port sayısının olmasıydı. Daha sonra port sayısı az olan fakat içinde analog dijital çevirici portu barındıran 12f675 i buldum. Bir LCD ekranı çalıştıracak kadar portu yoktu çözüm olarak port çoğaltmakta kullanılan 74ls164 entegresini düşündüm. LCD ekranı çalıştırmak için kullandığım yazılımlar hazır kodlar sağlıyordu. Fakat çalışma şeklini tam detaylarıyla bilmiyordum ve artık bu tip projelerde gerekliydi. Bu yazıda 74ls164 entegresinin ve hd44780 entegreli LCD ekranların çalışma şeklini anlatan basit bir uygulama bulacaksınız.
74ls164, mikrodenetleyici uygulamalarımızda port sayısı yetersiz kaldığında kullanabileceğimiz bir entegre. 2 adet port kullanarak 8 adet port elde edebiliriz. Aslında 74ls164 üzerinde birde reset pini var. Fakat ben denemelerimde reset pinini kullanmadan sorunsuz uzun süre çalıştırabildim. Internet üzerinde benzer uygulamalarla ilgili yaptığım araştırmalarda, her 8 bit’i yazdıktan sonra reset yapılması gerekebilir şeklinde bilgiye ulaştım. Bunun hızlı haberleşmelerde gerekli olduğunu düşünüyorum. Çok hızlı yazma yaparsanız kararsız işlem yapabilir.. Bu projede hd44780’in yapısından dolayı çok hızlı çalışmak gerekmiyor. Çalışma şeklini kısaca özetleyecek olursak: Bilgi pinin deki 1 veya 0 değerini saat pini 1 olup 0 olduktan sonra 8 bit çıkış pininin 0 bitine yazar. İkinci bilgi geldiğinde 1 bit sola kaydırır. Bu şekilde yedinci bite kadar yazar. Yedinci bitten sonra gelen bilgiyi tekrar 0 bitinden başlatır.
Yukarıda bahsettiğim reset konusu hızlı haberleşmelerde işte tam burada lazım oluyor. Yavaş haberleşmelerde sorunsuz 0 bitine tekrar geliyor. Alttaki hareketli resimde entegrenin çalışırken davranış şeklini izleyebilirsiniz.
HD44780 entegresi çoğu LCD’lerde standart olarak kullanılıyor. Bildiğim kadarıyla birkaç firmanın ürettiği LCD kontrol entegreleri de aynı komut setini kullanıyor. İsimlerini tam olarak hatırlamıyorum fakat bir ara çeşitli projelerde kullanmıştım ve aynı komut setinde sorun çıkartmamıştı. Siz yinede mikrodenetleyici uygulamalarınız için LCD ekran alacaksanız entegresinin hd44780 olduğunu kontrol edin. Entegrenin haberleşme için 8 bit paralel giriş ve çıkış pini, her komut gönderimi için 1 ve 0 olan EN pini, lcd ekranın hafızasına bilgi yazılıyor veya okunuyor komutu için RW pini, portlarda olan bilginin ekrana yazılması gereken bilgi mi yoksa ayarlar için mi olduğunu belirten RS pini vardır.
Diğer 3 pin VSS olan şase piniVDD olan +5 volt pini, VEE olan ise ekran görünürlük ayarı için olan pindir. VEE pinini 22 kiloohmluk ayarlı direncin orta ayağına bağlayın sol ayağını şaseye sağ ayağını +5 volta bağlayın buradan ayar yapabilirsiniz.
LCD ekrana yazı yazmak 2 farklı şekilde yapılıyor. Bunlar, seçiminize bağlı olarak 4 bit ve 8 bit kullanımı gerektiriyor. 8 bit haberleşme için 4 tane fazladan port kullanılıyor. Bence 4 bit haberleşme yeterli. Haberleşme seçimi 4 bit olarak yapılırsa, son 4 bit kullanılır. İlk önce LCD ekranın başlatılması ve ayarlarının yapılması gerekir. Bunun için ön ayar komutları gönderilir. Komut göndermek için 8 bit’lik sayının ilk önce üst dört biti daha sonra alt dört biti gönderilir. RS pini 0 iken porta komut yazılır daha sonra EN pini 1 ve 0 yapılır. 3 adet 3 , 2 adet 2 ,1 er adet 8,0,12,0 ve 6 gönderilir. Artık LCD’nin ayarları bitti. Şimdi sıra LCD ekrana yazı yazmaya geldi. Yyazmak için önce ekranının temizlenmesi yani RAM’in silinmesi gerekir. Bunun için RS=0 iken 0 ve 1 gönderilir, Daha sonra adres bilgisini göndermek gerekir. Adresleme haritası alttaki anlatımdaki şekildedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
Örnek birinci satır birinci sütuna yazmak için önce adres bilgisi gönderilir 128 in üst 4 biti olan 8 gönderilir daha sonra alt 4 biti olan 0 gönderilir. Bu işlemler RS 0 iken yapılır.
HD44780 in içinde dahili karakter tablosu bulunur. Yani ekrana yazı yazmak için her pikseli tek tek yazmak gerekmez. ASCII kod karşılığını göndermeniz yeterlidir. A harfini yazmak için RS 1 iken 65 in üst 4 biti olan 4 gönderilir. Daha sonra alt 4 biti olan 1 gönderilir.
HD44780’ e her bilgi gönderiminde 2 milisaniye beklenmesi gerekir. Bu süre RS , RW, EN pinlerinin durum değişikliklerinde de geçerlidir. RW pininin 0 durumu yazmak için 1 durumu ise okumak için kullanılır. Alttaki hareketli resimde yapılan işlemleri takip edebilirsiniz. Portlardaki değişiklikleri rahat takip etmeniz için resimleri yavaş değişecek şekilde ayarladım.
Portların renginin kırmızı olması “1” olması mavi olması “0” olması demektir. Hareketli resmi başlangıç resminden itibaren izlerseniz LCD ekrana gönderilen komutları sırayla takip edebilirsiniz.
Bu yazıda hem HD44780 hemde 74ls164 entegresinin çalışma şeklini anlatmaya çalıştım. Alttaki linklerde 12f675 , 74ls164 ve hd44780 lcd ile yapılmış 2 adet voltmetre uygulaması vardır. Bir tanesi reset kullanılarak yapılmıştır. Mikrodenetleyicide kullanılabilecek port kalmadığından dolayı 1 kanal olarak çalışır. İkinci olan anlatımda, reset kullanmadım. Resette kullandığım port boşta kaldığı için onuda ikinci analog kanal olarak kullandım. Bu yüzden iki kanallı oldu. Mikrodenetleyicinin programları proton basic de yazılmıştır. Siz eğer programı değiştirmek isterseniz açık kaynak kod olarak alttaki linklerden kaydedip değiştirerek kullanabilirsiniz.
Resetli bir kanal şeması baskılı devresi ve proton basic’de yazılmış program dosyası
resetli_bir_kanal.bas
resetli_bir_kanal.hex
resetli_bir_kanal.pdf
resetsiz iki kanal şeması, baskılı devresive proton basic’de yazılmış program dosyası
resetsiz_iki_kanal.bas
resetsiz_iki_kanal.hex
resetsiz_iki_kanal.pdf
Alttaki videolarda portlardaki değişimleri rahat takip edebilmek isterseniz, video gösterici programınızın ayar bölümünden daha yavaş ilerlemesini sağlayan ayarı değiştiriniz. Dikkatli takip ederseniz devrenin çalışma esaslarını tam olarak anlayabilirsiniz. Anlatım videolarını sayfaya ekleyecektim fakat boyutları büyük olduğu için sayfanın açılmasında sorun olur düşüncesiyle sayfa sonuna link olarak ekledim. Bilgisayarınıza kaydettikten sonra video oynatıcı programlarınızla izleyebilirsiniz. Eğer video dosyalarını izlemekte sorun olursa http://www.codecguide.com/ adresinden K-Lite Codec Pack yazılımını bilgisayarınıza kurun ve http://www.gomlab.com/eng/ adresindeki gomplayer video izleme programıyla izleyin.