单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3436|回复:2
打印上一主题下一主题

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

[复制链接]
跳转到指定楼层
楼主
ID:276685发表于 2021-3-14 00:51|只看该作者|只看大图回帖奖励
我这个库,兼容了3种spi模式
软件spi
   硬件spi(arduino 2560默认端口)
     和一个自定义片选的硬件spi

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

下面是对比图







  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)


评分

黑币 +80
收起理由
+ 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 单片机教程网