LM74 temperature sensor Library on SPI I/F
TmpLM74.cpp@1:a29c5af6c1f0, 2011-03-11 (annotated)
- Committer:
- atpolitis
- Date:
- Fri Mar 11 09:55:23 2011 +0000
- Revision:
- 1:a29c5af6c1f0
- Parent:
- 0:9293a89e30e2
correction for negative temperarures
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
atpolitis | 0:9293a89e30e2 | 1 | |
atpolitis | 0:9293a89e30e2 | 2 | #include "mbed.h" |
atpolitis | 0:9293a89e30e2 | 3 | #include "TmpLM74.h" |
atpolitis | 0:9293a89e30e2 | 4 | |
atpolitis | 0:9293a89e30e2 | 5 | |
atpolitis | 0:9293a89e30e2 | 6 | TmpLM74::TmpLM74(PinName mosi, PinName miso, PinName sclk, PinName csLM74): |
atpolitis | 0:9293a89e30e2 | 7 | SPI(mosi, miso, sclk), _csLM74(csLM74) { |
atpolitis | 0:9293a89e30e2 | 8 | |
atpolitis | 0:9293a89e30e2 | 9 | _csLM74 = 1; |
atpolitis | 0:9293a89e30e2 | 10 | |
atpolitis | 0:9293a89e30e2 | 11 | format(8,3); // initialize SPI peripheral |
atpolitis | 0:9293a89e30e2 | 12 | frequency(1000000); // initialize SPI peripheral |
atpolitis | 0:9293a89e30e2 | 13 | |
atpolitis | 0:9293a89e30e2 | 14 | startLM74(); |
atpolitis | 0:9293a89e30e2 | 15 | } |
atpolitis | 0:9293a89e30e2 | 16 | |
atpolitis | 0:9293a89e30e2 | 17 | float TmpLM74::readTemp(void){ |
atpolitis | 0:9293a89e30e2 | 18 | |
atpolitis | 0:9293a89e30e2 | 19 | float realTemp; |
atpolitis | 1:a29c5af6c1f0 | 20 | int16_t tempRegister; |
atpolitis | 0:9293a89e30e2 | 21 | |
atpolitis | 0:9293a89e30e2 | 22 | _csLM74 = 0; |
atpolitis | 0:9293a89e30e2 | 23 | |
atpolitis | 0:9293a89e30e2 | 24 | tempRegister = ((uint16_t) write(0xFF)) << 8; |
atpolitis | 1:a29c5af6c1f0 | 25 | tempRegister |= write(0xFF); |
atpolitis | 1:a29c5af6c1f0 | 26 | |
atpolitis | 0:9293a89e30e2 | 27 | _csLM74 = 1; |
atpolitis | 0:9293a89e30e2 | 28 | |
atpolitis | 1:a29c5af6c1f0 | 29 | // tempRegister = (((uint16_t) 0xE4) << 8) | 0x84; // -55.0 C |
atpolitis | 1:a29c5af6c1f0 | 30 | // tempRegister = (((uint16_t) 0xFB) << 8) | 0x04; // -10.0 C |
atpolitis | 1:a29c5af6c1f0 | 31 | // tempRegister = 0x8000; // power down |
atpolitis | 1:a29c5af6c1f0 | 32 | |
atpolitis | 1:a29c5af6c1f0 | 33 | // pc.printf("TempRegister = 0x%x\n", tempRegister); debugging ONLY |
atpolitis | 0:9293a89e30e2 | 34 | |
atpolitis | 1:a29c5af6c1f0 | 35 | if ((tempRegister & 0x0004) == 0) { // temp reading NOT ready or LM74 in power down |
atpolitis | 1:a29c5af6c1f0 | 36 | if((tempRegister & 0xFFFC) == 0x8000) { // Manufacturer's Device ID Register (power down) ? |
atpolitis | 1:a29c5af6c1f0 | 37 | startLM74(); |
atpolitis | 1:a29c5af6c1f0 | 38 | } |
atpolitis | 1:a29c5af6c1f0 | 39 | tempRegister = INVALID_LM74_TEMP; |
atpolitis | 1:a29c5af6c1f0 | 40 | } else { |
atpolitis | 1:a29c5af6c1f0 | 41 | tempRegister >>= 3; |
atpolitis | 0:9293a89e30e2 | 42 | } |
atpolitis | 1:a29c5af6c1f0 | 43 | realTemp = ((float) tempRegister) * 0.0625; |
atpolitis | 0:9293a89e30e2 | 44 | |
atpolitis | 0:9293a89e30e2 | 45 | return realTemp; |
atpolitis | 0:9293a89e30e2 | 46 | } |
atpolitis | 0:9293a89e30e2 | 47 | // ****************************************************************** |
atpolitis | 0:9293a89e30e2 | 48 | |
atpolitis | 0:9293a89e30e2 | 49 | void TmpLM74::startLM74(void){ |
atpolitis | 0:9293a89e30e2 | 50 | |
atpolitis | 0:9293a89e30e2 | 51 | _csLM74 = 0; |
atpolitis | 0:9293a89e30e2 | 52 | |
atpolitis | 0:9293a89e30e2 | 53 | uint8_t dummy = write(0x00); |
atpolitis | 0:9293a89e30e2 | 54 | dummy = write(0x00); |
atpolitis | 0:9293a89e30e2 | 55 | dummy = write(0x00); |
atpolitis | 0:9293a89e30e2 | 56 | dummy = write(0x00); // this byte sets LM74 to continuous conversion |
atpolitis | 0:9293a89e30e2 | 57 | |
atpolitis | 0:9293a89e30e2 | 58 | _csLM74 = 1; |
atpolitis | 0:9293a89e30e2 | 59 | } |
atpolitis | 0:9293a89e30e2 | 60 | // ****************************************************************** |
atpolitis | 0:9293a89e30e2 | 61 | |
atpolitis | 0:9293a89e30e2 | 62 | void TmpLM74::shutLM74down(void){ |
atpolitis | 0:9293a89e30e2 | 63 | |
atpolitis | 0:9293a89e30e2 | 64 | _csLM74 = 0; |
atpolitis | 0:9293a89e30e2 | 65 | |
atpolitis | 0:9293a89e30e2 | 66 | uint8_t dummy = write(0xFF); |
atpolitis | 0:9293a89e30e2 | 67 | dummy = write(0xFF); |
atpolitis | 0:9293a89e30e2 | 68 | dummy = write(0xFF); // these 2 bytes set LM74 to power down |
atpolitis | 0:9293a89e30e2 | 69 | dummy = write(0xFF); // these 2 bytes set LM74 to power down |
atpolitis | 0:9293a89e30e2 | 70 | |
atpolitis | 0:9293a89e30e2 | 71 | _csLM74 = 1; |
atpolitis | 0:9293a89e30e2 | 72 | } |
atpolitis | 0:9293a89e30e2 | 73 | // ****************************************************************** |