我这个库,兼容了3种spi模式
软件spi
硬件spi(arduino 2560默认端口)
和一个自定义片选的硬件spi
相比网上其他的库有更高的速率。
下面是对比图
- #include "max6675.h"
-
/**************************************************************************/
- /*!
- @brief Initialize a MAX6675 , software spi
- @param SCLK custom SCLK pin
- @param MISO custom MISO pin
- @param CS custom CS pin
- */
-
/**************************************************************************/
- MAX6675::MAX6675(uint8_t SCLK, uint8_t MISO,uint8_t CS) {
- hardware_spi=0;
- MAX6675_SCLK =SCLK;
- MAX6675_CS =CS;
- MAX6675_MISO =MISO;
- pinMode(SCLK,OUTPUT);
- pinMode(CS,OUTPUT);
- pinMode(MISO,INPUT);
- digitalWrite(CS,HIGH);
- }
-
/**************************************************************************/
- /*!
- @brief Initialize a MAX6675 hardware spi ,use default cs pin (D53 PB0)
- */
-
/**************************************************************************/
- MAX6675::MAX6675(){
- MAX6675_CS =255;
- hardware_spi=1;
- SPI.begin();
-
SPI.setClockDivider(SPI_CLOCK_DIV128);
- DDRB= (1<<PB0)|(1<<PB1); //io53 cs
- PORTB =(1<<PB0);//set high to cs pin
- }
-
/**************************************************************************/
- /*!
- @brief Initialize a MAX6675 hardware spi,use custom cs pin
- @param CS custom CS pin
- */
-
/**************************************************************************/
- MAX6675::MAX6675(uint8_t CS){
- MAX6675_CS =CS;
- hardware_spi=1;
- SPI.begin();
-
SPI.setClockDivider(SPI_CLOCK_DIV128);
- pinMode(CS,OUTPUT);//set high to cs pin
- digitalWrite(CS,HIGH);
- }
-
float MAX6675::readCelsius(void){
- uint16_t max6675_16bit_read=0;
- if(hardware_spi==1){
- if(MAX6675_CS==255) PORTB=(0<<PB0) ;
-
else digitalWrite(MAX6675_CS,LOW) ;
-
-
max6675_16bit_read=SPI.transfer16(1);
-
if(MAX6675_CS==255)PORTB=(1<<PB0);
-
else digitalWrite(MAX6675_CS,HIGH);
- if (max6675_16bit_read& 0x4) return NAN;
- else max6675_16bit_read>>= 3;
- return max6675_16bit_read * 0.25;
- }else{
- digitalWrite (MAX6675_CS,LOW);
- for (int i = 15; i>=0; i--) {
-
digitalWrite(MAX6675_SCLK, LOW);
-
if (digitalRead(MAX6675_MISO)==1) max6675_16bit_read |= (1<< i);
-
-
digitalWrite(MAX6675_SCLK, HIGH);
- }
- digitalWrite (MAX6675_CS,HIGH);
- max6675_16bit_read>>= 3;
- return max6675_16bit_read * 0.25;
- }
- }
-
float MAX6675::readFahrenheit(void) {
- return readCelsius() * 9.0 / 5.0 + 32;
- }
- void MAX6675::delay_1ms(void) //1ms延时函数 主频为8MHz
- {
- for(volatile int i=850;i>0;i--); // 2000*4/FREQ
- }
-
-
-
void MAX6675::delay_nms(unsigned int n) //N ms延时函数
- {
- unsigned int i=0;
- for (i=0;i<n;i++)
- delay_1ms();
- }
复制代码
大家直接解压放到IDE,libraries文件夹即可。或者直接拿cpp,h文件使用
代码下载:
MAX6675.zip(2.25 KB, 下载次数: 25)