DS1868 dijital potansiyometre kullanımı hakkında

Başlatan zamzam23, 20 Temmuz 2011, 16:29:17

zamzam23

#15
10.55TL diyor. bu kadar pahalı mı entegreler? 2 tane dijital potansiyometre lazım bana.markası önemli değil. ds1868 in hazır kütüphanesi var mufitsozen arkadas da hazır yardım edecek kütüphaneyi olusturmamda. onun ıcın bunu kullanyım demiştim

H@S@N

ustam kod işinden pek anlamam ama arkadaşımızında dediği pt2258 var.6 kanal volume kontrol.gerçi sadece ses sinyali içinmi yapılmış yoksa dijital potansiyometremi bilmiyorum.ama her kanalı ayrı ayrı kontrol etmek mümkün.arıza için gelen bi ses sisteminde buna rastlamıştım..
satılık STM32F4-Discovery kit...

mufitsozen

Alıntı yapılan: zamzam23 - 22 Temmuz 2011, 16:56:09
10.55TL diyor. bu kadar pahalı mı entegreler? 2 tane dijital potansiyometre lazım bana.markası önemli değil. ds1868 in hazır kütüphanesi var mufitsozen arkadas da hazır yardım edecek kütüphaneyi olusturmamda. onun ıcın bunu kullanyım demiştim

sayin @zamzam23 driverlardaki DS1868.c dosyasina yeni bir fonksiyon ekledim. yeni driver'a DS1868x2.c adini verdim

bu chip icin orijinal driver RST1, DI, ve CLK uclarini kullaniyordu (bunlarda RB0, RB1 ve RB2) bende RST2 diye yeni bir degisken olusturdum, RST2 olarak RB3 pinini sectim ve orijinal set_pot fonkisyonunu iki tane ayri fonksiyona cevirdim. set_pot_A ve set_pot_B

bende bu chip olmadigi icin, vede bugun ofisten erken cikmam gerektiginden deneyemedim. Fakat yapilan degisiklik cok basit eger cok basit bir ayrinti vs atlamamissam calismasi gerekir. set_pot fonksiyonunu set_pot_A ve set_pot_B olarak iki ayri fonksiyona cevirdim (cok karisik ve buyuk bir degisiklik yapmamak icin) Simdi DI ve CLK uclarini iki dijital direnc icinde ayni pinlere bagliyoruz, pot_a'yi degistirmek icin RST1'i pot_b'yi degistirmek icin RST2'yi kullaniyoruz.

RB3 ayni zamanda VLP pini oldugu icin #fuses'da NOVLP demeniz lazim(gerci CCS_C default olarak boyle set ediyor ama, yinede isinizi saglama alin.

bu degisiklikleri denedikten sonra bir problem olursa pazartesi yine bakariz. Umarim gozumden basit bir detay kacmamistir.


///////////////////////////////////////////////////////////////////////////
////   Library for Two Dallas DS1868                                   ////
////                                                                   ////
////   init_pots ();    Sets all of the pots to 0                      ////
////                                                                   ////
////   set_pot_A (pot_num, new_value);  Sets pot_A pot_num to new_value////
////   set_pot_B (pot_num, new_value);  Sets pot_B pot_num to new_value////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services           ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////

#define RST1 PIN_B0
#define CLK PIN_B1
#define DI PIN_B2
#define NUM_POTS 2

#define RST2 PIN_B3

BYTE pots_A[2];

set_pot_A (int pot_num, int new_value) {
   BYTE i;
   BYTE cmd[3];

   if (pot_num >= NUM_POTS)
      return;

   pots_A[pot_num] = new_value;

   cmd[0]=pots_A[0];
   cmd[1]=pots_A[1];
   cmd[2]=0;

   for(i=1;i<=7;i++)
     shift_left(cmd,3,0);

   output_high(RST1);
   delay_us(2);

   for(i=1;i<=17;i++) {
      output_bit(DI, shift_left(cmd,3,0));
      delay_us(2);
      output_high(CLK);
      delay_us(2);
      if(i==17)
         output_low(RST1);
      output_low(CLK);
      delay_us(2);
   }
}

BYTE pots_B[2];

set_pot_B (int pot_num, int new_value) {
   BYTE i;
   BYTE cmd[3];

   if (pot_num >= NUM_POTS)
      return;

   pots_A[pot_num] = new_value;

   cmd[0]=pots_B[0];
   cmd[1]=pots_B[1];
   cmd[2]=0;

   for(i=1;i<=7;i++)
     shift_left(cmd,3,0);

   output_high(RST2);
   delay_us(2);

   for(i=1;i<=17;i++) {
      output_bit(DI, shift_left(cmd,3,0));
      delay_us(2);
      output_high(CLK);
      delay_us(2);
      if(i==17)
         output_low(RST2);
      output_low(CLK);
      delay_us(2);
   }
}

init_pots ()
{
   set_pot_A (0,0);
   set_pot_A (1,0);
//
   set_pot_B (0,0);
   set_pot_B (1,0);
}
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Okan AKÇA


zamzam23

#19
set_pot_B (int pot_num, int new_value) {
   BYTE i;
   BYTE cmd[3];

   if (pot_num >= NUM_POTS)
      return;

  pots_A[pot_num] = new_value;

Hocam çok sağol. çok küçük bir eksiklik dışında kod çalısıyor eline sağlık.
Düzeltme: verdiğim kod parçacıgında altı çizili yer pots_B olmalı. Onun dışında kodun hatası yok çalısıyor.

mufitsozen

Alıntı yapılan: zamzam23 - 23 Temmuz 2011, 23:40:04
set_pot_B (int pot_num, int new_value) {
   BYTE i;
   BYTE cmd[3];

   if (pot_num >= NUM_POTS)
      return;

  pots_A[pot_num] = new_value;

Hocam çok sağol. çok küçük bir eksiklik dışında kod çalısıyor eline sağlık.
Düzeltme: verdiğim kod parçacıgında altı çizili yer pots_B olmalı. Onun dışında kodun hatası yok çalısıyor.

sende sagol,

cumartesi gunu ofise sadece 1 saatligine ugrayabildim, senin sorununu cozecek en cabuk kodu yazayim diye boyle acik forumlarda ornek olarak gosterilmemesi gereken cok kotu bir cozum yapmak zorunda kaldim. Ilk firsatta birden fazla DS1868 kontrol eden bir fonksiyon yazip sana yollarim. eger onuda deneyebilirsen cok makbule gecer


Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

zamzam23


mesutpalut

Mrb arkadaşlar DS1867-10k kullanarak bir sinyal jeneratörü yapacağız bu konu hakkında yardım edebilirmisiniz. İki tane DS 1867-10k kullanacağız. İkisini tek bir pic le kontro ledebilirmiyiz. 0-10k arasında ayar yapmasını isitoruz her bir potun (3 pot kullanacağiz.) Ancak tam olarak yazılımı nasıl nasıl kontrol edilebilir birbilgim yok yardım edebilirmisiniz

Murat Mert

S.Â.
MCP41010 kullanmanı tavsiye ederim. Tek pot ama da uçları ile istediğin potu kontrol edersin. Ccs nin sitesinde bir ara görmüştüm. Kolay gelsin.
mert07

mesutpalut

Teşekkür ederim. Ancak DS1868 üzerine yoğunlaşttık.Bu ancak yazılımının tam mantığını anlayamadık