fl { Temperature Sensor ADT7410 PropForth 5.5 2013/12/29 12:14:36 ADT7410 module Propeller VDD ---- 3.3V GND ---- GND SCL ---- P28 SDA ---- P29 A0-GND A1-GBD } \ =========================================================================== \ Constants \ =========================================================================== \ Slave addres h48 for OLED display(128X32) A0=A1=0 h90 wconstant ADT7410 \ register name 0 wconstant TempHi 1 wconstant TempLo 2 wconstant status 3 wconstant config 4 wconstant TH_SP_Hi 5 wconstant TH_SP_Lo 6 wconstant TL_SP_Hi 7 wconstant TL_SP_Lo 8 wconstant TCRIT_SP_Hi 9 wconstant TCRIT_SP_Lo d10 wconstant THYST_SP d11 wconstant ID d12 wconstant soft_reset \ =========================================================================== \ Word for I2C_device \ =========================================================================== : err_msg ." I2C error" ; \ If error, print message \ ( n1 -- ) n1:t/f : err? if err_msg cr then ; \ Read data from register in i2c_device \ ( n1 n2 -- n3 t/f ) n1:register n2:slave_address n3:data t/f:true if there was an error : i2c_rd \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) tuck _eewrite \ ( n2 n1 t/f ) \ Write register swap _eewrite or \ ( n2 t/f ) swap \ ( t/f n2 ) \ Start read_process _eestart \ Write slave address[rd], then receive Acknowledge-bit(ACK:Lo NACK:Hi) 1 or _eewrite or \ ( t/f ) \ Read 1byte ,then set sda to Hi(NACK:master->slave) -1 _eeread \ Stop I2C _eestop swap \ (n3 t/f ) ; \ Read sereis data from series register in i2c_device \ ( n1 n2 n3 -- n4 . . nn t/f ) n1:number n2:register n3:slave_address n4..nn:series data t/f:true if there was an error : i2c_rd_multi \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) st? tuck _eewrite \ ( n1 n3 n2 t/f ) \ Write register st? swap _eewrite or \ ( n1 n3 t/f ) swap \ ( n1 t/f n3 ) st? \ Start read_process _eestart \ Write slave address[rd], then receive Acknowledge-bit(ACK:Lo NACK:Hi) 1 or st? _eewrite or \ ( n1 t/f ) st? \ Read (n1-1)bytes >r \ Push flag ( n1 ) dup 1 > if 1 - 0 do 0 _eeread \ ( n4..nn-1 ) st? loop else drop then \ Read 1byte ,then set sda to Hi(NACK:master->slave) -1 _eeread \ ( n4..nn ) st? r> \ Pop flag ( n4..nn t/f ) \ Stop I2C _eestop st? ; \ Write series data to register in i2c_device \ ( n1..nn n2 n3 n4 -- n4..nn t/f ) n1..nn:data n2:number n3:register n4:slave_address t/f:true if there was an error : i2c_wr_multi \ Start I2C _eestart \ Write slave address[wr], then receive Acknowledge-bit(ACK:Lo NACK:Hi) _eewrite \ ( n1..nn n2 n3 t/f ) \ st? \ Write register swap _eewrite or \ ( n1..nn n2 t/f ) \ st? \ Read n2 byte 0 do \ ( n1 nn t/f ) swap _eewrite or \ ( t/f ) \ st? loop \ Stop I2C _eestop ; \ =========================================================================== \ Main \ =========================================================================== \ Display all register's value : disp_reg ." Address " ." value(hex)" cr 2 TempHi ADT7410 i2c_rd_multi err? swap 8 lshift or 3 rshift . cr 1 status ADT7410 i2c_rd_multi err? . cr 1 config ADT7410 i2c_rd_multi err? . cr 2 TH_SP_Hi ADT7410 i2c_rd_multi err? swap 8 lshift or 3 rshift . cr 2 TL_SP_Hi ADT7410 i2c_rd_multi err? swap 8 lshift or 3 rshift . cr 2 TCRIT_SP_Hi ADT7410 i2c_rd_multi err? swap 8 lshift or 3 rshift . cr 1 THYST_SP ADT7410 i2c_rd_multi err? . cr 1 ID ADT7410 i2c_rd_multi err? . cr ;