开源改变世界

Max6675热电偶冲突 #753

推推 grbl 3年前 (2023-02-06) 198次浏览
关闭
Grogyan 打开了这个问题 2014 年 2 月 8 日 · 13条评论
关闭

Max6675热电偶冲突#753

Grogyan 打开了这个问题 2014 年 2 月 8 日 · 13条评论

评论

Max6675热电偶冲突 #753
贡献者

MAX6675 与 RepRap Discount Full Graphic+SDCard 冲突
RAMPS V1-4
Marlin V1.0
Repository 显示最近没有更新 MAX6675 或 Full Graphic 显示器。
显示屏打开,但完全空白

http://www.reprapdiscount.com/home/34-full-graphic-smart-lcd-controller.html#

在没有 LCD 显示器的情况下使用时,MAX6675 不会发生冲突,附带 SDCard
全图形显示器在将 Temp_0 设置为 -2 以外的任何其他值时工作,MAX6675

MAX6675 根本没有温度读数
MAX6675 在引脚 49 上使用 CS
在引脚 53 上使用全图形显示 CS

禁用 SDSupport 并禁用显示并将 MAX6675 的 CS 更改为引脚 53(还将电线从引脚 49 移至引脚 53),给出温度读数。
启用 SDSupport 和禁用显示器没有显示温度读数(引脚 53 上的 SDCard 的电线和 CS,引脚 49 上的 MAX6675),也没有显示(因为我禁用了它)
启用显示和 SDSupport(引脚 53 上的 CS 和电线,MAX6675在引脚 49 上)没有显示或温度读数。
也将 CS 换成了 Display 和 SD,以及 MAX6675 CS 并进行了相同的测试,但仍然不行。

在这个博客上有些提到,关于读取温度太快
http://www.brokentoaster.com/blog/?p=561

Max6675热电偶冲突 #753
贡献者作者

不幸的是,我不够聪明,无法弄清楚如何修复它。虽然问题仍然存在,但我的打印机设置无法正常工作。
我预计将在几周前启动并运行此新设置。

Max6675热电偶冲突 #753

请参阅问题#168。只要您的选择是唯一的并且其他三行在使用前已初始化,它就应该可以工作。我发现我需要更改 temperature.cpp 中的初始化,tp_init()

  #ifdef HEATER_0_USES_MAX6675
    #ifndef SDSUPPORT
      SET_OUTPUT(MAX_SCK_PIN);
      WRITE(MAX_SCK_PIN,0);

      SET_OUTPUT(MAX_MOSI_PIN);
      WRITE(MAX_MOSI_PIN,1);

      SET_INPUT(MAX_MISO_PIN);
      WRITE(MAX_MISO_PIN,1);
    #endif

    SET_OUTPUT(MAX6675_SS);
    WRITE(MAX6675_SS,1);
  #endif
Max6675热电偶冲突 #753
贡献者作者

我检查过芯片选择是否正确初始化。
问题依然存在。

Max6675热电偶冲突 #753

我可以确认,问题仍然存在!我试图将 pins.h 中的热电偶引脚重新映射(启用 SDSUPPORT 时):

#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
  #define MAX_SCK_PIN          52
  #define MAX_MISO_PIN         50
  #define MAX_MOSI_PIN         51
  #define MAX6675_SS       53
#else
  // REMAP THE PINS
  #define MAX_SCK_PIN          63
  #define MAX_MISO_PIN         40
  #define MAX_MOSI_PIN         64
  #define MAX6675_SS           59
#endif

LCD 保持空白,即使 RepRap Discount Full Graphic+SDCard 没有任何干扰。

Max6675热电偶冲突 #753

您是否检查过“何时”启用引脚?

我记得有一个问题,SCK、MISO、MOSI 被代码的多个“特征”
(SD、MAX6675、LCD)使用,但只被一个完全初始化。有一个
功能组合,其中一个功能在另一个功能
初始化这些引脚之前使用。我认为这是液晶显示器。我更改了我的代码,因此每个
功能都初始化了它使用的所有引脚。
SCK、MISO、MOSI 被多次初始化,这没问题。

在 2014 年 6 月 7 日星期六下午 6:22,alien2108 notifications@github.com写道:

我可以确认,问题仍然存在!我试图将 pins.h 中的热电偶引脚重新映射
(启用 SDSUPPORT 时):

#ifndef SDSUPPORT
// 如果使用 SD 支持构建,这些引脚在 SD 库中定义
#define MAX_SCK_PIN 52
#define MAX_MISO_PIN 50
#define MAX_MOSI_PIN 51
#define MAX6675_SS 53
#else
// 重新映射引脚
#define MAX_SCK_PIN 63
#define MAX_MISO_PIN 40
#定义 MAX_MOSI_PIN 64
#define MAX6675_SS 59
#endif

LCD 保持空白,即使 RepRap
Discount Full Graphic+SDCard 没有任何干扰。


直接回复此电子邮件或在 GitHub
https://github.com/ErikZalm/Marlin/issues/753#issuecomment-45423837上查看。

Max6675热电偶冲突 #753

是的,它实际上是 LCD 代码(我有带 SD 卡读卡器的 reprapdiscount 智能 LCD)。你能告诉我们代码的变化吗?

你在那里提到的代码(从 4 月 2 日开始)已经在我的源代码中:

#ifdef HEATER_0_USES_MAX6675
#ifndef SDSUPPORT
SET_OUTPUT(MAX_SCK_PIN);
写(MAX_SCK_PIN,0);

  SET_OUTPUT(MAX_MOSI_PIN);
  WRITE(MAX_MOSI_PIN,1);

  SET_INPUT(MAX_MISO_PIN);
  WRITE(MAX_MISO_PIN,1);
#endif

SET_OUTPUT(MAX6675_SS);
WRITE(MAX6675_SS,1);

#万一

我检查过并为我定义了 SDSUPPORT,因为我的 LCD 也有 SD 卡插槽。

我也想知道为什么定义了所有这些引脚:

  #define MAX_SCK_PIN        
  #define MAX_MISO_PIN       
  #define MAX_MOSI_PIN       
  #define MAX6675_SS

不使用 MAX_MOSI_PIN 或 MAX_MISO_PIN,因为我们只从 MAX 读取(使用 MAX 上的 S0 引脚)。哪一个是正确的?

Max6675热电偶冲突 #753

我的打印机目前坏了,接下来的几周我都忙得不可开交。

如果我没记错的话,LCD 初始化是在 SD
初始化函数初始化 SCK、MISO、MOSI 之前调用的。最简单的更改是
在 LCD、SD 和 MAX6675 的每个初始化函数中初始化这些引脚。
只需查找每个 SS 引脚的初始化位置并复制用于
初始化 SCK、MISO、MOSI 的代码。

在 2014 年 6 月 9 日星期一上午 9:07,alien2108 notifications@github.com写道:

是的,它实际上是 LCD 代码。你能告诉我们代码的变化吗?
自从 4 月 2 日的代码以来,我从你那里看到我的代码中已经有这样
的代码……我会重新检查。


直接回复此电子邮件或在 GitHub
https://github.com/ErikZalm/Marlin/issues/753#issuecomment-45493934上查看。

Max6675热电偶冲突 #753

将 MAX6675 与智能控制器一起使用有什么好消息吗?

Max6675热电偶冲突 #753
贡献者作者

我取得了一些成功

我做的第一件事是将这一行添加到 temperature.cpp 和 pins.h
#include “Sd2PinMap.h”

在第 825 行的 pins.h 中,我删除了“MAX_”前缀
,将代码更改为

#ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support
  #define SCK_PIN          52
  #define MISO_PIN         50
  #define MOSI_PIN         51
  #define MAX6675_SS       66//53
#else
  #define SCK_PIN          52
  #define MISO_PIN         50
  #define MOSI_PIN         51
  #define MAX6675_SS       66//49
#endif

MAX6675_SS 引脚定义更改为数字引脚 66,用于 RAMPS 1.4 板,因为这是最接近的可用引脚,否则未使用引脚

然后在第 742 行的 temperature.cpp 中

#ifdef HEATER_0_USES_MAX6675
    #ifndef SDSUPPORT 
      SET_OUTPUT(MAX_SCK_PIN);
      WRITE(MAX_SCK_PIN,0);

     SET_OUTPUT(MAX_MOSI_PIN);
      WRITE(MAX_MOSI_PIN,1);
     SET_INPUT(MAX_MISO_PIN);
      WRITE(MAX_MISO_PIN,1);
    #endif
        #ifndef SDSUPPORT
      SET_OUTPUT(SCK_PIN);
      WRITE(SCK_PIN,0);

      SET_OUTPUT(MOSI_PIN);
      WRITE(MOSI_PIN,1);

      SET_INPUT(MISO_PIN);
      WRITE(MISO_PIN,1);
    #endif
      /*    SET_OUTPUT(SCK_PIN);
      WRITE(SCK_PIN,0);

      SET_OUTPUT(MOSI_PIN);
      WRITE(MOSI_PIN,1);

      SET_INPUT(MISO_PIN);
      WRITE(MISO_PIN,1);*/
      pinMode(SS_PIN, OUTPUT);
   //SET_OUTPUT(SS_PIN);
  // WRITE(SS_PIN,0);
digitalWrite(SS_PIN,0);  
pinMode(MAX6675_SS, OUTPUT);
   digitalWrite(MAX6675_SS,1);/*
   SET_OUTPUT(MAX6675_SS);
   WRITE(MAX6675_SS,1);*/
  #endif

简而言之,我将声明重命名为标准 SPI 命令,换句话说,删除了它的“MAX_”部分
接下来基本上是将 SD 卡选择引脚“SS_PIN”切换为 0。
原因是程序有首先停止与 SD 卡通话!
否则您将同时尝试与 MAX6675 和 SD 卡通信。

我使用了pinModedigitalWrite因为这是我可以编译和运行代码的唯一方法。

如果有人可以验证此更改并/或对其进行改进,那就太好了。

下一个小警告是显示器读取温度不均匀,这是由于一些电容(我用手指测试温度是否变化),我也不确定读取 SD 卡的代码是否需要切换 MAX6675在与 SD 卡通话之前先关闭。

Max6675热电偶冲突 #753
贡献者作者

-temperature.h中的HEAT_INTERVAL需要重命名为MAX6675_HEAT_INTERVAL

Max6675热电偶冲突 #753
贡献者

对于一个聪明的编码员来说,如果还没有完成,这应该是一个简单的修复方法

Max6675热电偶冲突 #753
贡献者

如果当前错误修复分支中仍然存在,请打开一个新问题

https://github.com/ErikZalm/Marlin/tree/Marlin-v1-bug-fixing