通过X10接收和解码曼彻斯特码
Receiving and decoding Manchester Code over X10
你好,我正在做一个项目,需要通过X10将一些数据从一个微控制器(特别是ATmega32)发送到另一个微计算机(同样是ATmega 32)。两者的时钟频率均为3.8646 MHz,并在STK500上运行。
看起来我发送的数据是正确的,但我的解码器似乎在解码数据时遇到了问题。
首先,当我通过X10接收数据(1字节)时,我将每个曼彻斯特位保存在一个无符号的char数组中(1/0作为起始位,其余为数据)。然后,我将数据保存在另一个无符号字符数组(称为缓冲区)中。出于测试目的,我通过UART在终端上显示数据。相关代码可在此处找到。
unsigned char buffer[9];
index = 2;
for (int i = 0; i < BYTE; i++)
{
// If bit 1 is received save that
if (reciever[index] != 0 && reciever[index+1] == 0)
{
buffer[i] = 1;
index += 2;
}
// If bit 0 is received save that
else if (reciever[index] == 0 && reciever[index+1] != 0)
{
buffer[i] = 0;
index += 2;
}
else
break;
}
for (int i = 0; i < BYTE; i++)
{
SendChar(buffer[i]);
}
mode = MODE_IDLE;
这似乎是有效的,例如,如果发送器发送小数点150,终端显示[120 0 0 120 0 120 0](由于某种原因,"1"不会保存为"1",但"0"将保存为"0"),这表明数据发送正确。
然而,如果我尝试将缓冲区解码为单个字符字节,我永远不会得到预期的结果。在下面的代码中,我再次将接收到的数据保存在缓冲区中,然后尝试在终端和STK500上的一些LED上显示它们。
unsigned char buffer[9];
index = 2;
for (int i = 0; i < BYTE+1; i++)
{
// If bit 1 is received save that
if (reciever[index] != 0 && reciever[index+1] == 0)
{
buffer[i] = 1;
index += 2;
}
// If bit 0 is received save that
else if (reciever[index] == 0 && reciever[index+1] != 0)
{
buffer[i] = 0;
index += 2;
}
else
break;
}
unsigned char shifter = 0;
unsigned char byte = 0;
for (int i = 0; i < BYTE+1; i++)
{
if (buffer[i] != 0)
{
shifter = (1 << (BYTE - (i+1)));
byte += shifter;
}
else if (buffer[i] = 0)
{
shifter = 0;
byte += shifter;
}
}
mode = MODE_IDLE;
SendChar(byte);
writeAllLEDs(byte);
在终端上,我得到了128和120,在STK500上,只有led7和led1亮起,这表明我的解码已经关闭。然而,如果尝试通过Atmel Studio进行调试,变量byte总是显示出我选择的正确值。
我真的需要一些帮助,因为我不知道发生了什么
writeAllLED()
PORTC = ~pattern;
SendChar()
// Wait for transmitter register empty (ready for new character)
while ( (UCSRA & (1<<5)) == 0 )
{}
// Then send the character
UDR = Tegn;
您是否尝试使用另一个LED端口?也许硬件有故障。
相关文章:
- 无法解码base64+deflate数据
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 使用已使用 java 编码的 openssl 解码数据
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 从原始字节解码协议缓冲区(以 C++为单位)
- FFmpeg——使用硬件加速进行视频解码
- 如何从WIC解码器确定自上而下/自下而上?
- 使用公钥加密消息:BER 解码错误
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 在 GLFW 窗口中显示 FFMPEG 解码帧
- 如何将 MJPEG 解码为原始 RGB(或 YUV)数据
- 编译时 Base64 解码 C++
- 解码H264流时如何跳过帧?
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- pyserial arduino 字节阵列解码问题
- 将帧从 h264 流解码到 OpenCV Mat
- 连接无线电流和 MP3 解码器
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 通过X10接收和解码曼彻斯特码