Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MAX31855 by
Revision 0:656c522152d4, committed 2012-08-16
- Comitter:
- Stavlin
- Date:
- Thu Aug 16 12:46:52 2012 +0000
- Child:
- 1:5eeee89cb281
- Commit message:
- Initial library release
Changed in this revision
| max31855.cpp | Show annotated file Show diff for this revision Revisions of this file |
| max31855.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/max31855.cpp Thu Aug 16 12:46:52 2012 +0000
@@ -0,0 +1,98 @@
+
+#include <mbed.h>
+#include "max31855.h"
+
+max31855::max31855(SPI& _spi, PinName _ncs) : spi(_spi), ncs(_ncs) {
+
+}
+
+float max31855::read_temp() {
+ short value = 0;
+ float temp = 0;
+
+ //Variables to hold probe temperature
+ uint8_t tempProbeHigh=0;
+ uint8_t tempProbeLow=0;
+
+ //Variables to hold chip temperature and device status
+ uint8_t tempChipHigh=0;
+ uint8_t tempChipLow=0;
+
+ if (pollTimer.read_ms() > 250){
+ //Set CS to initiate transfer and stop conversion
+ select();
+
+ //Read in Probe tempeature
+ tempProbeHigh = spi.write(0);
+ tempProbeLow = spi.write(0);
+
+ //Get the chip temperature and the fault data
+ tempChipHigh = spi.write(0);
+ tempChipLow = spi.write(0);
+
+ //Set the chip temperature
+ chipTemp = (tempChipHigh<<4 | tempChipLow>>4)*0.25;
+
+ //Check for a fault (last bit of transfer is fault bit)
+ if ((tempProbeLow & 1)==1){
+ //Chip reports a fault, extract fault from Chip Temperature data
+ int faultType = (tempChipLow & 7);
+
+ if (faultType==1){
+ //Open circuit (no TC)
+ return 0.1;
+ }else if (faultType==2){
+ //Short to GND
+ return 0.2;
+ }else if (faultType==4){
+ //Short to VCC
+ return 0.4;
+ }else{
+ return 0.5;
+ }
+ }else{
+ //Set CS to stop transfer and restart conversion
+ deselect();
+
+ //Integer value of temperature
+ value = (tempProbeHigh<< 6 | tempProbeLow>>2);
+
+ //Get actual temperature (last 2 bits of integer are decimal 0.5 and 0.25)
+ temp = (value*0.25); // Multiply the value by 0.25 to get temp in C or
+ // * (9.0/5.0)) + 32.0; // Convert value to F (ensure proper floats!)
+
+ return temp;
+ }
+ }else{
+ //Chip not ready for reading
+ return -1;
+ }
+}
+
+void max31855::select() {
+ //Set CS low to start transmission (interrupts conversion)
+ ncs = 0;
+}
+
+void max31855::deselect() {
+ //Set CS high to stop transmission (restarts conversion)
+ ncs = 1;
+ //Reset conversion timer
+ pollTimer.reset();
+}
+
+void max31855::initialise() {
+ //Start the conversion timer
+ pollTimer.start();
+}
+
+int max31855::ready() {
+ //Check to see if conversion is complete
+ if (pollTimer.read_ms() > 250) {
+ //Conversion complete
+ return 1;
+ }else{
+ //Conversion incomplete
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/max31855.h Thu Aug 16 12:46:52 2012 +0000
@@ -0,0 +1,30 @@
+#ifndef MAX31855_h
+#define MAX31855_h
+
+#include "mbed.h"
+
+class max31855
+{
+ SPI& spi;
+ DigitalOut ncs;
+ Timer pollTimer;
+ public:
+
+ max31855(SPI& _spi, PinName _ncs);
+ void select();
+ void deselect();
+ void initialise();
+
+ int ready();
+
+ float chipTemp;
+ float read_temp();
+ private:
+ PinName _CS_pin;
+ PinName _SO_pin;
+ PinName _SCK_pin;
+ int _units;
+ float _error;
+};
+
+#endif
