一叶扁舟V5 2023-12-25 17:14 采纳率: 100%
浏览 7
已结题

TM512驱动,发送数据与实际显示乱码

问题遇到的现象和发生背景

TM512AD驱动芯片
设置1字段后,发送的数据与实际显示的正确;
设置2字段后,发送的数据与实际显示的不正确;
设置4字段后,发送的数据跟实际显示的不对应;

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
unsigned char addr_data_1[3841]={0};
//芯片上电亮灯可调,默认蓝灯,芯片写码成功后首地址亮黄灯,其他亮白灯
void Write_Tm512_Addr(unsigned short int start_addr,unsigned char hold,unsigned short int num)
{
        unsigned short int i;
        if(start_addr+num*Tm512_Data_Num<0xFFF) //4096
        {               
                addr_data_1[0]=0x00;
                for(i=0;i<num;i++)
                {
                        addr_data_1[i*8+1]=0xAA;
                        addr_data_1[i*8+2]=0xF0;
                        addr_data_1[i*8+3]=0x34;
                        addr_data_1[i*8+4]=0x55;
                        addr_data_1[i*8+5]=0xAC;
                        addr_data_1[i*8+6]=0x80;
                        addr_data_1[i*8+7]=0x80|(((start_addr+i)&0x0FC0)>>6);//高6位
                        addr_data_1[i*8+8]=0x40|((start_addr+i)&0x3F);//低6位
                }
                DataL_to_DataH_V1(addr_data_1,num*8+1);//反转数据
            
                SlaveCPU.pTransmitBuffer_U1 = &addr_data_1[0];
                SlaveCPU.cTransmit_Count_U1 = (num*8+1);
                TM512_IcReset(1); //复位信号时长不能小于2s                       
                Send_En();
       }
}

//传输数据时先传送字符的低位
void TM512_Test(unsigned short int num)
{
    unsigned short int i;
    
    addr_data_1[0]=0x00;
//    i = 1;
    for(i=0;i<num;i++) //
    { 
        addr_data_1[i*4+1]=0x80; //第一颗R色
        addr_data_1[i*4+2]=0x00; //第一颗G色
        addr_data_1[i*4+3]=0x00; //第一颗B色
        addr_data_1[i*4+4]=0x00; //第一颗W色            
    }        
        
    SlaveCPU.pTransmitBuffer_U1 = &addr_data_1[0];
    SlaveCPU.cTransmit_Count_U1 = (num*4+1);
    TM512_IcReset(0); //复位信号时长不能小于2s        
    Send_En();    
}
运行结果及详细报错内容
        if(++fantime2==5000)//500ms定时进入
        {    
            TM512_Test(3);
            fantime2=0;
        }

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

测试一字段,完全正常;

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

设置2字段和4字段,感觉地址设置还是1字段,但字段设置成功了;
1字段(全亮),2字段(亮2色),4字段(亮4色),设置字段都对,实际显示也对;

  • 写回答

8条回答 默认 最新

  • GISer Liu 2023-12-25 17:39
    关注

    以下答案由GPT4与博主编写而成:

    在您提供的代码和问题描述中,您正在尝试用 TM512AD 驱动芯片来控制一些 LED 灯。根据您的描述,单个字段(1字段)工作正常,但是当您尝试使用 2 字段或 4 字段时,显示出现了问题。

    首先,让我们来梳理一下问题:

    1. 您的 Write_Tm512_Addr 函数似乎用于设置地址,并且为每个地址分配一定的数据。
    2. 您的 TM512_Test 函数用于发送颜色数据到 LED,您提到只有在设置为一个字段时才正确显示。
    3. 您提到在设置 2 个或 4 个字段时,发送的数据似乎不正确。

    这里有一些可能导致这个问题的原因:

    • 地址计算错误:在 Write_Tm512_Addr 函数中,地址的计算可能存在问题。特别是对 (start_addr+i)&0x0FC0(start_addr+i)&0x3F 的位操作可能没有给出正确的地址。
    • 数据大小不匹配:在设置字段时,您可能需要发送更多的数据来控制更多的 LED。您需要确保发送的数据量与您尝试控制的 LED 数量相匹配。
    • 时序问题:LED 控制器通常对时序非常敏感。如果您在发送数据之间没有保持正确的时序,可能会导致错误的显示。

    为了解决这个问题,您需要确保:

    • 您发送的数据和地址完全匹配您的硬件配置。
    • 您保持了正确的通信协议和时序要求。
    • 如果您在设置多个字段时更改了数据格式或数据量,您需要相应地调整您的代码。

    这里有一些步骤,您可以尝试来解决问题:

    1. 验证地址计算:确保地址的计算正确无误。检查文档以确保您正确理解了地址位的计算。
    2. 检查数据长度:确保您发送的数据长度与您尝试控制的 LED 数量相符。
    3. 检查时序要求:确认您的代码满足了 TM512AD 芯片的时序要求。
    4. 逐步调试:一步一步地验证每个功能部分,比如先发送一个 LED 的数据,然后是两个,依此类推。

    由于您的问题可能涉及硬件,所以可能需要您直接在您的系统上进行调试。

    如果您需要进一步的帮助,请提供更多的信息,例如您的硬件设置细节、具体如何连接您的 LED,以及 TM512AD 芯片的数据手册或通信协议的详情。这将有助于进一步诊断问题。

    如果我的答案解决了您的问题,请采纳!如果没有,请告诉我您的疑问!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 修改了问题 12月25日
  • 创建了问题 12月25日

悬赏问题

  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 Fatal error in Process MEMORY
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 怎样才能让IDEA不爆红