开源改变世界

在temperature.cpp中使用max6675编译报错 #422

推推 grbl 3年前 (2023-02-05) 220次浏览
关闭
frollard 打开了这个问题 2013 年 3 月 16 日 · 7条评论
关闭

在temperature.cpp中使用max6675编译报错#422

frollard 打开了这个问题 2013 年 3 月 16 日 · 7条评论

评论

在temperature.cpp中使用max6675编译报错 #422

https://github.com/ErikZalm/Marlin/blob/Marlin_v1/Marlin/temperature.cpp#L849

使用max6675 spi热电偶放大器编译错误。
我认为这只是一个错字,

#define MAX6675_HEAT_INTERVAL 250
long max6675_previous_millis = -HEAT_INTERVAL;

HEAT_INTERVAL 未定义。
应该

#define MAX6675_HEAT_INTERVAL 250
long max6675_previous_millis = -MAX6675_HEAT_INTERVAL;

编辑:编译正常,但上传时,其余代码在某处锁定了 arduino,它停止响应串行命令。伙计……热电偶放大器令人沮丧。

在temperature.cpp中使用max6675编译报错 #422

我遇到同样的问题….

在temperature.cpp中使用max6675编译报错 #422

我有同样的问题,有人解决了吗?如何?

在temperature.cpp中使用max6675编译报错 #422

我能够通过重写函数 read_max6675() 来部分解决这个问题,
这个代码已经变成了这个代码,它以 RAW 格式发布温度,然后在固件值中乘以 0.25 得到摄氏度。

int read_max6675()
{
  if (millis() - max6675_previous_millis < MAX6675_HEAT_INTERVAL) 
    return max6675_temp;

  max6675_previous_millis = millis();
  max6675_temp = 0;

    WRITE(MAX6675_SS,0); // Enable device

    /* Cycle the clock for dummy bit 15 */
    WRITE(MAX_SCK_PIN,1);
    WRITE(MAX_SCK_PIN,0);

    // Read bits 14-3 from MAX6675 for the Temp Loop for each bit reading the max6675_temp and storing the final max6675_temp in 'temp' 
    for (int i=11; i>=0; i--){
      WRITE(MAX_SCK_PIN,1);  // Set Clock to HIGH
      max6675_temp += READ(MAX_MISO_PIN) << i;  // Read data and add it to our variable
      WRITE(MAX_SCK_PIN,0);  // Set Clock to LOW
    }

    /* Read the TC Input inp to check for TC Errors */
    WRITE(MAX_SCK_PIN,1); // Set Clock to HIGH
    error_tc = READ(MAX_MISO_PIN); // Read data
    WRITE(MAX_SCK_PIN,0);  // Set Clock to LOW

    WRITE(MAX6675_SS, 1); //Disable Device

    if(error_tc != 0) {
    return 2000; 
  } else { 
    return max6675_temp; 
  }
}

问题出现在另一个地方,我不完全理解,但我认为这部分代码存在问题。

#ifdef HEATER_0_MINTEMP
  minttemp[0] = HEATER_0_MINTEMP;
  while(analog2temp(minttemp_raw[0], 0) < HEATER_0_MINTEMP) {
#if HEATER_0_RAW_LO_TEMP < HEATER_0_RAW_HI_TEMP
    minttemp_raw[0] += OVERSAMPLENR;
#else
    minttemp_raw[0] -= OVERSAMPLENR;
#endif
  }
#endif //MINTEMP
#ifdef HEATER_0_MAXTEMP
  maxttemp[0] = HEATER_0_MAXTEMP;
  while(analog2temp(maxttemp_raw[0], 0) > HEATER_0_MAXTEMP) {
#if HEATER_0_RAW_LO_TEMP < HEATER_0_RAW_HI_TEMP
    maxttemp_raw[0] -= OVERSAMPLENR;
#else
    maxttemp_raw[0] += OVERSAMPLENR;
#endif
  }
#endif //MAXTEMP
....
...
#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
    if(current_temperature_raw[0] <= maxttemp_raw[0]) {
#else
    if(current_temperature_raw[0] >= maxttemp_raw[0]) {
#endif
        max_temp_error(0);  
    }
#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
    if(current_temperature_raw[0] >= minttemp_raw[0]) {
#else
    if(current_temperature_raw[0] <= minttemp_raw[0]) {
#endif
        min_temp_error(0);    
    }

如果我没记错的话,这里的计算是基于通过 Max6675 连接的热敏电阻而不是热电偶这一事实。

在temperature.cpp中使用max6675编译报错 #422

更改
long max6675_previous_millis = -HEAT_INTERVAL;

长max6675_previous_millis
= -MAX6675_HEAT_INTERVAL;

为我工作。还没有挂断。

在temperature.cpp中使用max6675编译报错 #422

我仍然需要更改 temperature.cpp

long max6675_previous_millis = -HEAT_INTERVAL;

max6675_previous_millis = -MAX6675_HEAT_INTERVAL;

让它编译。我没有锁定。

在temperature.cpp中使用max6675编译报错 #422
贡献者

这个是大约一年前创建的,有很多变化,请下载最新的 marlin 副本,看看问题是否仍然存在。您还可以使用最新的 arduino IDE 来刷新 marlin 固件。如果您的板文件等只能在旧的 ide 下工作,请先升级它们,以便它们在最新的 IDE 下工作。

如果您为不在https://github.com/ErikZalm/Marlin/tree/Marlin_v1/ArduinoAddons中的硬件创建板文件,请 fork marlin 并添加文件,然后创建一个拉取请求,以便我们可以获得硬件支持的。这也将使人们了解人们正在使用什么硬件。