如何在Microchip Data Visualizer中绘制浮点数



我在通过UART发送浮点值以在Microchip的Data Visualizer上绘制图形之间遇到问题。

我可以毫无问题地绘制int数字,但浮点数字让我抓狂。

我用拉普拉斯变换做了一个正弦波。然后用双线性z变换把它放在"z"平面上,然后把方程放在dsPIC33FJ128GP802的主程序中。它工作正常。在终端中,我可以看到这些值,如果我将这些值复制/粘贴到gnumeric上并制作一张图,它会显示我的离散正弦波。

当我试图在MPLABX的数据可视化工具中绘制浮点数"yn"时,问题就来了。在中间有些东西我不见了。

我在Debian Bullseye上使用MPLABX v5.45,XC16 v1.61。与微控制器的通信是透明的@9600-8N1。

这是我的主要代码:

int main(void)
{
InitClock(); // This is the PLL settings
Init_UART1();// This is the UART Init values for 9600-8-N-1
float states[6] = {0,0,0,0,0,0};
// states [xn-2 xn-1 xn yn yn-1 yn-2]
xn = 1.0; //the initial value

while (1)
{
yn = 1.9842*yn1-yn2+0.0013*xn1+0.0013*xn2; // equation for the sine wave
yn2 = yn1;
yn1 = yn;
xn2 = xn1;
xn1 = xn;

putc(0x03,stdout);
//Here I want to send the xn to plot in MDV
putc(0xFC,stdout);

}
}

方程中的变量

yn = 1.9842*yn1-yn2+0.0013*xn1+0.0013*xn2;

像这个一样使用#define

#define xn  states[2]
#define xn1 states[1]
#define xn2 states[0]
#define yn  states[3]
#define yn1 states[4]
#define yn2 states[5]

WriteUART1(0x03);WriteUART1(0xFC);用于Data Visualizer查看第一个字节和最后一个字节。这就像Microchip视频中的例子。

问题是:如何管理Microchip Data Visualizer绘制的浮动yn

提前谢谢。

好的,这是答案。

一个浮点数,它有32位长,但你不能像int那样一点一点地管理它们。因此,方法是像木炭一样进行管理。

您必须创建一个指向char的指针,将float的地址分配给指针(强制转换地址,因为char指针与float指针不同(。然后只发送4个字节,递增char指针。

这是代码:

while (1)
{
yn = 1.9842 * yn1 - yn2 + 0.0013 * xn1 + 0.0013 * xn2; // sine recursive equation
yn2 = yn1;
yn1 = yn;
xn2 = xn1;
xn1 = xn;
ptr = (char *) & yn; // This is the char pointer ptr saving the address of yn by casting it to char*, because &yn is float*
putc(0x03,stdout); // the start frame for MPLABX Data Visualizer
for (x = 0; x < sizeof(yn) ; x++) // with the for we go around the four bytes of the float
putc(*ptr++,stdout); // we send every byte to the UART
putc(0xFC,stdout); // the end frame for MPLABX Data Visualizer.
}

有了这个工作,你必须配置数据可视化工具,你的包,然后选择新的流变量。您选择一个名称,然后选择帧模式,选择一的补码,在本例中为0x03的开始帧和0xFC的结束帧。只需命名变量,然后键入float32,按next,打印变量,完成即可在MPLABX时间绘图仪中获得变量。

这是图

希望,这对某人有帮助。

问候。-

最新更新