This is project that I made for my brother, it will go to his garage after he finishes casing.
It shows time, inside and outside temperature. Brain for the clock is axe200 module that controls ds1307 rtc and 3 saa1064 chips. I`m not going in details because ho is skilled enough to solder smd will figure it out.
Here is some pictures:
Picture 1 Picture 2 Picture 3 Picture 4
And code:
It shows time, inside and outside temperature. Brain for the clock is axe200 module that controls ds1307 rtc and 3 saa1064 chips. I`m not going in details because ho is skilled enough to solder smd will figure it out.
Here is some pictures:
Picture 1 Picture 2 Picture 3 Picture 4
And code:
Code:
#picaxe 28x2
#no_data
#no_table
#terminal off
symbol clock=$70
symbol in=$74
symbol out=$76
symbol ds1307=$D0
symbol outsensor=c.6
symbol insensor=c.5
symbol hourplus=pinb.7
symbol minuteplus=pinb.6
symbol minute=b1
symbol minute2=b2
symbol hour=b3
symbol nr1=b4
symbol nr2=b5
symbol nr3=b6
symbol nr4=b7
symbol temp=w4
symbol temp2=w6
init:
i2cslave clock,i2cslow,i2cbyte
hi2cout $00,($1F)
i2cslave in,i2cslow,i2cbyte
hi2cout $00,($1F)
i2cslave out,i2cslow,i2cbyte
hi2cout $00,($1F)
wait 2
readtemp12 outsensor,temp
gosub tempconvert
i2cslave out,i2cslow,i2cbyte
hi2cout $00,($17,nr1,nr2,nr3,$80)
readtemp12 insensor,temp
gosub tempconvert
i2cslave in,i2cslow,i2cbyte
hi2cout $00,($17,nr1,nr2,nr3,$80)
i2cslave ds1307,i2cfast, i2cbyte
hi2cout $07, (%00010000)
hi2cin $01,(minute,hour)
nr1=hour/16:nr2=hour AND $0F
nr3=minute/16:nr4=minute AND $0F
gosub clocknr
i2cslave clock, i2cslow, i2cbyte
hi2cout $00, ($17,nr1,nr2,nr3,nr4)
Main:
i2cslave ds1307,i2cfast, i2cbyte
hi2cin $01,(minute,hour)
nr1=hour/16:nr2=hour AND $0F
nr3=minute/16:nr4=minute AND $0F
if hourplus=1 then gosub hourset
if minuteplus=1 then gosub minuteset
pause 500
minute=nr3*10+nr4
if minute2=minute then main
minute2=minute
gosub clocknr
i2cslave clock, i2cslow, i2cbyte
hi2cout $00, ($17,nr1,nr2,nr3,nr4)
readtemp12 outsensor,temp
gosub tempconvert
i2cslave out,i2cslow,i2cbyte
hi2cout $00,($17,nr1,nr2,nr3,$80)
readtemp12 insensor,temp
gosub tempconvert
i2cslave in,i2cslow,i2cbyte
hi2cout $00,($17,nr1,nr2,nr3,$80)
goto main
minuteset:
minute=minute+1
if minute =10 then : minute = Minute+6
elseif minute =26 then : minute = Minute+6
elseif minute =42 then : minute = Minute+6
elseif minute =58 then : minute = Minute+6
elseif minute =74 then : minute = Minute+6
elseif minute = 90 then : minute = 0
endif
i2cslave ds1307,i2cfast, i2cbyte
hi2cout $01, (minute)
hi2cin $01,(minute,hour)
nr1=hour/16:nr2=hour AND $0F
nr3=minute/16:nr4=minute AND $0F
gosub clocknr
i2cslave clock, i2cslow, i2cbyte
hi2cout $00, ($17,nr1,nr2,nr3,nr4)
pause 500
if minuteplus=1 then minuteset
return
hourset:
hour=hour+1
if hour=10 then : hour = hour + 6
elseif hour=26 then : hour = hour + 6
elseif hour=36 then : hour = 0
endif
i2cslave ds1307,i2cfast, i2cbyte
hi2cout $02, (hour)
hi2cin $01,(minute,hour)
nr1=hour/16:nr2=hour AND $0F
nr3=minute/16:nr4=minute AND $0F
gosub clocknr
i2cslave clock, i2cslow, i2cbyte
hi2cout $00, ($17,nr1,nr2,nr3,nr4)
pause 500
if hourplus=1 then hourset
return
tempconvert:
temp2=temp
if temp> 2048 then gosub negative
if temp<=2048 then gosub positive
return
positive:
let temp2=temp2*10/16
let nr1=temp2/ 100
let nr2=temp2//100 / 10
let nr3=temp2// 10
lookup nr1,($0,$3,$5D,$57,$33,$76,$7E,$43,$7F,$77),nr1
lookup nr2,($6F,$3,$5D,$57,$33,$76,$7E,$43,$7F,$77),nr2
lookup nr3,($EF,$A8,$F6,$FC,$B9,$DD,$DF,$E8,$FF,$FD),nr3
return
negative:
temp2= INV temp2
temp2= temp2 AND 4095 + 1
let temp2=temp2*10/16
if temp2=255 then : temp2=0
endif
let nr1 =temp2 / 100
let nr2 =temp2//100 / 10
let nr3 =temp2 // 10
lookup nr1,($80,$83,$DD,$D7,$B3,$F6,$FE,$C3,$FF,$F7),nr1
lookup nr2,($6F,$3,$5D,$57,$33,$76,$7E,$43,$7F,$77),nr2
lookup nr3,($EF,$A8,$F6,$FC,$B9,$DD,$DF,$E8,$FF,$FD),nr3
if temp2<100 then : nr1=$10
endif
return
clocknr:
lookup nr1,($0,$14,$6E),nr1
lookup nr2,($77,$14,$6E,$3E,$1D,$3B,$7B,$16,$7F,$3F),nr2
lookup nr3,($77,$41,$3B,$6B,$4D,$6E),nr3
lookup nr4,($77,$41,$3B,$6B,$4D,$6E,$7E,$43,$7F,$6F),nr4
return