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

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

mustafa_cmbz

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...

Maxim

şö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

M_B

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
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

cenkishan

En son mcp serilerini burda bulmuştum.msn den bağlantı kurup sorabilirsin.
http://www.direnc.net/main/
Bir bit olsam dolaşsam C de byte byte

mustafa_cmbz

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_?

Maxim

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

mustafa_cmbz

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...

Maxim

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

askuzucu

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.

mustafa_cmbz

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...

vebsel

dallas serisinde de de bu tip entegreler var kullanımı daha kolay

mustafa_cmbz

hocam biliyoruz ama nerede bulacağımızı bilmiyoruz...

Maxim

şimdi fark ettim ,
proteusta mcp41010 var ,
denedinmi ?

mustafa_cmbz

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...

ergunbt

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