如何在 Microchip Data Visualizer 中绘制浮点数
How to plot a float number in Microchip Data Visualizer
我在通过 UART 发送浮点数以绘制在 Microchip 的数据可视化器上的图表中时遇到问题。
我可以毫无问题地绘制 int
个数字,但是浮点数让我抓狂。
我用拉普拉斯变换做了一个正弦波。然后把它放在'z'平面上用双线性z变换,然后把方程放在一个dsPIC33FJ128GP802的主程序中。它工作正常。在终端中,我可以看到这些值,如果我 copy/paste 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一样管理。
你必须创建一个指向 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.
}
有了这个工作,您必须配置数据可视化工具、波特率,然后 select 新的流变量。你 select 一个名字,然后 Framing Mode 你 select 一个补码,本例中的起始帧为 0x03,结束帧为 0xFC。只需命名变量,然后键入 float32,按下一步,绘制变量,完成,您就可以在 MPLABX 时间绘图仪中获得变量。
Here is the image of the plot
希望,这对某人有所帮助。
问候.-
我在通过 UART 发送浮点数以绘制在 Microchip 的数据可视化器上的图表中时遇到问题。
我可以毫无问题地绘制 int
个数字,但是浮点数让我抓狂。
我用拉普拉斯变换做了一个正弦波。然后把它放在'z'平面上用双线性z变换,然后把方程放在一个dsPIC33FJ128GP802的主程序中。它工作正常。在终端中,我可以看到这些值,如果我 copy/paste 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一样管理。
你必须创建一个指向 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.
}
有了这个工作,您必须配置数据可视化工具、波特率,然后 select 新的流变量。你 select 一个名字,然后 Framing Mode 你 select 一个补码,本例中的起始帧为 0x03,结束帧为 0xFC。只需命名变量,然后键入 float32,按下一步,绘制变量,完成,您就可以在 MPLABX 时间绘图仪中获得变量。
Here is the image of the plot
希望,这对某人有所帮助。
问候.-