|
我這個庫,兼容了3種spi模式
軟件spi
硬件spi(arduino 2560默認(rèn)端口)
和一個自定義片選的硬件spi
相比網(wǎng)上其他的庫有更高的速率。
下面是對比圖
2021_03_14_00_42_IMG_3844.JPG (1.67 MB, 下載次數(shù): 80)
下載附件
2021-3-14 00:46 上傳
2021_03_14_00_43_IMG_3846.JPG (1.67 MB, 下載次數(shù): 87)
下載附件
2021-3-14 00:46 上傳
2021_03_14_00_40_IMG_3842.JPG (1.33 MB, 下載次數(shù): 85)
下載附件
2021-3-14 00:52 上傳
- #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延時函數(shù) 主頻為8MHz
- {
- for(volatile int i=850;i>0;i--); // 2000*4/FREQ
- }
-
-
- void MAX6675::delay_nms(unsigned int n) //N ms延時函數(shù)
- {
- unsigned int i=0;
- for (i=0;i<n;i++)
- delay_1ms();
- }
復(fù)制代碼
大家直接解壓放到IDE,libraries文件夾即可。或者直接拿cpp,h文件使用
代碼下載:
MAX6675.zip
(2.25 KB, 下載次數(shù): 25)
2021-3-14 00:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|