has_artvin_li ( TA3TCM )
Usta Üye
- Katılım
- 18 Ocak 2008
- Mesajlar
- 1,088
- Puanları
- 156
- Yaş
- 40
Selamun aleyküm arkadaşlar ben proton basic programını kullanarak bir saat bir de derece yapmak istiyorum saat entegresi olarak ds1307 ısı entegresi olarak ta ds18b20 kullanacağım ama bunu yapmaktaki amacım i2c ve tek hat kontrolunu öğrenmek
Şimdi proton basic de i2c komutları hazır var programı yazıyorum derliyorum ama saat Lcd de sayarken abuk subuk sayıyo 59 da son bulması gereken saatin saniyesi 64-89 gibi aptalca rakamlara çıkıyo şimdi bu i2c komutlarında start ve stop bitleri diye bişeyler var kitaplardan baktım ama bunları komut olarak nasıl vereceğimi işde scl nin hangi durumda sda nın hangi durumda veya durumlardan hangi durumlara geçerken start stop bitlerini yolladığını filan bilmiyorum şu işde bir el atarmısınız ben aşağıda programda kullandığım i2c komutlarını aşağıya yazacağım
I2CIN SDA,SCL,$D1,0,[SANIYE] ' buradaki komutla $d1 yazma komutu adresi ile ds1307 nin 0.adresi olan saniye registerine pic in içinde tanımladığım saniye adresinin içeriğini yazmak istiyorum ama start stop bitlerini nasıl ve nerede yollayacağımı bilmiyorum aşağıda ise picin içinde tanımladığım saniye adlı registerin içini ds1302 nin 0. adresi yani saniye değişkenine yazmak istiyorum
I2COUT SDA,SCL,$D0,0,[SANIYE]
yine başlı başına start ve stop bitleri dert oluyo sanırım ve şimdi aşağıda ise programın bir parçasını yolluyorum bu programda tam olarak ne tür yanlışlarım var bilgi olarak nelere sahip olmam lazım arkadaşlar şu protokolleri çözmemde yardımcı olursanız çok memnun olacağım
Birde tek hat iletişimi hakkında örnek programlar dikkat edilmesi gereken konuları ve gereken komutları nasıl kullanılması gerektikleri gibi konuları araştırmaktayım acil olarak yardımlarınızı bekliyorum
program
'****************************************************************
'* Name : SAAT DERECE.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 20.07.2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device 16F628A
CMCON=7
TRISB=0
TRISA=31
'****************************************************************
Config INT_OSC,WDT_OFF,CP_OFF,MCLRE_ON
Declare SDA_PIN PORTA.1
Declare SCL_PIN PORTA.0
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.1
Declare LCD_RSPIN PORTB.0
Declare LCD_LINES 2
;****************************************************************
Symbol SDA=PORTA.1
Symbol SCL=PORTA.0
Symbol YUKARI=PORTA.4
Symbol OKEY=PORTA.3
Symbol ASAGI=PORTA.2
'****************************************************************
Dim SAAT As Byte
Dim DAKIKA As Byte
Dim SANIYE As Byte
Dim GUN As Byte
Dim AY As Byte
Dim YIL As Byte
Dim H_GUN As Byte
SAAT=0
DAKIKA=0
SANIYE=0
GUN=0
AY=0
YIL=0
H_GUN=0
'****************************************************************
Dim OK As Byte
OK=0
'****************************************************************
DelayMS 500
Print $FE,1," MURAT YAGCI"
Print $FE,$C0," 20/07/2008"
DelayMS 2000
Print $FE,1,"LUTFEN SAAT AYARI"
Print $FE,$C0," YAPIN"
AYAR:
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
While OKEY=1
OK=OK+1
While OKEY=1
Wend
Wend
While YUKARI=1 And OK=0
SANIYE=SANIYE+1
If SANIYE>=60 Then
SANIYE=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=1
DAKIKA=DAKIKA+1
If DAKIKA>=60 Then
DAKIKA=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=2
SAAT=SAAT+1
If SAAT>=24 Then
SAAT=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=3
GUN=GUN+1
If GUN>=32 Then
GUN=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=4
AY=AY+1
If AY>=13 Then
AY=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=5
YIL=YIL+1
If YIL>=100 Then
YIL=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
If OK>=6 Then
OK=0
GoTo YAZ
EndIf
DelayMS 250
GoTo AYAR
YAZ:
I2COUT SDA,SCL,$D0,0,[SANIYE]
DelayMS 15
I2COUT SDA,SCL,$D0,1,[DAKIKA]
DelayMS 15
I2COUT SDA,SCL,$D0,2,[SAAT]
DelayMS 15
OKU:
I2CIN SDA,SCL,$D1,0,[SANIYE]
DelayMS 15
I2CIN SDA,SCL,$D1,1,[DAKIKA]
DelayMS 15
I2CIN SDA,SCL,$D1,2,[SAAT]
DelayMS 15
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
DelayMS 250
GoTo OKU
End
ilgilenen herkese şimdiden teşekkürler .
Acil yardım ,yardım edin ,lütfen yardım gibi başlıklarla konu açmak yasaktır
Düzenleme: korkmaz_design
Şimdi proton basic de i2c komutları hazır var programı yazıyorum derliyorum ama saat Lcd de sayarken abuk subuk sayıyo 59 da son bulması gereken saatin saniyesi 64-89 gibi aptalca rakamlara çıkıyo şimdi bu i2c komutlarında start ve stop bitleri diye bişeyler var kitaplardan baktım ama bunları komut olarak nasıl vereceğimi işde scl nin hangi durumda sda nın hangi durumda veya durumlardan hangi durumlara geçerken start stop bitlerini yolladığını filan bilmiyorum şu işde bir el atarmısınız ben aşağıda programda kullandığım i2c komutlarını aşağıya yazacağım
I2CIN SDA,SCL,$D1,0,[SANIYE] ' buradaki komutla $d1 yazma komutu adresi ile ds1307 nin 0.adresi olan saniye registerine pic in içinde tanımladığım saniye adresinin içeriğini yazmak istiyorum ama start stop bitlerini nasıl ve nerede yollayacağımı bilmiyorum aşağıda ise picin içinde tanımladığım saniye adlı registerin içini ds1302 nin 0. adresi yani saniye değişkenine yazmak istiyorum
I2COUT SDA,SCL,$D0,0,[SANIYE]
yine başlı başına start ve stop bitleri dert oluyo sanırım ve şimdi aşağıda ise programın bir parçasını yolluyorum bu programda tam olarak ne tür yanlışlarım var bilgi olarak nelere sahip olmam lazım arkadaşlar şu protokolleri çözmemde yardımcı olursanız çok memnun olacağım
Birde tek hat iletişimi hakkında örnek programlar dikkat edilmesi gereken konuları ve gereken komutları nasıl kullanılması gerektikleri gibi konuları araştırmaktayım acil olarak yardımlarınızı bekliyorum
program
'****************************************************************
'* Name : SAAT DERECE.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 20.07.2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device 16F628A
CMCON=7
TRISB=0
TRISA=31
'****************************************************************
Config INT_OSC,WDT_OFF,CP_OFF,MCLRE_ON
Declare SDA_PIN PORTA.1
Declare SCL_PIN PORTA.0
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.1
Declare LCD_RSPIN PORTB.0
Declare LCD_LINES 2
;****************************************************************
Symbol SDA=PORTA.1
Symbol SCL=PORTA.0
Symbol YUKARI=PORTA.4
Symbol OKEY=PORTA.3
Symbol ASAGI=PORTA.2
'****************************************************************
Dim SAAT As Byte
Dim DAKIKA As Byte
Dim SANIYE As Byte
Dim GUN As Byte
Dim AY As Byte
Dim YIL As Byte
Dim H_GUN As Byte
SAAT=0
DAKIKA=0
SANIYE=0
GUN=0
AY=0
YIL=0
H_GUN=0
'****************************************************************
Dim OK As Byte
OK=0
'****************************************************************
DelayMS 500
Print $FE,1," MURAT YAGCI"
Print $FE,$C0," 20/07/2008"
DelayMS 2000
Print $FE,1,"LUTFEN SAAT AYARI"
Print $FE,$C0," YAPIN"
AYAR:
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
While OKEY=1
OK=OK+1
While OKEY=1
Wend
Wend
While YUKARI=1 And OK=0
SANIYE=SANIYE+1
If SANIYE>=60 Then
SANIYE=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=1
DAKIKA=DAKIKA+1
If DAKIKA>=60 Then
DAKIKA=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=2
SAAT=SAAT+1
If SAAT>=24 Then
SAAT=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=3
GUN=GUN+1
If GUN>=32 Then
GUN=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=4
AY=AY+1
If AY>=13 Then
AY=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
While YUKARI=1 And OK=5
YIL=YIL+1
If YIL>=100 Then
YIL=0
EndIf
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
Print $FE,$C0,"TARIH = ",DEC2 GUN,":",DEC2 AY,":",DEC2 YIL
DelayMS 100
Wend
If OK>=6 Then
OK=0
GoTo YAZ
EndIf
DelayMS 250
GoTo AYAR
YAZ:
I2COUT SDA,SCL,$D0,0,[SANIYE]
DelayMS 15
I2COUT SDA,SCL,$D0,1,[DAKIKA]
DelayMS 15
I2COUT SDA,SCL,$D0,2,[SAAT]
DelayMS 15
OKU:
I2CIN SDA,SCL,$D1,0,[SANIYE]
DelayMS 15
I2CIN SDA,SCL,$D1,1,[DAKIKA]
DelayMS 15
I2CIN SDA,SCL,$D1,2,[SAAT]
DelayMS 15
Print $FE,1,"SAAT = ",DEC2 SAAT ,":" ,DEC2 DAKIKA,":", DEC2 SANIYE
DelayMS 250
GoTo OKU
End
ilgilenen herkese şimdiden teşekkürler .
Acil yardım ,yardım edin ,lütfen yardım gibi başlıklarla konu açmak yasaktır
Düzenleme: korkmaz_design