MLX90614 problem
Hello
I have the MLX90614 plug on my propeller and I plug it like they show on the datasheet figur 10 and in the OBE.
There is the datasheet http://www.sparkfun.com/datasheets/Sensors/Temperature/MLX90614_rev001.pdf
And the OBE that I use. http://obex.parallax.com/objects/613/
My problem is that on the parallax serial terminal the tempter is always o. Did I miss something ?
Do I have to modify something in the code to make this work?
Thank you for the help !
I have the MLX90614 plug on my propeller and I plug it like they show on the datasheet figur 10 and in the OBE.
There is the datasheet http://www.sparkfun.com/datasheets/Sensors/Temperature/MLX90614_rev001.pdf
And the OBE that I use. http://obex.parallax.com/objects/613/
My problem is that on the parallax serial terminal the tempter is always o. Did I miss something ?
Do I have to modify something in the code to make this work?
Thank you for the help !

Comments
MLX90614 Tester V1.0Scanning I2C Bus....
Scan Addr : 100000 01010000, ACK
i2cScan found 1 devices!
MLX90614 Temp: 66.56 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
whit this code
{{ ┌────────────────────────────────────────────────────────┐ │ MLX90614 Infrared Temp Module I2C Test │ │ Modified: Tim Moore │ │ Copyright (c) Sept 2008 Tim Moore │ │ See end of file for terms of use. │ └────────────────────────────────────────────────────────┘ Started from Paul Baker's MLX90614 non I2C test Refer to MLX90614Object.spin for function explanation }} CON _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 OBJ uarts : "pcFullDuplexSerial4FC" '1 COG for 4 serial ports mlx : "MLX90614Object" '0 COG i2cScan : "i2cScan" '0 COG led : "ppdb_ledds" '1 COG config : "config" '0 COG VAR byte ledout[8] PUB Main | temp, i2cSCL, addr, flags config.Init(@pininfo, @i2cinfo) waitcnt(clkfreq*3 + cnt) 'delay for debugging i2cSCL := config.GetPin(CONFIG#I2C_SCL1) addr := config.GetI2C(CONFIG#MLX90614) uarts.Init uarts.AddPort(0,config.GetPin(CONFIG#DEBUG_RX),config.GetPin(CONFIG#DEBUG_TX),{ } UARTS#PINNOTUSED,UARTS#PINNOTUSED,UARTS#DEFAULTTHRESHOLD, { } UARTS#NOMODE,UARTS#BAUD115200) 'Add debug port uarts.Start 'Start the ports 'setup PPDB LED displays led.Init(config.GetPin(CONFIG#PPDB_LED_SEGMENTA1),config.GetPin(CONFIG#PPDB_LED_DIGIT_L1), { } LED#NOSEGMENTS, LED#NODIGITS) uarts.str(0,string("MLX90614 Tester V1.0", 13)) mlx.Init(config.GetPin(CONFIG#MLX90614POWER)) 'power up MLX90614 i2cScan.i2cScan(i2cSCL) 'will not find MLX90614 mlx.LeaveSleep(i2cSCL, addr) 'fiddle with MLX90614 to get it working, i2cScan stops it 'if mlx.Check(i2cSCL, addr) 'make sure its working again ' uarts.str(0,string("MLX90614 found ")) 'else ' uarts.str(0,string("MLX90614 not found ")) 'uarts.hex(0, addr>>1, 2) 'uarts.tx(0, 13) 'flags := mlx.ReadFlags(i2cSCL, addr) 'read flags 'uarts.str(0, string("Flags ")) 'uarts.hex(0, flags, 2) 'uarts.tx(0, 13) 'mlx.WriteEEPROM(i2cSCL, 0, MLX#SMBus_Address, $0) 'erase eeprom 'waitcnt(clkfreq/200 + cnt) 'wait 5ms 'mlx.WriteEEPROM(i2cSCL, 0, MLX#SMBus_Address, $5a) 'write word 'uarts.str(0,string("EEPROM Updated", 13)) 'repeat repeat uarts.str(0,string("MLX90614 Temp: ")) 'display title string temp := mlx.GetTempK(i2cSCL, addr, 1) 'get the temperature in Kelvin uarts.dec(0, temp >> 8) 'display integer potion uarts.tx(0, ".") 'display decimal point if temp & $FF < 10 'insert a 0 if value < 10 uarts.tx(0, "0") uarts.dec(0, temp & $FF) 'display hundredths of a Kelvin uarts.str(0, string(" K, ")) 'display whitespace and unit temp := mlx.GetTempC(i2cSCL, addr, 1) 'get temperature in Celsius uarts.dec(0, temp >> 8) 'display integer portion uarts.tx(0, ".") 'display decimal point if temp & $FF < 10 'insert a 0 if value < 10 uarts.tx(0, "0") uarts.dec(0, temp & $FF) 'display hundredths of a degree uarts.str(0, string("°C ", 13)) 'display unit and provide overwrite whitespace ledout[3] := (temp >> 8) / 10 + "0" 'translate temp into string for led display ledout[2] := (temp >> 8) // 10 + "0" 'needs to be reversed because of digit wiring ledout[1] := (temp & $ff) / 10 + "0" ledout[0] := (temp & $ff)// 10 + "0" ledout[4] := 0 led.str(@ledout) waitcnt(clkfreq >> 1 + cnt) 'wait some time before repeating DAT 'pin configuration table for this project pininfo word CONFIG#PPDB_LED_SEGMENTA1 'pin 0 word CONFIG#PPDB_LED_SEGMENTA2 'pin 1 word CONFIG#PPDB_LED_SEGMENTB 'pin 2 word CONFIG#PPDB_LED_SEGMENTC 'pin 3 word CONFIG#PPDB_LED_SEGMENTD1 'pin 4 word CONFIG#PPDB_LED_SEGMENTD2 'pin 5 word CONFIG#PPDB_LED_SEGMENTE 'pin 6 word CONFIG#PPDB_LED_SEGMENTF 'pin 7 word CONFIG#PPDB_LED_SEGMENTG1 'pin 8 word CONFIG#PPDB_LED_SEGMENTG2 'pin 9 word CONFIG#PPDB_LED_DIGIT_L1 'pin 10 word CONFIG#PPDB_LED_DIGIT_R1 'pin 11 word CONFIG#PPDB_LED_DIGIT_L2 'pin 12 word CONFIG#PPDB_LED_DIGIT_R2 'pin 13 word CONFIG#PPDB_LED_DIGIT_L3 'pin 14 word CONFIG#PPDB_LED_DIGIT_R3 'pin 15 word CONFIG#MLX90614POWER 'pin 16 word CONFIG#NOT_USED 'pin 17 word CONFIG#NOT_USED 'pin 18 word CONFIG#NOT_USED 'pin 19 word CONFIG#NOT_USED 'pin 20 word CONFIG#NOT_USED 'pin 21 word CONFIG#NOT_USED 'pin 22 word CONFIG#NOT_USED 'pin 23 word CONFIG#NOT_USED 'pin 24 word CONFIG#NOT_USED 'pin 25 word CONFIG#NOT_USED 'pin 26 word CONFIG#NOT_USED 'pin 27 word CONFIG#I2C_SCL1 'pin 28 - I2C - eeprom, sensors, rtc, fpu word CONFIG#I2C_SDA1 'pin 29 word CONFIG#DEBUG_TX 'pin 30 word CONFIG#DEBUG_RX 'pin 31 i2cinfo byte CONFIG#MLX90614 'MLX90614 byte 11_0100 byte CONFIG#NOT_USED byte CONFIG#NOT_USED {{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ TERMS OF USE: MIT License │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ │files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ │modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ │is furnished to do so, subject to the following conditions: │ │ │ │The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ │ │ │THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ │WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ │COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ │ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}and if i just unplug the thermometer i get the same on the serial terminal.
Whit this code
{{ ┌────────────────────────────────────────────────────────┐ │ MLX90614 Infrared Temp Module I2C Test │ │ Modified: Tim Moore │ │ Copyright (c) Sept 2008 Tim Moore │ │ See end of file for terms of use. │ └────────────────────────────────────────────────────────┘ Started from Paul Baker's MLX90614 non I2C test Refer to MLX90614Object.spin for function explanation }} CON _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 OBJ uarts : "pcFullDuplexSerial4FC" '1 COG for 4 serial ports mlx : "MLX90614Object" '0 COG i2cScan : "i2cScan" '0 COG led : "ppdb_ledds" '1 COG config : "config" '0 COG VAR byte ledout[8] PUB Main | temp, i2cSCL, addr, flags config.Init(@pininfo, @i2cinfo) waitcnt(clkfreq*3 + cnt) 'delay for debugging i2cSCL := config.GetPin(CONFIG#I2C_SCL1) addr := config.GetI2C(CONFIG#MLX90614) uarts.Init uarts.AddPort(0,config.GetPin(CONFIG#DEBUG_RX),config.GetPin(CONFIG#DEBUG_TX),{ } UARTS#PINNOTUSED,UARTS#PINNOTUSED,UARTS#DEFAULTTHRESHOLD, { } UARTS#NOMODE,UARTS#BAUD115200) 'Add debug port uarts.Start 'Start the ports 'setup PPDB LED displays led.Init(config.GetPin(CONFIG#PPDB_LED_SEGMENTA1),config.GetPin(CONFIG#PPDB_LED_DIGIT_L1), { } LED#NOSEGMENTS, LED#NODIGITS) uarts.str(0,string("MLX90614 Tester V1.0", 13)) mlx.Init(config.GetPin(CONFIG#MLX90614POWER)) 'power up MLX90614 [COLOR=#ff0000] i2cScan.i2cScan(i2cSCL) 'will not find MLX90614[/COLOR] [COLOR=#ff0000] [/COLOR] [COLOR=#ff0000] mlx.LeaveSleep(i2cSCL, addr) 'fiddle with MLX90614 to get it working, i2cScan stops it[/COLOR] [COLOR=#ff0000] [/COLOR] [COLOR=#ff0000] if mlx.Check(i2cSCL, addr) 'make sure its working again[/COLOR] [COLOR=#ff0000] uarts.str(0,string("MLX90614 found ")) [/COLOR] [COLOR=#ff0000] else[/COLOR] [COLOR=#ff0000] uarts.str(0,string("MLX90614 not found ")) [/COLOR] [COLOR=#ff0000] uarts.hex(0, addr>>1, 2)[/COLOR] [COLOR=#ff0000] uarts.tx(0, 13)[/COLOR] [COLOR=#ff0000] [/COLOR] [COLOR=#ff0000] flags := mlx.ReadFlags(i2cSCL, addr) 'read flags[/COLOR] [COLOR=#ff0000] uarts.str(0, string("Flags "))[/COLOR] [COLOR=#ff0000] uarts.hex(0, flags, 2)[/COLOR] [COLOR=#ff0000] uarts.tx(0, 13)[/COLOR] [COLOR=#ff0000] mlx.WriteEEPROM(i2cSCL, 0, MLX#SMBus_Address, $0) 'erase eeprom[/COLOR] [COLOR=#ff0000] waitcnt(clkfreq/200 + cnt) 'wait 5ms[/COLOR] [COLOR=#ff0000] mlx.WriteEEPROM(i2cSCL, 0, MLX#SMBus_Address, $5a) 'write word[/COLOR] [COLOR=#ff0000] uarts.str(0,string("EEPROM Updated", 13))[/COLOR] 'repeat repeat uarts.str(0,string("MLX90614 Temp: ")) 'display title string temp := mlx.GetTempK(i2cSCL, addr, 1) 'get the temperature in Kelvin uarts.dec(0, temp >> 8) 'display integer potion uarts.tx(0, ".") 'display decimal point if temp & $FF < 10 'insert a 0 if value < 10 uarts.tx(0, "0") uarts.dec(0, temp & $FF) 'display hundredths of a Kelvin uarts.str(0, string(" K, ")) 'display whitespace and unit temp := mlx.GetTempC(i2cSCL, addr, 1) 'get temperature in Celsius uarts.dec(0, temp >> 8) 'display integer portion uarts.tx(0, ".") 'display decimal point if temp & $FF < 10 'insert a 0 if value < 10 uarts.tx(0, "0") uarts.dec(0, temp & $FF) 'display hundredths of a degree uarts.str(0, string("°C ", 13)) 'display unit and provide overwrite whitespace ledout[3] := (temp >> 8) / 10 + "0" 'translate temp into string for led display ledout[2] := (temp >> 8) // 10 + "0" 'needs to be reversed because of digit wiring ledout[1] := (temp & $ff) / 10 + "0" ledout[0] := (temp & $ff)// 10 + "0" ledout[4] := 0 led.str(@ledout) waitcnt(clkfreq >> 1 + cnt) 'wait some time before repeating DAT 'pin configuration table for this project pininfo word CONFIG#PPDB_LED_SEGMENTA1 'pin 0 word CONFIG#PPDB_LED_SEGMENTA2 'pin 1 word CONFIG#PPDB_LED_SEGMENTB 'pin 2 word CONFIG#PPDB_LED_SEGMENTC 'pin 3 word CONFIG#PPDB_LED_SEGMENTD1 'pin 4 word CONFIG#PPDB_LED_SEGMENTD2 'pin 5 word CONFIG#PPDB_LED_SEGMENTE 'pin 6 word CONFIG#PPDB_LED_SEGMENTF 'pin 7 word CONFIG#PPDB_LED_SEGMENTG1 'pin 8 word CONFIG#PPDB_LED_SEGMENTG2 'pin 9 word CONFIG#PPDB_LED_DIGIT_L1 'pin 10 word CONFIG#PPDB_LED_DIGIT_R1 'pin 11 word CONFIG#PPDB_LED_DIGIT_L2 'pin 12 word CONFIG#PPDB_LED_DIGIT_R2 'pin 13 word CONFIG#PPDB_LED_DIGIT_L3 'pin 14 word CONFIG#PPDB_LED_DIGIT_R3 'pin 15 word CONFIG#MLX90614POWER 'pin 16 word CONFIG#NOT_USED 'pin 17 word CONFIG#NOT_USED 'pin 18 word CONFIG#NOT_USED 'pin 19 word CONFIG#NOT_USED 'pin 20 word CONFIG#NOT_USED 'pin 21 word CONFIG#NOT_USED 'pin 22 word CONFIG#NOT_USED 'pin 23 word CONFIG#NOT_USED 'pin 24 word CONFIG#NOT_USED 'pin 25 word CONFIG#NOT_USED 'pin 26 word CONFIG#NOT_USED 'pin 27 word CONFIG#I2C_SCL1 'pin 28 - I2C - eeprom, sensors, rtc, fpu word CONFIG#I2C_SDA1 'pin 29 word CONFIG#DEBUG_TX 'pin 30 word CONFIG#DEBUG_RX 'pin 31 i2cinfo byte CONFIG#MLX90614 'MLX90614 byte 11_0100 byte CONFIG#NOT_USED byte CONFIG#NOT_USED {{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ TERMS OF USE: MIT License │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ │files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ │modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ │is furnished to do so, subject to the following conditions: │ │ │ │The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ │ │ │THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ │WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ │COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ │ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}i get this
MLX90614 Tester V1.0
Scanning I2C Bus....
Scan Addr : 100000 01010000, ACK
i2cScan found 1 devices!
MLX90614 not found 5A
Flags FF
EEPROM Updated
MLX90614 Temp: 153.46 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
MLX90614 Temp: 0.00 K, 16776942.242°C
it seem's that the program don't found the MLX906. How cant i fix this " MLX90614 not found 5A " ?
and i don't know why but the PIN 16 is always hight...
In the MLX90614Object there are the pin out
Pin 1 SCL -> Prop Pin (28 works), needs 4.7K pullup to 3.3V
Pin 2 SDA -> Prop Pin (29 works), needs 4.7K pullup to 3.3V
Pin 3 Vdd -> Prop Pin MLXPowerPin
Pin 4 Vss -> Gnd
but the Pin 3 it said Prop Pin MLXPowerPin do i have to plug the MLX90614 VDD pin to common VDD 3.3v or to some pin of the prop ?