微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HEX中的14位转换-MCP2515和MAX31855

如何解决HEX中的14位转换-MCP2515和MAX31855

关于MAX31855板,温度的有符号值由14位[31:18]位给出。 这14位首先从MSB发送出去,第一位是符号位。

这些是示例值:

Temperature data format

我想将该值放在8插槽阵列的前两个插槽中,该值将通过MCP2515模块通过CAN发送出去。

实际上我正在研究此代码,这是MCP_CAN_lib的发送示例: Library

// CAN Send Example
//

#include <mcp_can.h>
#include <SPI.h>

MCP_CAN CAN0(10);     // Set CS to pin 10

void setup()
{
  Serial.begin(115200);

  // Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
  if(CAN0.begin(MCP_ANY,CAN_500KBPS,MCP_16MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
  else Serial.println("Error Initializing MCP2515...");

  CAN0.setMode(MCP_norMAL);   // Change to normal mode to allow messages to be transmitted
}

byte data[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

void loop()
{
  // send data:  ID = 0x100,Standard CAN Frame,Data length = 8 bytes,'data' = array of data bytes to send
  byte sndStat = CAN0.sendMsgBuf(0x100,8,data);
  if(sndStat == CAN_OK){
    Serial.println("Message Sent Successfully!");
  } else {
    Serial.println("Error Sending Message...");
  }
  delay(100);   // send data per 100ms
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

任何帮助和关于最佳库的建议,都将受到赞赏!

解决方法

我不确定“已转换为十进制格式”是什么意思,为什么会需要它。

这里是如何从板上转移值并将其放入数组的前两个字节(以您的1000C示例为例):

unsigned char data[8] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
int temp = 0b0011'1110'1000'0000'0000'0000'0000'0000;
temp >>= 18;
data[1] = temp & 0xFF;
temp >>= 8;
data[0] = temp & 0xFF;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。