program for temperature reading with mlx90615

Dependencies:   crc8

Committer:
glsfacom
Date:
Thu Jul 16 10:58:18 2020 -0400
Revision:
2:c4552b8c47c0
Parent:
0:db513e91a2c9
One MLX setup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glsfacom 0:db513e91a2c9 1 #include "smbus.h"
glsfacom 0:db513e91a2c9 2
glsfacom 0:db513e91a2c9 3 void smbus_start()
glsfacom 0:db513e91a2c9 4 {
glsfacom 0:db513e91a2c9 5 i2c.start();
glsfacom 0:db513e91a2c9 6 }
glsfacom 0:db513e91a2c9 7
glsfacom 0:db513e91a2c9 8 void smbus_stop()
glsfacom 0:db513e91a2c9 9 {
glsfacom 0:db513e91a2c9 10 i2c.stop();
glsfacom 0:db513e91a2c9 11 }
glsfacom 0:db513e91a2c9 12
glsfacom 0:db513e91a2c9 13 unsigned char smbus_send_byte(unsigned char byte)
glsfacom 0:db513e91a2c9 14 {
glsfacom 0:db513e91a2c9 15 return i2c.write(byte);
glsfacom 0:db513e91a2c9 16 }
glsfacom 0:db513e91a2c9 17
glsfacom 0:db513e91a2c9 18 unsigned char smbus_send_address(unsigned char address, unsigned char rw)
glsfacom 0:db513e91a2c9 19 {
glsfacom 0:db513e91a2c9 20 unsigned char addr = address << 1;
glsfacom 0:db513e91a2c9 21 addr = addr + rw;
glsfacom 0:db513e91a2c9 22
glsfacom 0:db513e91a2c9 23 return smbus_send_byte(addr);
glsfacom 0:db513e91a2c9 24 }
glsfacom 0:db513e91a2c9 25
glsfacom 0:db513e91a2c9 26 unsigned char smbus_read_byte(unsigned char *status)
glsfacom 0:db513e91a2c9 27 {
glsfacom 0:db513e91a2c9 28 unsigned char byte;
glsfacom 0:db513e91a2c9 29
glsfacom 0:db513e91a2c9 30 byte = i2c.read(i2c.ACK);
glsfacom 0:db513e91a2c9 31
glsfacom 0:db513e91a2c9 32
glsfacom 0:db513e91a2c9 33 return byte;
glsfacom 0:db513e91a2c9 34 }
glsfacom 0:db513e91a2c9 35
glsfacom 0:db513e91a2c9 36 unsigned int smbus_read_uint(unsigned char *status, unsigned char read_mode){
glsfacom 0:db513e91a2c9 37
glsfacom 0:db513e91a2c9 38 unsigned char byte0, byte1, low, high, sts = 0;
glsfacom 0:db513e91a2c9 39 unsigned int value = 0x0000;
glsfacom 0:db513e91a2c9 40
glsfacom 0:db513e91a2c9 41
glsfacom 0:db513e91a2c9 42 byte0 = smbus_read_byte(&sts);
glsfacom 0:db513e91a2c9 43 *status = sts;
glsfacom 0:db513e91a2c9 44
glsfacom 0:db513e91a2c9 45 if(*status != 0x8B)
glsfacom 0:db513e91a2c9 46 return 0;
glsfacom 0:db513e91a2c9 47
glsfacom 0:db513e91a2c9 48 byte1 = smbus_read_byte(&sts);
glsfacom 0:db513e91a2c9 49 *status = sts;
glsfacom 0:db513e91a2c9 50
glsfacom 0:db513e91a2c9 51 if(read_mode == BIG_ENDIAN){
glsfacom 0:db513e91a2c9 52 high = byte0;
glsfacom 0:db513e91a2c9 53 low = byte1;
glsfacom 0:db513e91a2c9 54 }
glsfacom 0:db513e91a2c9 55 else{
glsfacom 0:db513e91a2c9 56 high = byte1;
glsfacom 0:db513e91a2c9 57 low = byte0;
glsfacom 0:db513e91a2c9 58 }
glsfacom 0:db513e91a2c9 59
glsfacom 0:db513e91a2c9 60 value |= low;
glsfacom 0:db513e91a2c9 61 value |= high<<8;
glsfacom 0:db513e91a2c9 62
glsfacom 0:db513e91a2c9 63 return value;
glsfacom 0:db513e91a2c9 64
glsfacom 0:db513e91a2c9 65 }
glsfacom 0:db513e91a2c9 66
glsfacom 0:db513e91a2c9 67 unsigned char smbus_write_uint(unsigned char read_mode, unsigned int value){
glsfacom 0:db513e91a2c9 68
glsfacom 0:db513e91a2c9 69 unsigned char lsb, msb, byte0, byte1, status;
glsfacom 0:db513e91a2c9 70
glsfacom 0:db513e91a2c9 71 lsb = value;
glsfacom 0:db513e91a2c9 72 msb = value >> 8;
glsfacom 0:db513e91a2c9 73
glsfacom 0:db513e91a2c9 74 if(read_mode == BIG_ENDIAN){
glsfacom 0:db513e91a2c9 75 byte0 = msb;
glsfacom 0:db513e91a2c9 76 byte1 = lsb;
glsfacom 0:db513e91a2c9 77 }
glsfacom 0:db513e91a2c9 78 else{
glsfacom 0:db513e91a2c9 79 byte1 = msb;
glsfacom 0:db513e91a2c9 80 byte0 = lsb;
glsfacom 0:db513e91a2c9 81 }
glsfacom 0:db513e91a2c9 82
glsfacom 0:db513e91a2c9 83 status = smbus_send_byte(byte0);
glsfacom 0:db513e91a2c9 84 if(!i2c.ACK) return status;
glsfacom 0:db513e91a2c9 85
glsfacom 0:db513e91a2c9 86 status = smbus_send_byte(byte1);
glsfacom 0:db513e91a2c9 87 return status;
glsfacom 0:db513e91a2c9 88
glsfacom 0:db513e91a2c9 89
glsfacom 0:db513e91a2c9 90 }
glsfacom 0:db513e91a2c9 91