迪文科技论坛

 找回密码
 立即注册
搜索
查看: 529|回复: 8

【提问】动态曲线绘制不连贯

[复制链接]

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2023-5-22 12:20:36 | 显示全部楼层 |阅读模式
请教一下,绘制曲线,一次最多写入6E(即110)个点。我用4.3寸COF屏,用c51直接往dgus变量地址写命令,一次写入109或110个点都不显示。108个点以内可以显示。这不是问题,问题是:每次写入100个点,有时候上100个点和下100个点不能平滑连接是什么回事?本来想绘制的波形是连续的,比如正玄波。我在AD1脚加正玄波,经T5L模数转换后,在屏幕上显示出AD1脚的波形。加29Hz左右的正弦波最容易出现上述情况,50Hz会好很多。我是连续采样300个点,采样频率1000hz,然后分3次输入dgus,每次间隔20ms。试过各种方法,包括16kHz采样、改变写dgus的时间数据量等等。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

回帖

35

积分

新手上路

Rank: 1

积分
35
发表于 2023-5-26 23:52:13 | 显示全部楼层
我也是这个问题。而且更新快了也会丢失一些
回复

使用道具 举报

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2023-5-29 16:11:04 | 显示全部楼层
小博学 发表于 2023-5-26 23:52
我也是这个问题。而且更新快了也会丢失一些

嗯。一个点一个点地写就没问题,每个点间隔20ms。应该是迪文屏自身有bug.
回复

使用道具 举报

0

主题

932

回帖

7009

积分

论坛元老

Rank: 8Rank: 8

积分
7009
发表于 2023-5-29 16:54:48 | 显示全部楼层
baiyutang 发表于 2023-5-29 16:11
嗯。一个点一个点地写就没问题,每个点间隔20ms。应该是迪文屏自身有bug.

T5L的屏如果是写的0X0310地址一次写多个点的话一条指令后需要读0X0310的地址的状态是否清零,清零了再写下一条。或者可以用84指令去写处理会快一些。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2023-5-31 16:02:46 | 显示全部楼层
fay 发表于 2023-5-29 16:54
T5L的屏如果是写的0X0310地址一次写多个点的话一条指令后需要读0X0310的地址的状态是否清零,清零了再写 ...

您好,读了一下0x0310,并判断。没啥效果。还是有时候会出现曲线不连贯的现象。
        #define CHART_ADDR                0x0310
        #define CHART_NUM                        1       
        #define CHART_ID                                0       
        #define POINT_NUM                        100
        u16 chart_cmd[3] = {0x5AA5,CHART_NUM<<8,(CHART_ID<<8)+POINT_NUM};
        sys_write_vp(CHART_ADDR,(u8*)&chart_cmd,3);
        sys_write_vp(CHART_ADDR+3,(u8*)&shsh_ad1,POINT_NUM);//写100个点
        do
        {
        sys_delay_about_ms(20);
        buffer = Read_Dgus(0x0310);
        sys_write_vp(0x3020,(u8*)&buffer,1);
        }while(buffer);
        sys_write_vp(CHART_ADDR,(u8*)&chart_cmd,3);
        sys_write_vp(CHART_ADDR+3,(u8*)&shsh_ad1[POINT_NUM],POINT_NUM);        //写第二个100个点
        do
        {
                sys_delay_about_ms(20);;
        buffer = Read_Dgus(0x0310);
        sys_write_vp(0x3020,(u8*)&buffer,1);
        }while(buffer);
        sys_write_vp(CHART_ADDR,(u8*)&chart_cmd,3);
        sys_write_vp(CHART_ADDR+3,(u8*)&shsh_ad1[POINT_NUM+POINT_NUM],POINT_NUM);        //写第201个点到第300个点
        sys_delay_about_ms(1000);
写DGUS就用的这格式应该没有错。数组shsh_ad1里装的数据代表一条平滑的曲线。我帧头5AA5...和要写入缓冲区的数据是分两条指令写入DGUS的,以前我也试过合成一条指令,没区别。
回复

使用道具 举报

15

主题

115

回帖

1910

积分

金牌会员

Rank: 6Rank: 6

积分
1910
发表于 2023-6-1 09:19:44 | 显示全部楼层
本帖最后由 cuijia 于 2023-6-1 09:21 编辑
baiyutang 发表于 2023-5-31 16:02
您好,读了一下0x0310,并判断。没啥效果。还是有时候会出现曲线不连贯的现象。
        #define CHART_ADDR                0x0 ...

检查下这个sys_write_vp这个函数,是不是用的有bug的版本。用我这个void Write_Dgusii_Vp(unsigned int addr,unsigned char *buf,unsigned int len){
        unsigned char i;

        i = (unsigned char)(addr & 0x01);
        addr = addr / 2;
        ADR_H = 0x00;
        ADR_M = (unsigned char)(addr >> 8);
        ADR_L = (unsigned char)(addr);
        ADR_INC = 0x01;
        RAMMODE = 0x8F;
        while(APP_ACK == 0);
        if(i && len > 0){
                RAMMODE = 0x83;
                DATA1 = *buf++;
                DATA0 = *buf++;
                APP_EN = 1;
                while(APP_EN == 1);//重点检查是不是漏了这行了
                len--;
        }
        RAMMODE = 0x8F;
        while(len >= 2){
                DATA3 =* buf++;
                DATA2 =* buf++;
                DATA1 =* buf++;
                DATA0 =* buf++;
                APP_EN = 1;
                while(APP_EN == 1);//重点检查是不是漏了这行了
                len = len - 2;
        }
        if(len){
                RAMMODE = 0x8C;
                DATA3 =* buf++;
                DATA2 =* buf++;
                APP_EN = 1;
                while(APP_EN == 1);//重点检查是不是漏了这行了
        }
        RAMMODE = 0x00;

}
回复

使用道具 举报

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2023-6-1 10:00:37 | 显示全部楼层
cuijia 发表于 2023-6-1 09:19
检查下这个sys_write_vp这个函数,是不是用的有bug的版本。用我这个void Write_Dgusii_Vp(unsigned int ad ...

您好,你这个函数我见过,我也替换过,是一样的。你这个是官方的吧,我那个是熊工家余的。我想起来了,曾经延时多久等前一组100个点写完都没用。
回复

使用道具 举报

15

主题

115

回帖

1910

积分

金牌会员

Rank: 6Rank: 6

积分
1910
发表于 2023-6-1 11:36:54 | 显示全部楼层
baiyutang 发表于 2023-6-1 10:00
您好,你这个函数我见过,我也替换过,是一样的。你这个是官方的吧,我那个是熊工家余的。我想起来了,曾 ...

重点不是写100点再延时,重点是每写4个字节都要加延时,如代码,不然会数据出错的。需要等待cpu操作完成。直接用我这个代码试试。
回复

使用道具 举报

5

主题

19

回帖

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2023-6-1 11:52:01 | 显示全部楼层
早上忙,刚才抽空试了一下,出问题的概率小多了,但还是观察到一次出问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-12 16:47 , Processed in 0.035696 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表