mcp-41010 + 18f452 örnek kod uygulaması lazım...

Başlatan mustafa_cmbz, 12 Şubat 2009, 18:58:25

ipek

@ ergunbt

yararlı bir çalışma olmuş klavyene sağlık,

fakat her voltaj verdiğinde set değeri standart olur bu şekilde,oysa son bıraktığın pozisyonu pic eepromuna kaydetseydi daha pratik olurdu düşüncesi kaldı aklımda.

tekosis

#16
şu an bir devremde kullandığım kod aşağıdadır. set_pot() fonksiyonu içindeki pin tanımlamalarını değiştirerek kullanabilirsiniz.

gerçi sonradan farkettim kod proton için istenmiş ama olsun birinin işine yarar.

    unsigned int digital_pot_bilgi=0;// işaretsiz sekiz bitlik sayı

void set_pot()
{
  char digipot_fonk_sayaci=0;

      GPIO_Digital_Output(&GPIOC_ODR,_GPIO_PINMASK_0 | _GPIO_CFG_OTYPE_PP ); // DİJİTAL POT  CS pini
      GPIO_Digital_Output(&GPIOC_ODR,_GPIO_PINMASK_2 | _GPIO_CFG_OTYPE_PP ); // DİJİTAL POT  SCK pini  
      GPIO_Digital_Output(&GPIOC_ODR,_GPIO_PINMASK_3 | _GPIO_CFG_OTYPE_PP); // DİJİTAL POT  SI pini  

   digipot_cs=0; // dijital pot veri algılama aktif
   delay_ms(20);
   digipot_sclk=0;
   digipot_si=0;
   for(digipot_fonk_sayaci=16;digipot_fonk_sayaci>=1;digipot_fonk_sayaci--) // bu for döndüsünde mcp41010 dijital
   {
   digipot_si=0;           // potansiyometresine gönderilen iki bayttan 1. olan bundan sonra göndereceğimiz
   switch(digipot_fonk_sayaci) // baytın veri olduğunu bildiren komutu yolluyoruz.
   {
   case 16:  digipot_si=0; break;
   case 15:  digipot_si=0; break;
   case 14:  digipot_si=0; break;
   case 13:  digipot_si=1; break;
   case 12:  digipot_si=0; break;
   case 11:  digipot_si=0; break;
   case 10:  digipot_si=0; break;
   case 9 :  digipot_si=1; break;
   case 8 :  if(digital_pot_bilgi.B7==1){digipot_si=1;}; break;
   case 7 :  if(digital_pot_bilgi.B6==1){digipot_si=1;}; break;
   case 6 :  if(digital_pot_bilgi.B5==1){digipot_si=1;}; break;
   case 5 :  if(digital_pot_bilgi.B4==1){digipot_si=1;}; break;
   case 4 :  if(digital_pot_bilgi.B3==1){digipot_si=1;}; break;
   case 3 :  if(digital_pot_bilgi.B2==1){digipot_si=1;}; break;
   case 2 :  if(digital_pot_bilgi.B1==1){digipot_si=1;}; break;
   case 1 :  if(digital_pot_bilgi.B0==1){digipot_si=1;}; break;
   }
   delay_ms(1);
   digipot_sclk=1;
   delay_ms(1);
   digipot_sclk=0;
   }
   delay_ms(1);
   digipot_si=0;
   digipot_sclk=0;
   digipot_cs=1; // dijital pot veri algılama pasif
}

main()
{
 genel program ayarları
           "
           "
           "
    digital_pot_bilgi=255;//pot bilgisi 0-255 arasında ters orantılı değişiyor
    set_pot();
}
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.


ergunbt

Sayın ipek ben bu kodları yazarken mcp41010 u nasıl kodlayacağımızı yazmak istedim... doğru söylüyorsunuz... Bu kodları kullanan arkadaşlarıma balığı pişirip vermek istemedim oltayı verdim gerisi onların bileceği iş diye düşünüyorum ...umarım anlayışla karşılarlar....