Forum Rule: Always post complete source code & details to reproduce any issue!

Hi,

I'm having trouble getting a read from the on chip temp sensor. Is there any additional setup that has to be performed? I can't find anything in the datasheet or accompanying app note.

Thanks,
mauricio

2. Isn't it channel 26 (decimal) ? I think you interpreted 26 as hex and converted to decimal (-> 38) ?
Also, the result is not directly in degrees -- you have to calibrate each part, but this is start:

3. Thanks for the response. I see the channel 26 but I also see 38 getting mapped to 26 in analog.c. What I think the problem was is that I wasn't properly calibrating. Working now!

Thanks again,
mauricio

Code:
```static const uint8_t channel2sc1a[] = {
5, 14, 8, 9, 13, 12, 6, 7, 15, 4,
0, 19, 3, 21, 26, 22
};

{
int result;

if (pin >= 14) {
if (pin <= 23) {
pin -= 14;  // 14-23 are A0-A9
} else if (pin >= 34 && pin <= 39) {
pin -= 24;  // 34-37 are A10-A13, 38 is temp sensor, 39 is vref
} else {
return 0;   // all others are invalid
}
}
//return 0;
if (calibrating) wait_for_cal();
//pin = 5; // PTD1/SE5b, pin 14, analog 0

yield();
// wait
//serial_print(".");
}
//serial_print("\n");
//serial_phex16(result >> 3);
//serial_print("\n");
return result;
}```

4. It's physically channel 26 (dec) in the MCU; Paul's code maps this from channel 38 in an analogRead() call. It's just a (deliberate) coincidence that 0x26 = 38 decimal, so analogRead(0x26) actually works correctly !

5. I just tried it with this....

Code:
```void setup() {
analogReference(INTERNAL);
}

void loop() {
delay(10);
}```
I'm running this right now, and it's printing 2391 and 2392. When I touched the edge of a cold bottle of water to the top of the chip, it went up to 2411 & 2412. When I touch the top of the chip with my soldering iron (in the center, not near any pins), it went down rapidly... somewhere around 2050 before I took the iron way after several seconds.

Of course this is an extremely imprecise test, but hopefully it helps?

6. Internally, the temperature sensor is just a diode (~ 0.7V at room temperature), and this falls at about -1.8 mV/°C. With 12 bits, a code of 2400 represents 2400/4096 * 1.2, or 0.7 V -- as you find (1.2 is approximately the internal reference value).

Each ADC code represents 1/4096*1.2 = 0.3 mV, or about 1/6 of a degree.

Freescale doesn't guarantee the room temperature value or temperature sensitivity, but it is quite easy to get << 1 degree resolution from this.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•