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.
Dependents: max31855Sample Reflow_Oven_Controller test_draft Soldering_Tips_Thermometer
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