16f628a ve ds1307 Saat&Tarih

Başlatan rck8942, 23 Ağustos 2009, 12:58:28

ilker_32

Kodlarında problem olduğu kesin. Aşağıdaki sitede DS1307 ile ilgili iki örnek var. Sana yardımcı olabilir.

http://www.melabs.com/resources/samples.htm

http://users.picbasic.org//Howto/RTC/Set_RTC.htm

cetinkaya

nuri hocam tesekkür ederim tekrar baglantilara bakacagim.
@ilker hocam kodun neresinde hata var sizce ?

ilker_32

Bence en büyük hatayı en başta @ETE hocanın mesajını kaçırarak yapmışsın. Bende ufak tefek değişiklikler yaptım birde böyle dene bakalım mutlaka çalışmalı. Tabi şemayı değiştirdim. Yeni şema aşağıdadır. :roll:

@ DEVICE pic16F628A                                                   
@ DEVICE pic16F628A, WDT_ON              
@ DEVICE pic16F628A, PWRT_ON             
@ DEVICE pic16F628A, PROTECT_OFF 
@ DEVICE pic16F628A, BOD_OFF       
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
  
DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4     
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 3     
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 2     
DEFINE LCD_BITS 4     
DEFINE LCD_LINES 2 
    
CMCON=7 : TRISA=00011 : TRISB=0 : PORTA=0 : PORTB=0
SYMBOL SCL=PORTA.7 : SYMBOL SDA=PORTA.6 : Comm_Pin1 VAR PORTA.2
OS VAR BYTE : SANIYE VAR BYTE : S1 VAR BYTE : S2 VAR BYTE
DAKIKA VAR BYTE : D1 VAR BYTE : D2 VAR BYTE
SAAT VAR BYTE : SA1 VAR BYTE : SA2 VAR BYTE
GUNADI VAR BYTE : GUN VAR BYTE : G1 VAR BYTE : G2 VAR BYTE
AY VAR BYTE : A1 VAR BYTE : A2 VAR BYTE
YIL VAR BYTE : Y1 VAR BYTE : Y2 VAR BYTE
Busy VAR BIT : HAM VAR WORD : ISI1 VAR WORD : SIGN1 VAR BYTE
SIGN_BITI VAR HAM.Bit11 : NEGAT_ISI CON 1 : Deg con 223 : TEMP VAR BYTE : Float VAR WORD
GA1 VAR BIT : GA2 VAR BIT : GA3 VAR BIT : GA4 VAR BIT : GA5 VAR BIT : CLEAR
OS.BIT7=0 : GA2=0 : GA4=0
I2CWRITE SDA,SCL,$D0,$00,[OS]
LCDOUT $FE, 1 : LOW PORTB.1 : PAUSE 500

BASLA:

I2CREAD SDA,SCL,$D0,$00,[SANIYE,DAKIKA,SAAT,GUNADI,GUN,AY,YIL]
S1=SANIYE//16 : 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                       
IF PORTA.1=1 THEN GA4=0
IF GA4=1 THEN BASLA
LCDOUT $FE,$80,#SA2,#SA1,":",#D2,#D1,":",#S2,#S1
LCDOUT $FE,$C8,#G2,#G1,".",#A2,#A1,".",#Y2,#Y1
DEM:
IF GUNADI=1 THEN LCDOUT $FE,$88," PAZAR  "
IF GUNADI=2 THEN LCDOUT $FE,$88," PZRTESI"
IF GUNADI=3 THEN LCDOUT $FE,$88," SALI   "
IF GUNADI=4 THEN LCDOUT $FE,$88," CRSAMBA"
IF GUNADI=5 THEN LCDOUT $FE,$88," PRSEMBE"
IF GUNADI=6 THEN LCDOUT $FE,$88," CUMA   "
IF GUNADI=7 THEN LCDOUT $FE,$88," CMRTESI"
IF GA5=1 THEN RETURN
IF GA1=1 THEN RETURN
IF PORTA.1=0 THEN AYAR1

OWOUT Comm_Pin1, 1, [$CC, $44]
Bekle1:
OWIN Comm_Pin1, 4, [Busy]    
IF Busy = 0 THEN Bekle1  
OWOUT Comm_Pin1, 1, [$CC, $BE]
OWIN Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]
GOSUB Hesapla1
LCDOUT $FE,$C0,Sign1,DEC ISI1,Deg,"C "
GOTO BASLA

AYAR1:GA1=1:GA2=1
GOTO AYAR2

AYAR2:
IF PORTA.0=0 THEN DAKIKA=DAKIKA+$01
IF DAKIKA.1=1 AND DAKIKA.3=1 THEN DAKIKA=DAKIKA+$10
IF DAKIKA.1=1 AND DAKIKA.3=1 THEN DAKIKA=DAKIKA-$0A
IF DAKIKA=$60 THEN DAKIKA=$00
IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$83," "," "
PAUSE 80
LCDOUT $FE,$83,#D2,#D1
PAUSE 300
IF PORTA.1=1 THEN GA2=0
IF GA2=1 THEN AYAR2
IF PORTA.1=0 THEN GOTO AYAR3
GOTO AYAR2

AYAR3:
GA2=1 
GOTO AYAR4

AYAR4:
IF PORTA.0=0 THEN SAAT=SAAT+$01
IF SAAT.1=1 AND SAAT.3=1 THEN SAAT=SAAT+$10
IF SAAT.1=1 AND SAAT.3=1 THEN SAAT=SAAT-$0A
IF SAAT=$24 THEN SAAT=$00
IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$80," "," "
PAUSE 80
LCDOUT $FE,$80,#SA2,#SA1
PAUSE 300

IF PORTA.1=1 THEN GA2=0
IF GA2=1 THEN AYAR4
IF PORTA.1=0 THEN AYAR5
GOTO AYAR4

AYAR5:
GA2=1
GOTO AYAR6

AYAR6: 
GA5=1
IF PORTA.0=0 THEN GUNADI=GUNADI+$01
IF GUNADI=$08 THEN GUNADI=$01
IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$89,"       "
PAUSE 80
GOSUB DEM
PAUSE 300
IF PORTA.1=1 THEN GA2=0
IF GA2=1 THEN AYAR6
IF PORTA.1=0 THEN AYAR7
GOTO AYAR6
AYAR7:GA2=1:GA5=0
GOTO AYAR8

AYAR8:
IF PORTA.0=0 THEN GUN=GUN+$01
IF GUN.1=1 AND GUN.3=1 THEN GUN=GUN+$10
IF GUN.1=1 AND GUN.3=1 THEN GUN=GUN-$0A
IF (AY=$01 OR ay=$03 OR ay=$05 OR ay=$7 OR ay=$08 OR ay=$10 OR ay=$12) AND GUN=$32 THEN GUN=$01
IF (AY=$04 OR ay=$06 OR ay=$09 OR ay=$11) AND GUN=$31 THEN GUN=$01

IF (YIL=$08 OR YIL=$12 OR YIL=$16 OR YIL=$20) AND GUN=$30 THEN GUN=$01
IF (YIL=$07 OR YIL=$09 OR YIL=$10 OR YIL=$11 OR YIL=$13 OR YIL=$14 OR YIL=$15 OR YIL=$17 OR YIL=$18 OR YIL=$19 OR YIL=$21) AND GUN=$29 THEN GUN=$01

IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$C8," "," "
PAUSE 80
LCDOUT $FE,$C8,#G2,#G1
PAUSE 300

IF PORTA.1=1  THEN GA2=0
IF GA2=1 THEN AYAR8
IF PORTA.1=0 THEN AYAR9
GOTO AYAR8

AYAR9:
ga2=1
GOTO AYAR10

AYAR10:
IF PORTA.0=0 THEN AY=AY+$01
IF AY.1=1 AND AY.3=1 THEN AY=AY+$10
IF AY.1=1 AND AY.3=1 THEN AY=AY-$0A
IF AY=$13 THEN AY=$01
IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$CB," "," "
PAUSE 80
LCDOUT $FE,$CB,#A2,#A1
PAUSE 300

IF PORTA.1=1 THEN GA2=0
IF GA2=1 THEN AYAR10
IF PORTA.1=0 THEN AYAR11
GOTO AYAR10

AYAR11:
GA2=1
GOTO AYAR12

AYAR12:
IF PORTA.0=0 THEN YIL=YIL+$01
IF YIL.1=1 AND YIL.3=1 THEN YIL=YIL+$10
IF YIL.1=1 AND YIL.3=1 THEN YIL=YIL-$0A
IF PORTA.0=0 THEN GOSUB AYAR0

LCDOUT $FE,$CE," "," "
PAUSE 80
LCDOUT $FE,$CE,#Y2,#Y1
PAUSE 300

IF PORTA.1=1 THEN GA2=0
IF GA2=1 THEN AYAR12
IF PORTA.1=0 THEN AYAR13
GOTO AYAR12

AYAR13:
GA1=0:GA4=1
GOTO BASLA

Hesapla1:
Sign1  = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign1   = "-"  
temp=($ffff-ham+1)*625
ISI1  = DIV32 10 
GOTO GEC1   
endif
TEMP = 625 * (HAM+1)       
ISI1 = DIV32 10          
GEC1:
FLOAT = (ISI1 //1000)/100
ISI1=ISI1/1000
RETURN
GOTO BASLA    

AYAR0:
PAUSE 200:
I2CWRITE SDA,SCL,$D0,$00,[SANIYE,DAKIKA,SAAT,GUNADI,GUN,AY,YIL]

GOSUB BASLA
RETURN
END

Malzemelere ait değerleri biliyorsundur zaten. Pıc kendi osilatörüyle çalışmakta ve MCLR direncini bağlayacaksın. Ayrıca PIC'e .HEX'i atarken programlayıcının yazılımındaki sigorta ayarlamalarına dokunma. DS1307 bağlı olmadığında ekranda 00.00.00, 00.00.00 yazar. Ve set butonuna bastığında değerler karışabilir. DS1822 bağlı olmadığında ise LCD'de herhangi bir değer görmezsin. Sadece boş,