Mcp4013 stabil çalışmama durumu

Başlatan fide, 13 Eylül 2018, 18:39:29

fide

Arkadaşlar merhaba.
Tps5410, lm358 ve Mcp4013 ile tasarladığı bir led sürücü var. Pcb montajını dün yaptım ve bir sıkıntı ile karşılaştım.

Besleme voltajı 12
3 seri 1500mah led pcb
50mah 700mah arası 64 adım akım kontrolü yapmak istiyorum.

Sıkıntı şu:
Devreyi işlemci bağlamadan led sürücü kısmını doğrudan çalıştırınca Mcp4013 32. Kadame (%50 pot değeri) ile çalışıyor ve 389mah ile devre çalışıyor.

İşlemci bağlayıp 0-64 kademe arasında pot değeri değişince 32. Kademeye kadar düzgün çalışıyor.
32 kademede sonra led sürücü saçmalıyor.

Mcp çipi çıkarıp digi pot değerinde 10k direnç bağladım. Led sürücü 690mah ile düzgün çalışıyor.

32 kademeden sonra led sürücü saçmalayınca skop probu ile Mcp4013 viper pine dokununca ledlerin kırpışması kesiliyor.

Digi pot ile ilgili bir sıkıntı var ama çözemedim. Özellikle 32 kademeden sonra saçmalamasına anlam veremedim.

Devreden 2 adet dizdim. İkisinde de aynı durum var.

Mcp ve lm 358 besleme fbead ve 78L05 ile besleniyor.
İşlemci tps5410 ve lm1117 ile besleniyor. Beslemeleri ldoları ayrı.

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

CLR

Muhtemelen Dpot'un pininden beklenenden daha fazla akım akıyordur onu kısarsan düzelir
Knowledge and Experience are Power

fide

@CLR teşekkür ederim.
170k direnç üzerinden opamp kazancını 17 ile 240 arasında ayarlıyor. 5 volt besleme var. Buna ek minimum kodda yani akımın en fazla olduğu yerde düzgün çalışıyor.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

onertan

Merhaba arkadaşlar,
MCP4013' PIC 16f628A ile kontrol etmeye çalışıyorum. Ama çözemediğim bir detay var. Manual dokümanında yazanları da uyguladım ama bir türlü direnç değerini değiştiremiyorum. Yardımcı olur musunuz? Kodum aşağıdaki gibidir.

#include <16F628A.h>
#fuses HS, NOWDT, NOPUT, NOLVP, NOCPD, NOPROTECT, NOBROWNOUT
#use delay(clock=20Mhz)

   
void main(){
      set_tris_a(0x00);
      set_tris_b(0xFF);

      output_low(pin_b4);  // direnç değerini arttıran buton ekledim
      output_low(pin_b3);  // direnç değerini azaltan buton ekledim
      output_high(pin_a2); // CS pini buraya bağlı
      output_low(pin_a3);  // U/D pini buraya bağlı
      
   
   while(TRUE){
      
      if(input(pin_b4) == 1)
      {
         output_high(pin_a3);
         delay_us(1);
         output_low(pin_a2);                 
         do{ 
            delay_us(1);
            output_low(pin_a3);
            delay_us(1);
            output_high(pin_a3);           
         } while (input(pin_b4));
         
         output_high(pin_a2);
      }
      
      if(input(pin_b3) == 1)
      {
         output_low(pin_a3);
         delay_us(1);
         output_low(pin_a2);         
         do{        
            delay_us(1);
            output_high(pin_a3);
            delay_us(1);
            output_low(pin_a3);
         } while (input(pin_b3));
            
         output_high(pin_a2);
      
      }
   
}
}