avatar_ete

Digital POT (DS1804) veya (X9C103S) kontrolü nasıl yapılır.

Başlatan ete, 12 Mayıs 2023, 12:12:25

ete

Bir kaç gündür fiziki olarak digital pot ile uğraşıyorum.
Hemen yeri gelmiş iken belirteyim Piyasada satılan X9C103S digital pot'un sahtesi var.
Sahte olanında entegre üzerini kazımışlar. Muhtemelen farklı bir entegre olduğu içindir.
Sahte olan çalışıyor ancak 32 (0-31) adımda potu kontrol ediyor. Orjinal Pot larda 100 kademe (adım) var (0-99)

Bu iki farklı marka aslında bir birinin aynısı. Kontrol mekanizması işlevi her şeyi aynı.
KOntrol mekanizması zor değil. 3 adet kontrol pini var. Bunlar;
- CS yani Chip Select
- INC yani değer artırma veya eksilme pini
- UD yani Up(Yukarı) ve Down(aşağı) yada kısaca artırma yada eksilme pini.

CS pini LOW iken pot entegresi seçilmiş (Aktif) oluyor. Aynı pin HIGH da iken pasif konuma geçiyor.
INC pini HIGH dan LOW konumuna geçerken pot bir kademe değer değiştiriyor. Değiştirme yönünü ise UD pini belirliyor. Bu pin HIGH da ise pot yukarı doğru değer artışı, UD pini LOW da iken POT aşağı doğru değer azaltma işlemini yapıyor.

Pot içinde Non-volatile yani unutmayan bir hafızaya sahip. Pot un aldığı değeri içindeki hafızasına kayıt ettirebilmek için INC pini HIGH konumda iken CS pini LOW dan HIGH konuma geçirilmesi gerekiyor.
Şöyle bir bakınca kontrolü çok basit bir dijital pot gibi gözüküyor. Aslında öylede. Ama kullanmaya başlayınca bazı kritik durumlar ortaya çıktı.
Pot değeri yukarı yada aşağı yönde değiştirilmesinde hiç bir problem yok. Asıl sorun bu değerin kayıt edilmesinde. Belkide kayıt da sorun olmuyor ama bu entegreye voltaj verirken yada voltajı keserken bazı istenmeyen durumlar oluşabiliyor. Tespit edebildiğim pot çalıştırmada pinlerin aldığı durumlar nedeni ile yanlış kayıtlar yapıyor. Bu açıdan bakınca pot abuk subuk çalışıyor gibi gözükebilir. Özellikle bir değer verdirip onu kayıt ettirdikten sonra vaoltajı kesip yeniden aynı değerle açılıyormu diye baktığınızda çoğu zaman hüsrana uğruyor ve entegrenin kayıt almadığını sanıyorsunuz. Gerçekte durum böyle değil. Pot kayıt alıyor ama açılırken yada kapanırken bu kayıt değişiyor.
Peki bu sorunu aşmanın yolu nedir diye soracak olursanız basit iki adet pullup direnci devreye eklenmesi gerekiyor. Birisi CS pinine diğeride INC pinine. Hepsi bu. Bu dirençler, açılışta veya kapanışta işlemci pini lojik değerini kayıp ettiğinde INC ve CS pinlerini HIGH konumunda tutarak yanlış kayıt yapılmasını engelliyor ve her şey düzeliveriyor.

Kontrol çok basit olduğunda bunu program şeklinde vermeye gerek duymadım. Kontrol mekanizması şöyle;
İlk açılışta CS=1, INC=1 ve UD=1 şeklinde sistemi çalıştırıyorsunuz. Burada UD=0 da olabilir.
Şayet Yukarı doğru pot değeri artırılacak ise;
UD=1, CS=0 yapılıp 1us lik bir gecikme uyguluyorsunuz.
Ardından INC pini LOW yapılıp hemen ardından değer, pot a kayıt edilmesin diye CS=1 yapıyor ve 1us lik bir gecikme uyguluyorsunuz. Daha sonra INC=1 yapıp bir adımlık artışı sağlamış oluyorsunuz. Dikkat ederseniz değeri artırdık ama pota kayıt etmedik. Kayıt işlemini en sona bırakıyoruz. Arada birden fazla değer artırımı (veya eksiltmesi) yapabilirsiniz.
Değer eksiltmek için de bu sefer UD=0 yapıp CS=0 yapıyoruz. Ardından aynı INC pinine puls uyguluyoruz. Yani önce INC=0 yapılıyor ardından CS=1 yapılıp 1us lik gecikme veriliyor ve ardından yine INC=1 yapılıyor.
Bu şekilde değer artış yada azaltmaları tamamlandıktan sonra kayıt tuşuna basınca değerin kayıt edilmesi için ne yapılması gerektiğini söylemeden önce pinlerin durumuna bir bakalım isterseniz.
UD pini önemli değil LOW yada HIGH olabilir kayıt da etkili değil bu pin. INC pini HIGH da bekliyor. CS pini yine HIGH da bekliyor. Bu durumda CS pini önce LOW yapılıp ardından HIGH yapılması kayıt için yeterli olacaktır.Bu nedenle önce CS=0 yapıyoruz ve 1us gecikme ekliyoruz. Ardından CS=1 yapıp yine 1us gecikme ekliyoruz. Bu son gecikmeyi aslında 20 ms olarak uygulamak daha doğru olacak. Zira data sheetlerde kayıt peryodu 20 ms olarak belirtilmiş.Bu süre data sheet de CS deselect time olarak gösterilmiş.

Yine yeri gelmiş iken bazı tespitlerimi belirteyim.

Pot değerini bir Ohm-metre ile izleyebilirsiniz. Unutmayın bu pot normal pot gibi davranıyor ama akım taşıma kapasitesi yanlızca 4ma . Bu nedenle akım çekecek işlemleri bu pot ile yapmayın. Yaparsanız data sheet de nasıl yapacağınız gösterilmiş. Genelde bir opamp'ı voltaj takipçisi olarak pot çıkışına bağlamak bu sorunu çözüyor.

Pot değeri , Chip aktif iken (CS=0) görülebildiği gibi aynı chip pasif iken (CS=1) de görülebiliyor.

Değerin kayıt edilmesi koşulu olan INC pini HIGH da iken CS pini LOW dan HIGH konuma geçirilmesi şartında sıralama önemli. CS yi HIGH konuma alıp sonra INC pinini HIGH yaparsanız değer kayıt edilmiyor. Mutlaka önce INC=1 de olmalı daha sonra CS konum değiştirmelidir.
Bu nedenle, yukarıda açıkladığım değer değiştirme işleminde değer kayıt edilmesin diye INC=0 da iken CS=1 yaptık.

Umarım açıklamalarım birilerinin işine yarar.

Ete

Not: bazen direk kod'a bakmak işi daha anlaşılır hale getiriyor. O nedenle basit bir kod ekledim.
PAUSE 300
CS=1
INC=1
UD=1
PAUSE 50
BASLA:
'-------------------UP TUŞUNA BASILDI------------------------------------------
       IF UP=0 THEN
         UD=1:INC=1:CS=0:pauseus 1 
         INC=0:PAUSEUS 1:CS=1:pauseus 1:INC=1:PAUSEUS 1 'INC=0 İKEN ÖNCE CS=1 YAPILIR VE SONRA INC=1 YAPILIRSA POTA YAZMA OLMUYOR
         WHILE UP=0:WEND
         PAUSE 100
        ENDIF 'UD=1, CS=1 , INC=1 OLARAK ÇIKTIK    

'-----------------DOWN TUŞUNA BASILDI İSE---------------------------------------       
       IF DOWN=0 THEN
         UD=0:INC=1:CS=0:PAUSEUS 1
         INC=0:PAUSEUS 1:CS=1:pauseus 1:INC=1:PAUSEUS 1
         WHILE DOWN=0:WEND
         PAUSE 100
       ENDIF   'UD=0, CS=1 , INC=1 OLARAK ÇIKTIK            

'--------------------KAYIT TUŞUNA BASILDI İSE-----------------------------------        
        IF KAY=0 THEN   'UD=X , CS=1, INC=1 OLARAK GİRDİK                
           CS=0:PAUSE 1:CS=1 'INC=1 OLDUĞUNDAN DEĞER POT EPROMUNA YAZILMIŞ OLDU
           PAUSE 20
           WHILE KAY=0:WEND
           PAUSE 100
         ENDIF       'CS=1 , INC=1 UD=X OLARAK ÇIKTIK.          

        GOTO BASLA



Powered by EzPortal