SDA, SCL pinlerini kullanmadan I2C kullanabilir miyim ?

Başlatan elektroacemi, 17 Ekim 2015, 14:24:38

elektroacemi

Merhaba Arkadaşlar,

SDA,SCL pinlerini kullanmadan her hangi 2 pin kullanılarak I2C protokolunu proton da nasıl kullanabilirim. Bunun için özel Fonksiyon proton için de var mı ?

gokhangokcen

#1
protonun helpini kullanabilirsin orada bütün komutlar ve açıklamaları command reference kısmında var..

zamanında yazmış olduğum saat tarih vs programını koydum örnek açısından %99 çalışıyordur. ama protonu bırakalı yıllar oldu o anki kafayla karalamışım birşeyler.

Device 16F628


Include "16f628.bas"

CMCON = 7

PORTA =%00000000
PORTB =%00000000

PORTA = 0
PORTB = 0

Declare SDA_PIN PORTB.1
Declare SCL_PIN PORTB.0

Declare LCD_DTPIN PORTA.0	
Declare LCD_ENPIN PORTB.3	'LCD'nin ENable ucu
Declare LCD_RSPIN PORTB.4	'LCD'nin Register Select ucu
Declare LCD_INTERFACE 4	'LCD veri yolu 4 bit olacak
Declare LCD_LINES 2		'LCD 2 satırdan oluşuyor

Print At 1,1 ,"gokhan"
DelayMS 500
Cls

Dim saniye As Byte
Dim dakika As Byte
Dim saat As Byte
Dim gunadi As Byte
Dim gun As Byte
Dim ay As Byte
Dim yil As Byte
Dim s1 As Byte
Dim s2 As Byte
Dim d1 As Byte
Dim d2 As Byte
Dim sa1 As Byte
Dim sa2 As Byte
Dim g1 As Byte
Dim g2 As Byte
Dim a1 As Byte
Dim a2 As Byte
Dim y1 As Byte
Dim y2 As Byte





''' Cihaz ilk enerjilendiğinde DS1307 için başlama değerleri

BusOut  $D0 , $00 , [ 0 ]   ' Clock Halt (CH) Ataması (Saatin çalışması için gerekli)
DelayMS 100

'BusOut  $D0 , $07 , [ $90 ] '' $07 ye 90H yazacaksın.SQW/OUT =1Hz'de çalışacaktır, şart değil 
'DelayMS 100


'''''' Başlangıç değerleri
'saniye = $45     ' sn 45 den başlayacak
'dakika = $59     ' dk 59
'saat = $23       ' saat 23
'gunadi = $06     ' 6 = CUMA
'gun = $28        ' ayın kaçıncı günü 28
'ay = $02         ' hangi ay şubat
'yil = $09        ' hangi yıl 2009

'GoSub ds1307_yaz
'DelayMS 100
GoSub ds1307_oku
DelayMS 100
GoSub hane_coz
DelayMS 100
GoSub goster

basla:
DelayMS 10
GoSub ds1307_oku
GoSub hane_coz

GoSub goster

GoTo basla





'''' Değerleri okumak için de alttaki komut
ds1307_oku:
    BusIn $D0 , $00, [ saniye, dakika, saat, gunadi, gun, ay, yil ]
 
Return
 
    
'''' Okunan değerleri ekrana vermeden önce BCD dönüşümünü yap
hane_coz:
    s1 = saniye // 16   ' saniye/16 böl ve kalanı S1 e yerleştir.
    s2 = saniye - s1
    s2 = s2 // 15
    
    d1 = dakika // 16
    d2 = dakika - d1
    d2 = d2 // 15
    
    sa1 = saat // 16
    sa2 = saat - sa1
    sa2 = sa2 // 15
    
    g1 = gun // 16
    g2 = gun - g1
    g2 = g2 // 15
    
    a1 = ay // 16
    a2 = ay - a1
    a2 = a2 // 15                                       
    
    y1 = yil // 16
    y2 = yil - y1
    y2 = y2 // 15 

Return


goster:    

Print At 1 , 1 , #SA2,#SA1,":",#D2,#D1,":",#S2,#S1," "
Print At 2 , 1 ,#G2,#G1,".",#A2,#A1,".",#Y2,#Y1 

''' Gün adı ilavesi
If gunadi = 1 Then Print At 1 , 10 , " PAZAR  "
If gunadi = 2 Then Print At 1 , 10 , " PZRTESI"
If gunadi = 3 Then Print At 1 , 10 , " SALI   "
If gunadi = 4 Then Print At 1 , 10 , " CRSAMBA"
If gunadi = 5 Then Print At 1 , 10 , " PRSEMBE"
If gunadi = 6 Then Print At 1 , 10 , " CUMA   "
If gunadi = 7 Then Print At 1 , 10 , " CMRTESI" 
DelayMS 100

Return



ds1307_yaz:
    BusOut $D0 , $00 , [ saniye, dakika, saat, gunadi, gun, ay, yil ]
    DelayMS 200

Return
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

elektroacemi