This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.¶
Note: Any required file(s) are available in the attachments tab (top right).
I2C.BAS
10 CLS
20 INPUT "How many seconds between Temperature measurements"; delay
30 CLS
40 delay = delay * 1000
50 ds1621_addr = &h48
60 config_cmd = &hAC
70 ' MSb Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 LSb
80 ' Done THF TLF NVB X X POL 1SHOT
90 config_reg = &b00000001
100 start_convert_cmd = &hEE
110 read_temp_cmd = &hAA
120 DIM temp(2)
130 I2CEN 100, 100
140 DO WHILE a$ = ""
150 a$ = INKEY$
160 I2CSEND ds1621_addr, 1, 2, config_cmd, config_reg
170 I2CSEND ds1621_addr, 0, 1, start_convert_cmd
180 I2CSEND ds1621_addr, 1, 1, read_temp_cmd
190 I2CRCV ds1621_addr, 0, 2, temp(0)
200 temp = (temp(0) * 256 + temp(1)) / 128 * 5 / 10
210 IF temp(0) >= 128 THEN
220 temp = temp - 256
230 ENDIF
240 LOCATE 50, 50
250 PRINT "As at " TIME$ " Temperature is" temp " degrees C "
260 PAUSE delay
270 LOOP
280 I2CDIS