larsie 121 Posted April 3, 2012 Share Posted April 3, 2012 I bluehash, jp430bb, dacoffey and 3 others 6 Quote Link to post Share on other sites
Rei Vilo 695 Posted October 9, 2012 Share Posted October 9, 2012 Thank oy larise! Based on the information shared, I've developed a sketch to read the temperature from the FranchPad MSP430FR5739 built-in NTC and display in Quote Link to post Share on other sites
rebeltaz 36 Posted November 15, 2012 Share Posted November 15, 2012 Your code looks like what I am looking for, but I am trying to adapt this to an Ametherm nt03 50169 thermistor ( www.ametherm.com/datasheetspdf/NT03%2050169.pdf ). I see on the datasheet for your thermistor where you get the values for r0, t0 and beta but I'm not sure about the r1, r2 and max adc. Also, going on your datasheet, I can't figure out how you built the look up table. Maybe you could explain it... kinda of Thermistor Look-up Tables for Dummies Thanks... Quote Link to post Share on other sites
rebeltaz 36 Posted November 23, 2012 Share Posted November 23, 2012 OK.. so I found this on my own. Here's what I found in case anyone else has the same questions I did: The Python script used to generate the look up table is found here: http://reprap.svn.sourceforge.net/viewvc/reprap/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py?view=markup&pathrev=3448 This is the original schematic that goes with the script: http://reprap.org/wiki/Temperature_Sensor_2_0#Schematic The values for R0, T0 and Beta are found in your thermistor's datasheet, where T0 typically equals 25 (degrees Celsius) and R0 is the thermistor's resistance at T0 (25 degrees Celsius). R1 should be 0 if you are not using a resistor in parallel with the thermistor. R2 is the value of the divider resistor you wish to use. The script then calculates the value MAX ADC as well as the look up table. There is a small error in the script. One of the options shown in the help screen is num-temp. This option allows you to specify the number of entries in the table. The code for this option is missing from the script, however. I have added the missing code and I am adding the fixed code below if you need it. For the thermistor shown in this topics code, the command line for the script would read: python createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=1000 --beta=4036 I hope that this helps save some headache and searching. #!/usr/bin/python # # Creates a C code lookup table for doing ADC to temperature conversion # on a microcontroller # based on: http://hydraraptor.blogspot.com/2007/10/measuring-temperature-easy-way.html # # use sensor.jpg as a schematic reference - use '0' for r1 with no parallel resistor """Thermistor Value Lookup Table Generator Generates lookup to temperature values for use in a microcontroller in C format based on: http://hydraraptor.blogspot.com/2007/10/measuring-temperature-easy-way.html The main use is for Arduino programs that read data from the circuit board described here: http://make.rrrf.org/ts-1.0 Usage: python createTemperatureLookup.py [options] Options: -h, --help show this help --r0=... thermistor rating where # is the ohm rating of the thermistor at t0 (eg: 10K = 10000) --t0=... thermistor temp rating where # is the temperature in Celsuis to get r0 (from your datasheet) --beta=... thermistor beta rating. see http://reprap.org/bin/view/Main/MeasuringThermistorBeta --r1=... R1 rating where # is the ohm rating of R1 (eg: 10K = 10000) - typically 0 --r2=... R2 rating where # is the ohm rating of R2 (eg: 10K = 10000) --num-temps=... the number of temperature points to calculate (default: 20) """ from math import * import sys import getopt class Thermistor: "Class to do the thermistor maths" def __init__(self, r0, t0, beta, r1, r2): self.r0 = r0 # stated resistance, e.g. 10K self.t0 = t0 + 273.15 # temperature at stated resistance, e.g. 25C self.beta = beta # stated beta, e.g. 3500 self.vadc = 5.0 # ADC reference self.vcc = 5.0 # supply voltage to potential divider self.k = r0 * exp(-beta / self.t0) # constant part of calculation if r1 > 0: self.vs = r1 * self.vcc / (r1 + r2) # effective bias voltage self.rs = r1 * r2 / (r1 + r2) # effective bias impedance else: self.vs = self.vcc # effective bias voltage self.rs = r2 # effective bias impedance def temp(self,adc): "Convert ADC reading into a temperature in Celcius" v = adc * self.vadc / 1024 # convert the 10 bit ADC value to a voltage r = self.rs * v / (self.vs - v) # resistance of thermistor return (self.beta / log(r / self.k)) - 273.15 # temperature def setting(self, t): "Convert a temperature into a ADC value" r = self.r0 * exp(self.beta * (1 / (t + 273.15) - 1 / self.t0)) # resistance of the thermistor v = self.vs * r / (self.rs + r) # the voltage at the potential divider return round(v / self.vadc * 1024) # the ADC reading def main(argv): r0 = 10000; t0 = 25; beta = 3947; r1 = 680; r2 = 1600; num_temps = int(20); try: opts, args = getopt.getopt(argv, "h", ["help", "r0=", "t0=", "beta=", "r1=", "r2=", "num-temps="]) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): usage() sys.exit() elif opt == "--r0": r0 = int(arg) elif opt == "--t0": t0 = int(arg) elif opt == "--beta": beta = int(arg) elif opt == "--r1": r1 = int(arg) elif opt == "--r2": r2 = int(arg) elif opt == "--num-temps": num_temps = int(arg) if r1: max_adc = int(1023 * r1 / (r1 + r2)); else: max_adc = 1023 increment = int(max_adc/(num_temps-1)); t = Thermistor(r0, t0, beta, r1, r2) adcs = range(1, max_adc, increment); # adcs = [1, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 110, 130, 150, 190, 220, 250, 300] first = 1 print "// Thermistor lookup table for RepRap Temperature Sensor Boards (http://make.rrrf.org/ts)" print "// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)" print "// ./createTemperatureLookup.py --r0=%s --t0=%s --r1=%s --r2=%s --beta=%s --max-adc=%s" % (r0, t0, r1, r2, beta, max_adc) print "// r0: %s" % (r0) print "// t0: %s" % (t0) print "// r1: %s" % (r1) print "// r2: %s" % (r2) print "// beta: %s" % (beta) print "// max adc: %s" % (max_adc) print "#define NUMTEMPS %s" % (len(adcs)) print "short temptable[NUMTEMPS][2] = {" counter = 0 for adc in adcs: counter = counter +1 if counter == len(adcs): print " {%s, %s}" % (adc, int(t.temp(adc))) else: print " {%s, %s}," % (adc, int(t.temp(adc))) print "};" def usage(): print __doc__ if __name__ == "__main__": main(sys.argv[1:]) Quote Link to post Share on other sites
JackPP 0 Posted October 11, 2013 Share Posted October 11, 2013 Hi guys! I would make a question inherent to larsie's code. If i would use it in Code Composer Studio 5.5, how can i adapt it?Thanks!! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.