MCP4725 DAC I2C ile Haberleşme Sıkıntısı

Başlatan bederik, 04 Kasım 2017, 11:23:40

bederik

Device = 16F887

Config1 FOSC_INTRC_NOCLKOUT, WDTE_Off, PWRTE_OFF, MCLRE_OFF, CP_OFF, CPD_OFF, BOREN_ON, IESO_OFF, FCMEN_OFF, LVP_OFF, DEBUG_OFF
Config2 BOR4V_BOR40V, WRT_OFF

Xtal=8
Declare All_Digital TRUE
Declare LCD_Type 0
Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTB.3
Declare LCD_RSPin PORTB.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2 
Declare SDA_Pin PORTC.4
Declare SCL_Pin PORTC.3
OPTION_REG=7
TRISA=%00001111
'TRISB=%00000000
TRISD=%00011111
TRISC=%00000110
TRISE=%0000
PORTD=%00000000
ADCON0=%10000000     
ADCON1 = %10000000
ANSEL = %00001111   
ANSELH = %00000000
Declare Adin_Res 10         
Declare Adin_Tad FRC
Declare Adin_Stime 150   
Symbol SDA = PORTC.4
Symbol SCL = PORTC.3
Dim GIRIS As Word
Dim U1 As Word
Dim U2 As Word
Dim U3 As Word
Dim U11 As Word
Dim U22 As Word
Dim U33 As Word
Dim a As Word
Dim b As Word
Dim c As Word
Dim d As Word
Dim c1 As Byte
Dim c2 As Byte
Dim c3 As Byte
Dim c4 As Byte
Dim d1 As Byte
Dim d2 As Byte
Dim d3 As Byte
Dim d4 As Byte
Dim e As Byte
Dim f As Word
Symbol ok= PORTD.0
Symbol yuk= PORTD.1
Symbol asa= PORTD.2
Symbol sol= PORTC.1
Symbol sag= PORTC.2
Low PORTB.2
e=0
f=0
U11 =1
Print $fe,1,"Selam Millet"
DelayMS 2000
BStart ' Send a START condition
BusOut $C0,[U11.HighByte,U11.LowByte,U11.HighByte,U11.LowByte]
BStop ' Send a STOP condition
Print $fe,$C0,"Nabeeeer"
DelayMS 1000

BASLA:
If yuk=0 Then GIRIS=giris+1
If asa=0 Then GIRIS=giris-1
If sag=0 Then GIRIS=giris+33
If sol=0 Then GIRIS=giris-33
While yuk=0 Or asa=0 Or sag=0 Or sol=0
Wend
If GIRIS>2023 Then GIRIS=0
If ok=0 Then
If e=0 Then
Print $fe,1,"Loop Veriliyor"
BStart ' Send a START condition
BusOut $C0,[f.HighByte,f.LowByte,f.HighByte,f.LowByte]
BStop
DelayMS 100
Low PORTD.6
DelayMS 200
High PORTD.5
e=e+1
While ok=0
Wend
Else
Print $fe,$1,"Simulasyon Modu"
BStart ' Send a START condition
BusOut $C0,[f.HighByte,f.LowByte,f.HighByte,f.LowByte]
BStop
DelayMS 100
Low PORTD.5
DelayMS 200
High PORTD.6
e=0
While ok=0
Wend
EndIf
EndIf
c=(giris*/780)
c1=Dig c,3
c2=Dig c,2
c3=Dig c,1
c4=Dig c,0
Print $FE,$2,Dec1 c1,Dec1 c2,",",Dec1 c3,Dec1 c4
ADCON0 =%11000101
U1 =ADIn 1
d=(u1*/780)
d1=Dig d,3
d2=Dig d,2
d3=Dig d,1
d4=Dig d,0
While ADCON0.1 =1 :Wend
Print $FE,$2,Dec1 c1,Dec1 c2,",",Dec1 c3,Dec1 c4,"mA ",Dec1 d1,Dec1 d2,",",Dec1 d3,Dec1 d4,"mA "
GoSub hesap
DelayMS 30
ADCON0 =%11000101
U1 =ADIn 1
d=(u1*/780)
d1=Dig d,3
d2=Dig d,2
d3=Dig d,1
d4=Dig d,0
While ADCON0.1 =1 :Wend
Print $FE,$2,Dec1 c1,Dec1 c2,",",Dec1 c3,Dec1 c4,"mA ",Dec1 d1,Dec1 d2,",",Dec1 d3,Dec1 d4,"mA "
GoTo BASLA                    

hesap:
If U1<GIRIS Then
a=giris-u1
If a>120 Then
U11=u11+(a*3)
Else
U11=u11+(a*2)
EndIf
EndIf
If U1>GIRIS Then
b=u1-giris
If b>120 Then
U11=u11-(b*3)
Else
U11=u11-(b*2)
EndIf
EndIf
If GIRIS<2 Then
U11=0
EndIf
If U11>4095 Then U11=4095
BStart ' Send a START condition
BusOut $C0,[U11.HighByte,U11.LowByte,U11.HighByte,U11.LowByte]
BStop ' Send a STOP condition
DelayMS 20
Print $fe,$c0,Dec4 U11
DelayMS 2
Return
    
End


Sayın Usta arkadaşlar, benim derdim isis'te kodun mükemmel çalışması fakat yaptığım kart'a yüklediğimde MCP4725 sabit 2.5V çıkış veriyor. i2c haberleşmesi ile alakalı bir sıkıntı olduğu düşüncesindeyim. MCP4725 ve Proton Help Pdf'lerini okudum fakat ingilizcem biraz kıt olduğundan veriyi nasıl doğru şekilde göndereceğimi anlayamadım.
MCP4725 çin sitelerinde satılan kırmızı boardlı olan. Yapmak istesiğim cihaz isa 0-20mA hem loop verebilen hemde simülasyon yapabilen akım kaynağı. destekleriniz için şimdiden teşekkürler.