Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: mustafa_cmbz - 12 Şubat 2009, 18:58:25

Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: mustafa_cmbz - 12 Şubat 2009, 18:58:25
arkadaşlar dedektördeki potları micro işlemci ile kontrol etmek istiyorum...bunun içinde digital pot arayışlarına giriştim ve en sonunda int-el elektronik'te  mcp-41010 kodlu entegreden buldum...yanlız bana uygulama için örnek kod lazım.birde daha önce bu entegreyi kullananların görüşlerini bekliyorum...bu tarz entegreleri başka nereden bulabilirim...çünki benim bulduğum sadece 10k dual pot olarak geçiyor. birde ist. başka bir firmaya ait  direnci 200k-100k-20k-50k gibi entegre bulabileceğim bir yer varmı acaba_?

birde elinde basic veya protonda yazılmış bir örnek varsa yardımcı olabilirmi_?

datasheet'i incelemek isteyenler:

http://ww1.microchip.com/downloads/en/devicedoc/11195c.pdf


iyi çalışmalar...
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: Maxim - 12 Şubat 2009, 19:15:39
şöyle kodlar var ,picbasic ,
çalışırmı bilmiyorum .



'16F628A
cmcon=7
define osc 8

res var byte
command var byte

SI var porta.0 'SI
CLK var porta.3 'CLK
CS var porta.2 'CS
LED var porta.1 'LED

high porta.2
command=19
high LED
pause 1000
low LED
pause 1000
high LED

repeatit:
res=256
low CS
shiftout SI,CLK,1,[%00010011\8,res\8]
HIGH CS
pause 5000
res=128
low CS
shiftout SI,CLK,1,[command,res]
HIGH CS
pause 5000
goto repeatit

end



birde bu


  '
   '    Hardware configuration
   '    ======================
   TRISC=0
   
   '                      
   '    Hardware connection
   '    ===================
   CS          VAR PORTC.0
   CLK         VAR PORTC.1
   SI          VAR PORTC.2
   
   '  
   '    Variables definition
   '    ===================
   Wiper       var byte
   
   '
   '    Constants definition
   '    ====================
   MSBFIRST    CON 1              
   WriteOnPot0 con %00010001

   '
   '    Software/Hardware initialisation
   '    ================================
   cs = 1      ' disable MCP
   PAUSE 100   ' safe settle time
   
Start:
   for wiper = 0 to 255
       cs=0                                            ' enable
       shiftout si,clk, MSBFIRST,[WriteOnPot0, WIPER]  ' Write to MCP
       cs = 1                                          ' Disable
       pause 10                                      
       next                                          
   goto startNow connect PA0 too vcc, PB0 to GND and read




sonuncusu

WriteSPI:
   GOSUB GetPotVal
   CS = 0                              ' Enable
   Shiftout SI, SCK, MSBFIRST, [$11, UpdPotVal]
   CS = 1                              ' Disable
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: M_B - 12 Şubat 2009, 19:23:42
merhaba hocam;
Basit bir SPI protokolu. Hic basicte 74HC595 entegre kontrolu yaptın mı ? Bu da aynı mantıkla calısıyor. Basıcte Shiftout komutu ile yapılır diye dusunuyorum.
Soyle olsa gerek.
ShiftOut SI,SCK,1,[veri]
high Cst

Yukardaki kod sadece yol gostermek amaclıdır. Yanlış yazmıs olabilirim. Epey zamandır basic kullanmıyorum

Datasheetin 22 sayfasını bir incele derim.

Kolay gelsın.
M_B
Başlık: mcp41010
Gönderen: cenkishan - 12 Şubat 2009, 20:58:34
En son mcp serilerini burda bulmuştum.msn den bağlantı kurup sorabilirsin.
http://www.direnc.net/main/
Başlık: Re: mcp41010
Gönderen: mustafa_cmbz - 12 Şubat 2009, 21:33:43
Alıntı yapılan: "cenkishan"En son mcp serilerini burda bulmuştum.msn den bağlantı kurup sorabilirsin.
http://www.direnc.net/main/

hocam vermiş olduğun site zaten int-el elektroniğin sitesi...hüseyin abi ile iletişim kurdum fakat elinde sadece mcp41010 varmış...


@ maxiboost hocam :


'16F628A
cmcon=7
define osc 8

res var byte
command var byte

SI var porta.0 'SI
CLK var porta.3 'CLK
CS var porta.2 'CS
LED var porta.1 'LED

high porta.2
command=19
high LED
pause 1000
low LED
pause 1000
high LED

repeatit:
res=256
low CS
shiftout SI,CLK,1,[%00010011\8,res\8]
HIGH CS
pause 5000
res=128
low CS
shiftout SI,CLK,1,[command,res]
HIGH CS
pause 5000
goto repeatit

end


kod çalışıyor ama programda kafama takılan yerler var tam olarak kodların mantığını ve çalışmasını anlayamadım...kodda 2 kez shiftout komutuyla mcp'ye komut gönderiyor ama ikisinde de farklı şey yolluyor mesela res değişkeni neyi değiştiriyor command değişkenin görevi nedir_?

shiftout SI,CLK,1,[%00010011\8,res\8] bu komutta \8 neyi ifade ediyor_? bunlar kafamı kurcalayan sorular...

bunların dışında programdan 2 buton kullanarak +/-  direncin değerini nasıl değiştirebiliriz_?
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: Maxim - 12 Şubat 2009, 23:07:59
valla hiç bakmadım ama bana şöyle gibi geliyor ,

2 tane komut var ,
önce ne yapıcanı söylüyorsun ,sonra direnç değerini gönderiyorsun veya ona benzer birşey ,yani sesi aç diyorsun ,sonrada şu kadar aç diyorsun olabilir ..bende bilmiyorum
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: mustafa_cmbz - 12 Şubat 2009, 23:10:25
bu entegreyi kullanması sorun yaratacak gibime geliyor...pek kullanılan bir entegre olmadığından olsa gerek...sağolun hocam...yapabilirsek siparişi yaparım ama hiçte içimden geçmiyor...200k lık bir pot lazım onun için 20 tane seri bağlarsam hiç bir anlamı kalmıyor...iyi çalışmalar...
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: Maxim - 13 Şubat 2009, 00:38:08
sen al bu entegreyi ,bir şekilde çalıştırırsın nasılsa ,

data sheete baktımda ,

önce command biti gönderiliyor ,
data yazılacakmı ? entegre kapatılacakmı (shutdown) gibi birşey

sonra kanal seçme biti gönderiliyor ,
hangi kanala müdahale edilecek ? sol? sağ? ikiside?

en sonda asıl data gönderiliyormuş yani tam olarak potans değeri ..

birde bunun 2 türlü kullanım şekli varmış ,
reosta şeklindemi ?
yani orta uç bir tarafla kısa devre gibi ,

birde normal potans gibi ,yani 3 uçlu
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: askuzucu - 13 Şubat 2009, 11:13:29
eğer delta palsta 4538 ler için kullanacaksan bununla uğraşma.bu monostable lerin yerine 18 serisi pic kullan.pll ile 48 MHz de çalıştırısan çözünülürlük yüksek olur.zamanlama işini bununla halledebilirsin.
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: mustafa_cmbz - 13 Şubat 2009, 18:07:47
delta için değil hocam tarsos diye bir dedektör var bir abimizin kendi tasarımı ayrımlı bir dedektör onun ayar potlarını kullanacağım...iyi çalışmalar...
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: vebsel - 13 Şubat 2009, 23:06:50
dallas serisinde de de bu tip entegreler var kullanımı daha kolay
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: mustafa_cmbz - 13 Şubat 2009, 23:12:55
hocam biliyoruz ama nerede bulacağımızı bilmiyoruz...
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: Maxim - 14 Şubat 2009, 01:36:50
şimdi fark ettim ,
proteusta mcp41010 var ,
denedinmi ?
Başlık: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: mustafa_cmbz - 14 Şubat 2009, 09:14:57
hocam verdiğiniz kodu isiste denedim zaten...ama çok karmaşık bir protkolü ve kontrol mantığı var bana daha basit protokolü bir digit pot lazım...olmazsa sample isteyeceğim...iyi çalışmalar...
Başlık: Ynt: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: ergunbt - 23 Ağustos 2015, 01:24:21
MCP41010 ve PIC16f877A ile yaptığım devrenin proton kodlarıdır. Umarım işini görür... İyi günler dilerim


'****************************************************************
'*  Name    : mcp41010.BAS                                      *
'*  Author  : [ergunbt]                                         *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 22.08.2015                                        *
'*  Version : 1.0                                               *
'*  Notes   : mcp41010 dijital pot uygalaması                   *
'*          :                                                   *
'****************************************************************
Device=16F877A

XTAL = 4
TRISA=%111111
ALL_DIGITAL = True
Symbol YUKARI= PORTA.0
Symbol ASAGI= PORTA.1
Symbol MODE= PORTA.2

Symbol CS10 = PORTB.3 ' CHIP SEÇ
Symbol CS20 = PORTB.4 ' CHIP SEÇ
Symbol CS30 = PORTB.5 ' CHIP SEÇ
Symbol CS40 = PORTB.6 ' CHIP SEÇ

Output CS10 ' CS10 ÇIKISINI AYARLA
Output CS20 ' CS20 ÇIKISINI AYARLA
Output CS30 ' CS30 ÇIKISINI AYARLA
Output CS40 ' CS40 ÇIKISINI AYARLA


Symbol SCK = PORTC.3 ' CLOCK PINI
Symbol SI = PORTC.4 ' DATA IN PINI
Symbol SO = PORTC.5 ' DATA OUT PINI

Dim POT1 As Byte
Dim POT2 As Byte
Dim POT3 As Byte
Dim POT4 As Byte

Dim MOD As Byte
MOD=0


LOOP:
If MODE=0 Then

While MODE=0 :Wend
MOD=MOD+1
If MOD=4 Then  MOD=0
EndIf


If MOD=0 Then
If YUKARI=0 Then
While YUKARI=0 :Wend
POT1=POT1+10
If POT1>255 Then POT1=0
EndIf

If ASAGI=0 Then
While ASAGI=0 :Wend
POT1=POT1-10
If POT1<5 Then POT1=0
EndIf
EndIf

If MOD=1 Then
If YUKARI=0 Then
While YUKARI=0 :Wend
POT2=POT2+10
If POT2>255 Then POT2=0
EndIf

If ASAGI=0 Then
While ASAGI=0 :Wend
POT2=POT2-10
If POT2<5 Then POT2=0
EndIf
EndIf

If MOD=2 Then
If YUKARI=0 Then
While YUKARI=0 :Wend
POT3=POT3+10
If POT3>255 Then POT3=0
EndIf

If ASAGI=0 Then
While ASAGI=0 :Wend
POT3=POT3-10
If POT3<5 Then POT3=0
EndIf
EndIf

If MOD=3 Then
If YUKARI=0 Then
While YUKARI=0 :Wend
POT4=POT4+10
If POT4>255 Then POT4=0
EndIf

If ASAGI=0 Then
While ASAGI=0 :Wend
POT4=POT4-10
If POT4<5 Then POT4=0
EndIf

EndIf

GoSub POT_YAZ ' DİJİTAL PORTA YAZ

GoTo LOOP
'================================================= ========
POT_YAZ:

CS10=0 ' AKTIF
CS20=0 ' AKTIF
CS30=0 ' AKTIF
CS40=0 ' AKTIF

SHOut SI, SCK, msbfirst, [$11,POT1]

CS10=1
CS10=0
CS10=1

SHOut SI, SCK, msbfirst, [$11,POT2]

CS20=1
CS20=0
CS20=1

SHOut SI, SCK, msbfirst, [$11,POT3]

CS30=1
CS30=0
CS30=1

SHOut SI, SCK, msbfirst, [$11,POT4]

CS40=1
CS40=0
CS40=1
Return

End
Başlık: Ynt: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: ipek - 23 Ağustos 2015, 17:22:37
@ 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.
Başlık: Ynt: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: tekosis - 23 Ağustos 2015, 19:23:39
ş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();
}

Başlık: Ynt: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: muhittin_kaplan - 23 Ağustos 2015, 20:00:56
http://www.muhittinkaplan.com/2015/07/21/sayisal-potansiyometre-stm32vl/ (http://www.muhittinkaplan.com/2015/07/21/sayisal-potansiyometre-stm32vl/)
Başlık: Ynt: mcp-41010 + 18f452 örnek kod uygulaması lazım...
Gönderen: ergunbt - 23 Ağustos 2015, 21:45:31
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....