MCP4561-Kapak

MCP4561 Dijital Direnç Kütüphanesi – MikroC

This post is also available in: English (İngilizce)



MCP4561 Dijital Direnç -POT

  • MCP4561 dijital bir dirençtir daha doğrusu MCU ile ayarlanabilen bir trimpottur.
  • Bu dersimizde MCP4561 dijital direncin kullanımını ve MikroC de yazdığım kütüphanesini göreceğiz.
  • Bu direncin en büyük özelliği hem çok ufak olması hemde PIC gibi mcu lar ile kontrol edilebilmesi.
  • Çok farklı modelleri bulunmakta dikkat edilmesi gereken her modelin kullanılacağı iletişim protokolü ve yapısı farklıdır.
  • MCP4561 I2C ile kontrol edilir ve kalıcı belleğe sahiptir(Nonvolatile). Yani enerji kesilse de ayarladığınız direnç değeri değişmez.
  • MCP4561 5k-10k-50k-100k gibi kendi içinde tipleri vardır. Bunu seçerken gerekli çözünürlüğü de dikkate alın çünkü bu entegre 256 adımdan oluşur yani 10 k lık modeli alırsanız 10000ohm/256 = 39 ohm eder. Ayarlayacağınız direnç daima 39 ohm ve katları olabilir.
  • Ben bu projede 10 k lık modeli kullandım.
  • MCP4561 1 adet adresleme pinine sahiptir yani I2C ile kullanılacağından aynı hatta sadece 2 adet MCP4561 kullanılabilir.
  • MCP4561 kazanç direnci , kalibrasyon direnci yada güç kaynağı çalışmalarında kullanılabilir . Tabii ki gerekli şartlar yerine getirildiği takdirde. Bu direncin MCU tarafından ayarlanması en başta kalibrasyon vb. işlemleri yaparken devre kutusunu açma gibi işlemlerden bizi kurtarır. Ayrıca LCD ve GLCD lerde arka plan ışığı şiddeti ve kontrast gibi ayarları da MCU yapma olanağı sağlar.

 

MCP4561 Hafıza Haritası

Adres İşlevi Hafıza Tipi
00h Uçucu Wiper 0 RAM
01h Bu modelde kullanım dışıdır
02h Kalıcı Wiper 0 EEPROM
03h Bu modelde kullanım dışıdır
04h Uçucu TCON Register RAM
05h Status Register RAM
06h EEPROM Hücresi EEPROM
07h EEPROM Hücresi EEPROM
08h EEPROM Hücresi EEPROM
09h EEPROM Hücresi EEPROM
0Ah EEPROM Hücresi EEPROM
0Bh EEPROM Hücresi EEPROM
0Ch EEPROM Hücresi EEPROM
0Dh EEPROM Hücresi EEPROM
0Eh EEPROM Hücresi EEPROM
0Fh EEPROM Hücresi EEPROM
  • Uçucu Wiper , bu bölge kullanılarak yapılacak direnç ayarının geçici olduğunu belirtir. Enerji kesilince burada ki ayarlamada silinir.(burada arttırım ve azaltım yapılabilir)
  • Kalıcı Wiper , bu bölge kullanılarak yapılan direnç ayarının kalıcı olduğunu belirtir. Enerji kesilince burada ki ayarlar silinmez.( burada arttırım ve azaltım yapılamaz)
  • TCON – Terminal Kontrol bölgesinde yapılacak ayarlar da geçicidir.
  • Status bölgesinden sadece okuma yapılabilir
  • Geriye kalan tüm EEPROM hücreleri adından da anlaşılacağı üzere kalıcı bilgi tutabilir.

 

MCP4561 Kontrol Alanları

  • MCP4561 in 2 adet bölgesi bulunur.
    • Status Register
    • TCON Register
  • Bu bölgeleri okumak veya bu bölgelere veri yazmak şart olmasa da bazı durumlarda kullanılması gerekebilir.

 

Status Register

Status Register – Hafıza Adresi 05h
1 1 1 1 okuma-0 okuma-x okuma-x
Ayrılmış Alan EEWA WL0 WP
7.bit 6.bit 5.bit 4.bit 3.bit 2.bit 1.bit 0.bit
  • Bu bölgeden sadece okuma yapılabilir hiçbir şekilde yazma yapılamaz
  • Bu bölgedeki bilgiler EEPROM işlemlerinde kullanılabilir
    • EEWA : Bu bit MCP4561 içerisinde ki EEPROM un müsait olup olmadığını bildirir. Bu bit okunarak EEPROM a yazma işlemleri yapılır yada bekletilir
      • 1 ise : EEPROM meşgüldür.
      • 0 ise : EEPROM yeni işlem için müsaittir.
      • NOT: EEPROM meşgül olduğu durumlarda diğer geçici (RAM) alanlara okuma ve yazma yapılabilir.
    • WL0 – Wiper Lock : Direnc üzerinde ayar yapılmasını engeller. Ancak ben bu özelliği kullanmıyorum bu sebeple açıklama yapmak gereği duymadım çok işlevli-gerekli bir şey değildir.
    • WP : Bu bit MCP4561 in EEPROM un kilitli olup olmadığını bildirir.
      • 1 ise : EEPROM kilitlidir.
      • 0 ise : EEPROM kilitli değildir.
  • Ayrılmış alan üretici tarafından gelecek için ayrılmıştır.
  • 2.bit ise bu modelde işlevsizdir bazı dual modellerde kullanılır.

 

TCON – Terminal Kontrol Register

TCON – Terminal Kontrol Register -Hafıza Adresi 04h
o/y-1 o/y-1 o/y-1 o/y-1 o/y-1
GCEN R0HW R0A R0W R0B
8.bit 7.bit 6.bit 5.bit 4.bit 3.bit 2.bit 1.bit 0.bit
  • o/y = okuma-yazma yapılabilir
  • Bu registerde hem okuma hem yazma yapılabilir ancak geçici bellekte bulunduğundan yapılan ayarlamalar yeniden başlatılınca silinecektir.
  • Bu bölge dijital direnç pinlerini açıp kapatmaya yarar ancak yukarıda görüldüğü gibi varsayılan olarak tüm pinler aktif gelmektedir.
    • GCEN : Bu bit I2C hattındaki tüm MCP4561 lerin aynı anda kontrol edilmesini sağlayan “Genel Komutları” alıp almayacağını belirler
      • 1 ise : Komutları alır
      • 0 ise : Komutları almaz
      • Not : Varsayılan değer 1 dir.
    • R0HW : Bu bit MCP4561 in donanımını kontrol eder
      • 1 ise : MCP4561 zorunlu kapatmayı yapmaz ( voltaj düştüğünde shutdown yapmaz)
      • 0 ise : MCP4561 zorunlu kapatmayı yapar ( voltaj düştüğünde shutdown yapar)
      • Not : Varsayılan değer 0 dır.
    • R0A : Bu bit P0A pininin bağlantısını sağlar yada koparır
      • 1 ise : Bağlıdır
      • 0 ise : Bağlı değildir
      • Not : Varsayılan değeri 1 dir.
    • R0W : Bu bit P0W pininin bağlantısını sağlar yada koparır
      • 1 ise : Bağlıdır
      • 0 ise : Bağlı değildir
      • Not : Varsayılan değeri 1 dir.
    • R0W : Bu bit P0B pininin bağlantısını sağlar yada koparır
      • 1 ise : Bağlıdır
      • 0 ise : Bağlı değildir
      • Not : Varsayılan değeri 1 dir.

 

MCP4561 Çalışma Protokolleri

  • Bu bölümde MCP4561 in adresleme sistemini ,genel işlemler,okuma-yazma sistemini ve wiper arttırma-azalma işlemlerini göreceğiz.
  • Burada görülecek şablonlara mutlaka uyulmalıdır.

 

MCP4561 Adres Sistemi

MCP4561-Adres-Semasi
MCP4561 Adres Şeması
  • MCP4561 de 1 adet adres pini bulunur.(A0) bu sebeple bu pin 1 yada 0 yapılarak adres belirlemesi yapılabilir.( aynı I2C hattında sadece 2 tane MCP4561  kullanılabilir)
  • Adres sistemi yukarı da görüldüğü gibi 010111+A0 (standart adres+diğer adres pinleri+A0) şeklindedir. A0 dan önce olan bölüm sabittir A0 a göre 1 yada 0 olur
  • I2C protokolünde her zaman start ile işlem başlar 7 bit adres+1 bit işlem = toplam 8 bit bilgi gönderilir ve MCP4561 den onaylandı (ACK 1) yada onaylanmadı (NACK 0) işareti gelir. Bu şekilde işlem yapılacak parça seçilir.
  • NOT: MCP nin diğer modellerinde birden fazla Adres pini bulunabilir yukarıda örnekte sadece 0101 kısmı daima sabittir. Ancak MCP4561 de A2 ve A1 olmadığından bunlar 1 kabul edilir sadece A0 değişkendir. Diğer modellerde daha fazla adres pini bulunuyorsa adres buna göre değerlendirilmelidir.

 

MCP4561 Genel Komut Gönderim Sistemi

Genel Komutlar
7 bit Komut İşlev
100000D Wiper alanına veri yazar – Geçici Bellek Genişletilmiş komut
110000D TCON alanına veri yazar – Geçici Bellek Genişletilmiş komut
1000010 Wiper Değerini Arttırır Genel komut
1000100 Wiper Değerini Azaltır Genel komut
  • Genel komutlar I2C hattındaki tüm MCP4561 ler üzerinde aynı anda işlem yapmak için kullanılırlar.
  • Yapılabilecek işlemler sadece yukarıdaki tablo ile sınırlıdır bunun dışında işlem yaptırlmaya çalışılırsa hata sonucu alınacaktır.
  • Adres daima “00000000” şeklinde olmalıdır.
  • Veri yazma komutlarında “D” 9. veri bitidir. Detayı aşağıda anlatılacaktır.
  • Genel komut sistemi kendi içerisinde 2 ye ayrılır
    1. Genel Komut Sistemi
    2. Genişletilmiş Genel Komut Sistemi

 

Genel Komut Sistemi

MCP4561-Genel-Komut-Semasi
MCP4561 Genel Komut Şeması
  • Sadece 7 bitlik komut gönderimi yapılır veri gönderilmez.
  • Wiper arttırma ve azaltma işleminde kullanılır.
  • 7 bit komut sonrasında ki “0” biti sabittir.

 

Genişletilmiş Genel Komut Sistemi

MCP4561-Genisletilmis-Genel-Komut-Semasi
MCP4561 Genişletilmiş Genel Komut Şeması
  • Genel komut sistemi içerisinde veri yazma işleminin yapılması için kullanılır.
  • Buna göre TCON alanına ve Wiper alanına veri yazılabilir fakat bu alanlar geçici bellek alanlarıdır. Yani yazılan veri enerji kesilince silinecektir.
  • Bu bölümde farklı olarak 9 . veri biti bulunur bunun sebebi şudur;
    • MCP4561 0-256 arası olmak üzere 257 adet kademeden oluşur .
    • Dolayısı ile MCP4561 de direnç değeri belirlerken en az “0” en fazla “256” değeri veri olarak girilebilir.
    • Sizinde fark ettiğiniz gibi 256 değeri 8 bite sığmaz dolayısı ile 9 bit bir yer gereklidir.
    • Bu sebeplerden dolayı eğer Wiper alanına 256 değeri yazacaksak 9. bite taşan kısım 7 adet komut bitinin sonuna eklenerek gönderilmelidir.
    • Normal şartlarda eğer 8 bite sığan veri gönderilirse 9.veri biti “0” olmalıdır zaten yalnızca 256 verisi gönderileceği zaman 9.veri biti = 1 olur diğer tüm veri bitleri “0” olacaktır.  256 = 00000001 00000000  -> 16 bit binary gösterimi

 

MCP4561 İşlem Komutları

İşlem Komutları
Komut (binary) İşlev
00 Veri Yazma
01 Wiper Arttırma
10 Wiper Azaltma
11 Veri Okuma
  • Bu bölümde verilen komutlar her MCP4561 için özeldir yani adres seçimi yapılan MCP4561 için geçerlidir.
  • Buradaki tüm işlemlerde mutlaka ilk olarak MCP4561 adresi seçilir ardından işlem yapılacak Hafıza Adresi seçilir.

 

MCP4561 Veri Yazma İşlemi

MCP4561-Veri-Yazma-Semasi
MCP4561 Veri Yazma Şeması
  • Yazma işlemi için ilk olarak işlem yapılacak MCP4561 in adresi gönderilerek seçim yapılır
  • Veri yazma işleminin yapılacağı Hafıza adresi ve komut birleştirilir eğer yazılacak veri 256 ise D8 biti 1 yapılır
  • Yazdırılacak veri 256 dan küçük ise D8=0 yapılır ve onaydan sonra 8 bitlik veri gönderilir aksi halde 8 bitlik bölüm sıfır olur.
  • İşlem kesintiye uğramadan devam ettirilecekse STOP – P gönderilmez onaydan sonra yeniden Hafıza Adresi ve komut kombinasyonu gönderilir ve yeniden veri yazılabilir.
  • İşlem bitirileceği zaman STOP – P  işareti ile sonlandırılır.
  • İşlem sonlandırıldıktan sonra yeniden yazma yapılacaksa en baştan başlanarak MCP4561 seçimi yapılmalıdır.

 

MCP4561 Veri Okuma İşlemi

MCP4561-Veri-Okuma-Semasi
MCP4561 Veri Okuma Şeması
  • I2C protokolünde okuma yazma kadar basit ve tek düze değildir biraz daha karışık bu sebeple bazı durumlarda hatalar olmasına sebep olabiliyor.
  • İlk olarak MCP4561 in adresi yazma yapılacak şekilde seçilir
  • Okuma yapılacak RAM adresi okuma komutu ile (binary 11) seçilir
  • Tekrar başlat yapılır ve bu sefer MCP4561 in adresi okuma yapılacak şekilde seçilir
  • Clock gönderildikçe veri gelmeye başlar her veri paketi sonunda ACK gönderilirse veri gelmeye devam eder NACK gönderildiğinde iletişim kopar STOP ile durur.
  • Daha öncede belirttiğim gibi MCP4561 256 değerini alabiliyordu. Burada da yine 256 değeri ihtimaline karşı D8 bitini görüyoruz yani 9. veri biti. Okuma yapıldığında bu sebeple ilk gelen 7 biti görmezden geliyoruz. 8.biti okuyup onay gönderdikten sonra gelen 8 bit bizim için değerli veri taşımaktadır. Yani toplamda bizi ilgilendiren 9 bittir.
  • Okuma işleminde veriler gelmeye başladığında yukarıdaki çizimde de göreceğiniz üzere ACK veya NACK işaretleri bu sefer MCP4561 den değil bizim tarafımızdan (MCU dan) MCP4561 e gönderilir okuma işleminin de bir farkı budur bu sadece veri gelmeye başladığında olur adres gönder vb. bölümlerde değil.
  • Veri okuma sonunda NACK gönderilmedikçe veri okunmaya devam edilir . I2C protokolü gereği MCP4561 her okumada işaretçisini bir arttırıp bir sonraki adresteki veriyi okuyacaktır.

 

MCP4561 Wiper Arttırma İşlemi

MCP4561-Wiper-Arttirma-Semasi
MCP4561 Wiper Arttırma Şeması
  • Wiper trimpotlar ayar yapılan orta pini temsil eder. Dolayısı ile burada yapılan işlem MCP4561 içindeki bu ayar pinini arttırmaktır.
  • MCP4561  sistemi gereği 257 kademeye sahiptir.(0-256) dolayısı ile her kademe de 39 ohm artış yada azalma olacaktır. ( trimpotun 3 pini olduğunu unutmayın nereden ölçüm yaptığınıza göre direnç değeri azalıp artabilir.)
  • Wiper arttırma işleminde sadece geçici wiper belleğindeki (00h) bilgi arttırılıp azaltılabilir başka alanlarda bu işlem yapılamaz.
  • Bir kere MCP4561 in adresi gönderildikten sonra arka arkaya yukarıda ki gibi wiper arttırma komutu gönderilerek sürekli artış sağlanabilir.

 

MCP4561 Wiper Azaltma İşlemi

MCP4561-Wiper-Azaltma-Semasi
MCP4561 Wiper Azaltma Şeması
  • Wiper trimpotlar ayar yapılan orta pini temsil eder. Dolayısı ile burada yapılan işlem MCP4561 içindeki bu ayar pinini azaltmaktadır.
  • MCP4561  sistemi gereği 257 kademeye sahiptir.(0-256) dolayısı ile her kademe de 39 ohm artış yada azalma olacaktır. ( trimpotun 3 pini olduğunu unutmayın nereden ölçüm yaptığınıza göre direnç değeri azalıp artabilir.)
  • Wiper azaltma işleminde sadece geçici wiper belleğindeki (00h) bilgi arttırılıp azaltılabilir başka alanlarda bu işlem yapılamaz.
  • Bir kere MCP4561 in adresi gönderildikten sonra arka arkaya yukarıda ki gibi wiper azaltma komutu gönderilerek sürekli azalış sağlanabilir.

 

MCP4561 Pin İşlevleri

MCP4561-Pinler
MCP4561 Pinler

 

Pin İsim İşlev
1 A0  I2C Adresleme Pini
2 SCL I2C Clock Pini
3 SDA I2C Data Pini
4 Vss GND
5 P0A Ayarlı Direnç 1. Bacak
6 P0W Ayarlı Direnç Ayar Pini- WIPER
7 P0B Ayarlı Direnç 2. Bacak
8 Vdd Besleme  +1,8V / +5V
  • Yukarıda yer alan ve kütüphanede sürekli anılacak olan WIPER ayarlı dirençlerde ayar yapılan orta bacağı temsil eder.
  • Adresleme pini +5 volt yada GND ye bağlanarak 1 ve 0 yapılır bu şekilde 1 hatta 2 tane MCP4561 kullanılabilir.

 

MCP4561 Dijital Trimpot Devresi

  • Bu bölümde MCP4561 için gerekli temel devreyi göreceğiz.
  • Zaten pek fazla bir parçaya ihtiyaç duymamaktadır nihayetinde bir trimpottur.

MCP4561 Devre Şeması

MCP4561-Devre-Semasi
MCP4561 Devre Şeması
  • Devre şemasında 2 adet MCP4561 in adresleme pinlerine dikkat edin. Biri “1” yapılırken diğeri “0” yapıldı.
  • I2C hatları mutlaka 20k ile pull-up yapılmalıdır.
  • A-WIPER-B ucları direnç çıkışlarıdır. Bir trimpotun 1-2-3 bacağı gibi düşünülebilir

 

Gerekli Malzemeler

  1. MCP4561
  2. 100nf kondansatör
  3. 20 k direnç – 2 adet
  4. Deneme devreleri için DIP çevirici

 

Devrenin Yapılışı

MCP4561-Devre1
MCP4561 Devre Görünümü
  • Devre basit olduğu için boarda kurarak denedim.
MCP4561-Devre2
MCP4561 Devre Görünümü 2
  • DIP çevirici kullanmak deneme devrelerinde büyük kolaylık sağlamaktadır.
dip-cevirici
DIP Çevirici
  • MCP4561 in boyut olarak büyük avantajları vardır.

 

MCP4561 MikroC Kütüphanesi

  • MCP4561 I2C protokolü ile çalışmaktadır bu sebeple daha önce yazdığım I2C protokolü ile kütüphaneyi hazırladım. I2C Kütüphanesini buradan indirip projenize dahil etmelisiniz.
  • Daha önce olduğu gibi bu kütüphanede GPL ile açık kaynak kod olarak yayınlanmıştır. Kütüphaneyi indirip inceleyebiliriz değişiklikler yapabilirsiniz.
  • MCP4561- 10 k lık modelde  257 kademe var demiştik ve her kademe 39 ohm dur.
  • WIPER fonksiyonları trimpotlardaki orta pinin hareketi temsil eder.

Fonksiyonlar

  • Fonksiyonların tamamı kullanıcı fonksiyonudur.
  • Bazı fonksiyonlar kullanıcıya rahatlık sağlamak amacı ile oluşturuldu.

Genel Komut Fonksiyonları

  • Bu bölümdeki fonksiyonlar aynı I2C hattında bulunan tüm MCP4561 leri aynı anda kontrol etmeye yarar.
  • Komutları MCP4561.h dosyasında bulabilirsiniz.

 

MCP4561_GENEL_KOMUTLAR Fonksiyonu

Fonksiyon : unsigned char MCP4561_GENEL_KOMUTLAR(unsigned char KOMUT)

Amacı : Genel komutları işletir. I2C hattındaki MCP4561 lerde WIPER artttırma ve azaltma yapar

Parametreler :

  • KOMUT : Uygulanacak komut buraya yazılır

Kullanım Şekli :

MCP4561_GENEL_KOMUTLAR(WIPER_ARTTIR);

Geri Bildirim :

  • 1 gelirse işlem başarılı demektir

 

MCP4561_GENISLETILMIS_GENEL_KOMUTLAR Fonksiyonu

Fonksiyon : unsigned char MCP4561_GENISLETILMIS_GENEL_KOMUTLAR(unsigned char KOMUT,unsigned char VERI)

Amacı : Genel komutları işletir. I2C hattındaki MCP4561 lerin TCON alanına ve WIPER değerini geçici bölgesine yazmaya yarar

Parametreler :

  • KOMUT : Uygulanacak komut buraya yazılır
  • VERI : Yazılacak veri buraya yazılır

Kullanım Şekli :

MCP4561_GENISLETILMIS_GENEL_KOMUTLAR(TCON_REGISTER_DEGERI,0b11001100)

Geri Bildirim :

  • 1 gelirse işlem başarılı demektir.

 

İşlem Fonksiyonları

 

MCP4561_VERI_OKUMA Fonksiyonu

Fonksiyon : unsigned int MCP4561_VERI_OKUMA(unsigned char MCP4561_ADRESI,unsigned char RAM_ADRESI)

Amacı : Belirtilen hafıza alanında veri okur

Parametreler :

  • MCP4561_ADERSI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır
  • RAM_ADRESI : Okuma yapılacak hafıza adresi yazılır

Kullanım Şekli :

MCP4561_VERI_OKUMA(0,5);

Geri Bildirim :

  • Okunan veriyi geri bildirim olarak gönderir. 0-256 arası bir değer döndürür.

 

MCP4561_DIRENC_DEGERI_OKU Fonksiyonu

Fonksiyon : unsigned int MCP4561_DIRENC_DEGERI_OKU(unsigned char MCP4561_ADRESI,unsigned char RAM_ADRESI)

Amacı : Belirtilen wiper noktalarından direk olarak direnç değeri okur

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır
  • RAM_ADRESI : Okuma yapılacak hafıza adresi yazılır

Kullanım Şekli :

MCP4561_DIRENC_DEGERI_OKU(0,5);

Geri Bildirim :

  • Veriyi direkt olarak ohm değerinde bildirir.

 

MCP4561_STATUS_OKUMA Fonksiyonu

Fonksiyon : unsigned char MCP4561_STATUS_OKUMA(unsigned char MCP4561_ADRESI)

Amacı : Status registerini okur

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır

Kullanım Şekli :

MCP4561_STATUS_OKUMA(0);

Geri Bildirim :

  • Status registerinden okunan veriyi geri döndürür

 

– MCP4561_VERI_YAZMA Fonksiyonu

Fonksiyon : unsigned char MCP4561_VERI_YAZMA(unsigned char MCP4561_ADRESI,unsigned char RAM_ADRESI,unsigned int VERI)

Amacı : Seçilen hafıza adresine veri yazar

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır
  • RAM_ADRESI : Okuma yapılacak hafıza adresi yazılır
  • VERI : Yazılacak veriler bu değişkene yüklenir( wiper alanlarına yazma yapılacaksa 0-256 arası değer yazılabilir)

Kullanım Şekli :

 MCP4561_VERI_YAZMA(0,5,125);

Geri Bildirim :

  • 1 gelirse işlem başarılı demektir.

 

– MCP4561_DIRENC_DEGERI_YAZ_GECICI Fonksiyonu

Fonksiyon : void MCP4561_DIRENC_DEGERI_YAZ_GECICI(unsigned char MCP4561_ADRESI,unsigned int DIRENC_DEGERI_OHM)

Amacı : Girilen direnç değerini ( ohm olarak ) geçici direnç bölgesi yazar

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır
  • DIRENC_DEGERI_OHM : Ayarlanmak istenen direnç değeri ohm olarak yazılır

Kullanım Şekli :

unsigned char MCP4561_DIRENC_DEGERI_YAZ_GECICI(0,39);

Geri Bildirim : Geri bildirim yapmaz

 

– MCP4561_DIRENC_DEGERI_YAZ_KALICI Fonksiyonu

Fonksiyon : void MCP4561_DIRENC_DEGERI_YAZ_KALICI(unsigned char MCP4561_ADRESI,unsigned int DIRENC_DEGERI_OHM)

Amacı : Girilen direnç değerini ( ohm olarak ) kalıcı direnç bölgesi yazar

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır
  • DIRENC_DEGERI_OHM : Ayarlanmak istenen direnç değeri ohm olarak yazılır

Kullanım Şekli :

unsigned char MCP4561_DIRENC_DEGERI_YAZ_KALICI(0,39);

Geri Bildirim : Geri bildirim yapmaz

 

WIPER Fonksiyonları

 

– MCP4561_WIPER_BASLANGIC Fonksiyonu

Fonksiyon : unsigned char MCP4561_WIPER_BASLANGIC(unsigned char MCP4561_ADRESI)

Amacı : Wiper ayarı yapmak için ilk olarak bu fonksiyon çağırılır

Parametreler :

  • MCP4561_ADRESI : Okuma yapılacak MCP4561 adresi yazılır. A0 pinine göre 0 yada 1 değeri alır

Kullanım Şekli :

MCP4561_WIPER_BASLANGIC(0);

Geri Bildirim :

  • 0 gelirse işlem başarısızdır

 

–  MCP4561_WIPER_ARTTIRMA Fonksiyonu

Fonksiyon : unsigned char MCP4561_WIPER_ARTTIRMA()

Amacı : Wiper ı bir kademe arttırır

Parametreler : Bulunmuyor

Kullanım Şekli :

MCP4561_WIPER_ARTTIRMA();

Geri Bildirim :

  • 1 gelirse işlem başarılıdır.

 

–  MCP4561_WIPER_AZALTMA Fonksiyonu

Fonksiyon : unsigned char MCP4561_WIPER_AZALTMA()

Amacı : Wiper ı bir kademe azaltır

Parametreler : Bulunmuyor

Kullanım Şekli :

MCP4561_WIPER_AZALTMA();

Geri Bildirim :

  • 1 gelirse işlem başarılıdır.

 

– MCP4561_WIPER_SONLANDIR Fonksiyonu

Fonksiyon : void MCP4561_WIPER_SONLANDIR()

Amacı : Wiper ayar işlemini sonlandırır

Parametreler : Bulunmuyor

Kullanım Şekli :

MCP4561_WIPER_SONLANDIR();

Geri Bildirim : Geri bildirimde bulunmaz

 

Fonksiyonların Uygulanması

  • Uygulama kısmında direnç değeri yazma ve arttırmayı göreceğiz.
  • Burada önemli birkaç nokta bulunmaktadır.
    • Kalıcı wiper bölümüne yazılan değer arttırılıp azaltılamaz sadece geçici wiper bölümündeki değer arttırılıp azaltılabilir
    • Eğer enerji kesilmeden kalıcı bölüme yazdığımız değer geçerli olsun istiyorsan bu değeri aynı zamanda geçici bölüme de yazmalıyız.
//I2C protokolü için pin ayarlamaları
 sbit I2C_SDA at RB6_bit;
 sbit I2C_SCL at RB7_bit;

 sbit I2C_SDA_VERI at LATB6_bit;//27.01.2019 güncellemesi ile eklendi

 sbit I2C_SDA_Direction at TRISB6_bit;
 sbit I2C_SCL_Direction at TRISB7_bit;
 
void  main()
{

    unsigned int deger=0;
    CMCON=7;

    MCP4561_DIRENC_DEGERI_YAZ_KALICI(0,5000);//5000 ohm yani 5k
    
    deger=MCP4561_DIRENC_DEGERI_OKU(0,2);
     
    MCP4561_DIRENC_DEGERI_YAZ_GECICI(0,deger);
    

}
MCP4561-5k-Direnc
MCP4561  5k direnç ayarlandı
  • Yukarıdaki örneği açıklamak gerekirse;
    • İlk olarak kalıcı wiper alanına 5k değerini yazdırdık . Ancak enerji kesilmedikçe değer 5 k olmayacaktır.
    • Bunu sağlamak için aynı değer geçici wiper bölümüne de yazmamız gerektiğinden devamında değer geçici wiper alanına yazıldı
    • Direnç değeri okumanın anlamı ise daha önceden kalıcı wiper bölümüne veri yazılmış ise bunu alıp okumaktır.
//I2C protokolü için pin ayarlamaları
 sbit I2C_SDA at RB6_bit;
 sbit I2C_SCL at RB7_bit;

 sbit I2C_SDA_VERI at LATB6_bit;//27.01.2019 güncellemesi ile eklendi

 sbit I2C_SDA_Direction at TRISB6_bit;
 sbit I2C_SCL_Direction at TRISB7_bit;
 
void  main()
{

    unsigned int deger=0;
    CMCON=7;

    MCP4561_DIRENC_DEGERI_YAZ_KALICI(0,5000);
    
    deger=MCP4561_DIRENC_DEGERI_OKU(0,2);
     
    MCP4561_DIRENC_DEGERI_YAZ_GECICI(0,deger);
    
    
    MCP4561_WIPER_BASLANGIC(0);
    MCP4561_WIPER_ARTTIRMA();
    MCP4561_WIPER_ARTTIRMA();
    MCP4561_WIPER_SONLANDIR();
    
    
    deger=MCP4561_DIRENC_DEGERI_OKU(0,0);
    MCP4561_DIRENC_DEGERI_YAZ_KALICI(0,deger);
    

}
MCP4561-Wiper-Arttirma
MCP4561  wiper 2 Kademe arttırıldı.
  • Yukarıda bu sefer geçici wiper alanındaki 5k değeri  2 kez arttırıldı yani 5000+39+39 ohm oldu.
  • Ardından işlem sonlandırıldı fakat bu arttırmanın kalıcı olması için bu sefer geçici bellekten okuma yapıldı ve kalıcı wiper alanına yazıldı böylece yapılan 2 kademe arttırım işlemi kalıcı hale gelmiş oldu.
  • Yukarıda değer 5,04k olarak görülmektedir. 5,04×1000=5040 ohm
  • 2 kademe arttırdık yani 39×2=78 ohm
  • 5040+78 = 5118 ohm / 1000 = 5,11 k oluyor , zaten ölçü aleti de bu sonucu vermektedir.

Çalışma Videosu


Sonuç

  • MCP4561 in çalışma sistemini öğrendiniz. Artık kendi kodlarınızı yazabilir yada benim kütüphanemi kullanabilirsiniz.
  • MCP4561 bir çok alanda kullanılabilir özellikle kalibrasyon gerekli olan yerlerde oldukça faydalı olacaktır ayrıca ekran parlaklığı gibi ayarları devre kutusunu açmadan yapabilirsiniz.
  • Bu kütüphane I2C ile yazıldığından benim yazmış olduğum I2C yi indirip projenize dahil etmeniz gerekmektedir.
  • Sorularınızı “Soru-Cevap” Forumuna sorabilirsiniz.

Kütüphane Dosyaları

 


Yararlanılan Kaynaklar


 

This post is also available in: English (İngilizce)

About ERCAN KOÇLAR

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)