首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Microchip Data Visualizer中绘制浮点数

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

Stack Overflow用户
提问于 2021-04-11 16:46:07
回答 1查看 80关注 0票数 0

我在Microchip的Data Visualizer上通过UART发送一个要绘制成图形的浮点槽时遇到了问题。

我可以毫无问题地绘制int数,但是浮点数快把我逼疯了。

我用Laplace trnasform做了一个正弦波。之后,将其放在'z‘平面上进行双线z变换,然后将方程放入dsPIC33FJ128GP802的主例程中。它工作正常。在终端中,我可以看到这些值,如果我将这些值复制/粘贴到gnumeric上,并制作一个图形,它会显示我的离散正弦波。

当我试图在MPLABX的数据可视化工具中绘制浮点数'yn‘时,问题出现了。在这中间,我遗漏了一些东西。

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

下面是我的主要代码:

代码语言:javascript
复制
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);
        
    }
}

方程式中的变量

代码语言:javascript
复制
yn = 1.9842*yn1-yn2+0.0013*xn1+0.0013*xn2;

是这样和#define在一起的

代码语言:javascript
复制
#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);用于数据可视化工具查看第一个字节和最后一个字节。这就像Microchip视频中的示例。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 03:36:14

好的,这就是答案。

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

你必须创建一个指向字符的指针,将浮点数的地址赋值给该指针(强制转换地址,因为字符指针与浮点型指针不同)。然后只需发送4字节递增字符指针即可。

代码如下:

代码语言:javascript
复制
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,按下一步,绘制变量,完成,您就有了MPLABX时间绘图仪中的变量。

Here is the image of the plot

霍普这能帮到别人。

致以问候。-

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67043008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档