Left for archival purposes.

User avatar
By GerryKeely
#15789 Here is my version which works. Note to set up the time ,date etc use hex numbers ie. if required mins is 10 set as 0x10( works same as converting dec. to BCD)

Code: Select allid=0
    sda=6
    scl=7




    -- initialize i2c, set pin6 as sda, set pin7 as scl
    i2c.setup(id,sda,scl,i2c.SLOW)

    -- user defined function: read from reg_addr content of dev_addr
    function read_reg(dev_addr, reg_addr)
      i2c.start(id)
      i2c.address(id, dev_addr ,i2c.TRANSMITTER)
      i2c.write(id, bit.band(reg_addr,0xFF))
      i2c.stop(id)
      i2c.start(id)
      i2c.address(id, dev_addr,i2c.RECEIVER)
      c=i2c.read(id,1)
      i2c.stop(id)
      return string.format("%02X",string.byte(c)) -- return bcd string as decimal no.
    end

    function write_reg(dev_addr,reg_addr, reg_val)
      i2c.start(id)
      i2c.address(id, dev_addr, i2c.TRANSMITTER)
      i2c.write(id, bit.band(reg_addr,0xFF)) 
      i2c.write(id, reg_val)
      i2c.stop(id)
    end

   
   
      write_reg(0x68, 0,0) --set seconds
      tmr.delay(100)
      write_reg(0x68, 1,0x55) --set mins
      tmr.delay(100)
      write_reg(0x68, 2,0x12) --set hours
      tmr.delay(100)
      write_reg(0x68, 3,0x03) --set day
      tmr.delay(100)
      write_reg(0x68, 4,0x11) --set date
      tmr.delay(100)
      write_reg(0x68, 5,0x04) --set month
      tmr.delay(100)
      write_reg(0x68, 6,0x15) --set year
      tmr.delay(100)
 
   
    tmr.alarm(0,1000,1,function() 
 
   print("The time is")
   print(read_reg(0x68,2).."-"..read_reg(0x68,1).."-"..read_reg(0x68,0))
   print(read_reg(0x68,4).."-"..read_reg(0x68,5).."-".."20"..read_reg(0x68,6))
 
    end)



Gerry