找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3471|回复: 2
收起左侧

自己写的max6675驱动库 Arduino源程序

[复制链接]
ID:276685 发表于 2021-3-14 00:51 | 显示全部楼层 |阅读模式
我这个库,兼容了3种spi模式
软件spi
    硬件spi(arduino 2560默认端口)
      和一个自定义片选的硬件spi

相比网上其他的库有更高的速率。

下面是对比图

2021_03_14_00_42_IMG_3844.JPG

2021_03_14_00_43_IMG_3846.JPG

2021_03_14_00_40_IMG_3842.JPG

  1. #include "max6675.h"

  2. /**************************************************************************/
  3. /*!
  4.     @brief  Initialize a MAX6675 ,  software spi
  5.     @param   SCLK custom  SCLK pin
  6.     @param   MISO custom  MISO pin
  7.     @param   CS   custom  CS   pin
  8. */
  9. /**************************************************************************/
  10. MAX6675::MAX6675(uint8_t SCLK, uint8_t MISO,uint8_t CS) {  
  11. hardware_spi=0;  
  12. MAX6675_SCLK =SCLK;
  13. MAX6675_CS   =CS;
  14. MAX6675_MISO =MISO;

  15. pinMode(SCLK,OUTPUT);
  16. pinMode(CS,OUTPUT);
  17. pinMode(MISO,INPUT);

  18. digitalWrite(CS,HIGH);


  19. }



  20. /**************************************************************************/
  21. /*!
  22.     @brief  Initialize a MAX6675  hardware spi ,use default cs pin (D53 PB0)
  23. */
  24. /**************************************************************************/
  25. MAX6675::MAX6675(){
  26. MAX6675_CS =255;
  27. hardware_spi=1;
  28. SPI.begin();
  29. SPI.setClockDivider(SPI_CLOCK_DIV128);

  30. DDRB= (1<<PB0)|(1<<PB1); //io53 cs
  31. PORTB =(1<<PB0);//set high to cs pin

  32. }



  33. /**************************************************************************/
  34. /*!
  35.     @brief  Initialize a MAX6675 hardware spi,use custom  cs  pin
  36.     @param   CS      custom  CS   pin
  37. */
  38. /**************************************************************************/
  39. MAX6675::MAX6675(uint8_t CS){
  40. MAX6675_CS =CS;
  41. hardware_spi=1;
  42. SPI.begin();
  43. SPI.setClockDivider(SPI_CLOCK_DIV128);

  44. pinMode(CS,OUTPUT);//set high to cs pin
  45. digitalWrite(CS,HIGH);

  46. }


  47. float MAX6675::readCelsius(void){


  48. uint16_t max6675_16bit_read=0;

  49. if(hardware_spi==1){


  50. if(MAX6675_CS==255) PORTB=(0<<PB0) ;
  51. else digitalWrite(MAX6675_CS,LOW) ;
  52.   
  53.   max6675_16bit_read=SPI.transfer16(1);
  54.   if(MAX6675_CS==255)PORTB=(1<<PB0);
  55.   else digitalWrite(MAX6675_CS,HIGH);

  56. if (max6675_16bit_read & 0x4) return NAN;
  57. else   max6675_16bit_read>>= 3;
  58. return max6675_16bit_read * 0.25;


  59. }else{


  60.   digitalWrite (MAX6675_CS,LOW);
  61.   for (int i = 15; i>=0; i--) {
  62.     digitalWrite(MAX6675_SCLK, LOW);

  63.    if (digitalRead(MAX6675_MISO)==1)  max6675_16bit_read |= (1 << i);
  64.      
  65.     digitalWrite(MAX6675_SCLK, HIGH);
  66.   }

  67.   digitalWrite (MAX6675_CS,HIGH);
  68.   max6675_16bit_read>>= 3;

  69. return max6675_16bit_read * 0.25;

  70.   }
  71. }


  72. float MAX6675::readFahrenheit(void) {
  73.   return readCelsius() * 9.0 / 5.0 + 32;
  74.   }



  75. void MAX6675::delay_1ms(void)        //1ms延时函数 主频为8MHz
  76. {   
  77. for(volatile int i=850;i>0;i--); // 2000*4/FREQ

  78. }
  79.                              
  80.                                        

  81. void MAX6675::delay_nms(unsigned int n)       //N ms延时函数
  82.    {
  83.       unsigned int i=0;
  84.       for (i=0;i<n;i++)
  85.       delay_1ms();
  86.      }
复制代码

大家直接解压放到IDE,libraries文件夹即可。或者直接拿cpp,h文件使用

代码下载: MAX6675.zip (2.25 KB, 下载次数: 25)

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:53978 发表于 2021-3-14 09:51 | 显示全部楼层
大佬辛苦了 感谢分享
回复

使用道具 举报

ID:276685 发表于 2021-4-11 14:14 | 显示全部楼层
新来的别下载这个版本了,点我主页热电偶温控那里下载一个包,比这个版本完善,少bug。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表