|
我这个库,兼容了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)
|
评分
-
查看全部评分
|