找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2017|回复: 13
打印 上一主题 下一主题
收起左侧

唯创芯片WT588H16-16S芯片一线串口控制,DAC没有检测出波形是什么问题,求解

[复制链接]
跳转到指定楼层
楼主
本帖最后由 qwettyuio 于 2021-12-14 16:48 编辑

#include <reg52.h>
#define UC8 unsigned char
#define UI16 unsigned int
#define one_line_DATA  P1
void Line_1A_WT588H(UI16 USER_DATA)
{
        UC8 i;
        bit B_DATA;
        UC8 num_temp=0;
        UI16 ddata_temp ,pdata_temp;
        ddata_temp = USER_DATA;
        pdata_temp = ddata_temp& 0X00FF;
        ddata_temp>>= 8;
        pdata_temp<<= 8;
        ddata_temp |= pdata_temp;//用户数据赋值
        num_temp = 16;
        one_line_DATA = 0;
        Delay_10us(500); //延时 5MS
        B_DATA = (bit)(ddata_temp&0X0001);
        for(i=0;i<num_temp;i++)
        {
                if(i==8)
                {
                        one_line_DATA = 1;
                        Delay_10us(200); //延时 2MS
                        one_line_DATA = 0;
                        Delay_10us(500); //延时 5MS
                }
                one_line_DATA = 1; //拉高数据传输线,准备传输数据
                if(B_DATA==0)
                { /*表示逻辑电平 0*/
                        Delay_10us(20); // 延时 200us
                        one_line_DATA = 0;
                        Delay_10us(60); // 延时 600us
                }
                else
                { /*表示逻辑电平 1*/
                        Delay_10us(60); // 延时 600us
                        one_line_DATA = 0; Delay_10us(20); // 延时 200us
                }
                ddata_temp = ddata_temp>>1;
                B_DATA = (bit)(ddata_temp&0x0001);
        }
        one_line_DATA = 1;
}


原理图.png (49.7 KB, 下载次数: 21)

原理图.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-12-14 15:13 | 只看该作者
你先用我给你的代码试试,可能的话,监测一下BUSY口是否有信号,然后再考虑 DAC输出的问题。

P.S. 你如果要连续发送两条指令的话,根据我的经验,两条指令之间应该间隔30ms以上。才能确保两条指令都被接受并且执行,
                                Line_1A_WT588H(0x0001);     //播放1地址音乐
                                Line_1A_WT588H(0xFFF2);     //循环1地址播放
你这样写,很可能会作为噪音被直接抛弃。
回复

使用道具 举报

板凳
ID:858009 发表于 2021-12-14 15:57 | 只看该作者
188610329 发表于 2021-12-14 15:13
你先用我给你的代码试试,可能的话,监测一下BUSY口是否有信号,然后再考虑 DAC输出的问题。

P.S. 你如 ...

试用了一下代码,连接P17引脚LED不断变化,但是busy引脚没有变化,一直是高电平
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
#ifndef _WT588_C_
#define _WT588_C_

sbit WT588IO = P1^7;

void Delay25us(u8 DelayTime)
{
        u8 t;
    while(DelayTime--)
    {
                t = 147;
        while (--t);      
        }
}
void   SendByte_WT588(u8 ByteDat)
{
        u8 i;
        WT588IO  = 0;
    Delay25us(200);                //delay 5ms
    WT588IO  = 1;
    for(i=0;i<8;i++)
    {
                Delay25us(8);      //delay 200us
        ByteDat>>= 1;
        WT588IO= CY;       //设置1/0
        Delay25us(16);     //delay 400us
        WT588IO= 0;        //IO低电平
        Delay25us(8);      //delay 200us
        WT588IO= 1;        //IO高电平
     }
}
void  SendOrder_WT588(u16 WTOrder)
{
        SendByte_WT588(WTOrder >> 8);  //发送高八位指令
    Delay25us(80);                 //delay 2ms
    SendByte_WT588(WTOrder);       //发送低八位指令
}
void main()
{
        while(1)
        {
                SendOrder_WT588(0x0010);                               
        }
}
回复

使用道具 举报

地板
ID:624769 发表于 2021-12-14 16:35 | 只看该作者
不是啊, 我用的是  P17 你应该  sbit 到你的 IO上才对吧? 你实际连接的的是单片机哪个IO?  P01?
回复

使用道具 举报

5#
ID:858009 发表于 2021-12-14 16:38 | 只看该作者
188610329 发表于 2021-12-14 16:35
不是啊, 我用的是  P17 你应该  sbit 到你的 IO上才对吧? 你实际连接的的是单片机哪个IO?  P01?

P17连接到data端口
回复

使用道具 举报

6#
ID:858009 发表于 2021-12-14 16:41 | 只看该作者
188610329 发表于 2021-12-14 16:35
不是啊, 我用的是  P17 你应该  sbit 到你的 IO上才对吧? 你实际连接的的是单片机哪个IO?  P01?

这是官方给的控制函数,和以前我使用的STM32一键连接JQ8400-FLJQ8900语音模块不一样,不知道那一步骤出现了问题
/*-------------------------------------- ;模块名称:
Line_1A_WT588H(UI16 USER_DATA) ;
功 能:实现一线串口通信函数 ;
入 参:USER_DATA ;
出 参: ; one_line_DATA
//数据线 ;-------------------------------------*/
#define UC8 unsigned char
#define UI16 unsigned int
#define one_line_DATA P1

void Line_1A_WT588H(uint USER_DATA)
{
        uchar i;
        bit B_DATA;          
        ddata_temp = USER_DATA;
        pdata_temp = ddata_temp& 0X00FF;
        ddata_temp>>= 8;
        pdata_temp<<= 8;
        ddata_temp |= pdata_temp;//用户数据赋值
        num_temp = 16;
        one_line_DATA = 0;
        Delay_10us(500); //延时 5MS
        B_DATA = (bit)(ddata_temp&0X0001);
        for(i=0;i<num_temp;i++)
        {
                if(i==8)
                {
                        one_line_DATA = 1;
                        Delay_10us(200); //延时 2MS
                        one_line_DATA = 0;
                        Delay_10us(500); //延时 5MS
                }
                one_line_DATA = 1; //拉高数据传输线,准备传输数据
                if(B_DATA==0)
                { /*表示逻辑电平 0*/
                        Delay_10us(20); // 延时 200us
                        one_line_DATA = 0;
                        Delay_10us(60); // 延时 600us
                }
                else
                { /*表示逻辑电平 1*/
                        Delay_10us(60); // 延时 600us
                        one_line_DATA = 0; Delay_10us(20); // 延时 200us
                }
                ddata_temp = ddata_temp>>1;
                B_DATA = (bit)(ddata_temp&0x0001);
        }
        one_line_DATA = 1;
}
回复

使用道具 举报

7#
ID:624769 发表于 2021-12-14 16:44 | 只看该作者
那你就要确认,你的 声音文件又没有正确烧录到  Flash 里面了。 如果 Flash 里面空的也是无法播放的。
回复

使用道具 举报

8#
ID:624769 发表于 2021-12-14 16:46 | 只看该作者
最关键的是:
测试的话,要这样写……
你之前那样写, 不停的在发指令, WT588 压根没机会执行指令。

void main()
{
                Delay25us(200);
                Delay25us(200);
                Delay25us(200);
                SendOrder_WT588(0x0010);                                
                while(1);
}
回复

使用道具 举报

9#
ID:858009 发表于 2021-12-14 16:47 | 只看该作者
188610329 发表于 2021-12-14 16:44
那你就要确认,你的 声音文件又没有正确烧录到  Flash 里面了。 如果 Flash 里面空的也是无法播放的。

官方烧录进去才发货给我的,地址是1地址
回复

使用道具 举报

10#
ID:858009 发表于 2021-12-14 16:50 | 只看该作者
188610329 发表于 2021-12-14 16:46
最关键的是:
测试的话,要这样写……
你之前那样写, 不停的在发指令, WT588 压根没机会执行指令。

现在最顶层的就是他们给的一线串口通信函数
回复

使用道具 举报

11#
ID:624769 发表于 2021-12-14 17:42 | 只看该作者
qwettyuio 发表于 2021-12-14 16:50
现在最顶层的就是他们给的一线串口通信函数

反正,我这边是可以用的, 你delay25us 里面的步进有没有根据你单片机实际 速度修改? 我这个147, 是在STC15系列 24MHz 情况下的设置。 你难道也是?
回复

使用道具 举报

12#
ID:858009 发表于 2021-12-15 09:49 | 只看该作者
188610329 发表于 2021-12-14 17:42
反正,我这边是可以用的, 你delay25us 里面的步进有没有根据你单片机实际 速度修改? 我这个147, 是在S ...

不是,修改了延时的
回复

使用道具 举报

13#
ID:858009 发表于 2021-12-15 09:51 | 只看该作者
188610329 发表于 2021-12-14 17:42
反正,我这边是可以用的, 你delay25us 里面的步进有没有根据你单片机实际 速度修改? 我这个147, 是在S ...

我用的是89c51,修改了延时的
回复

使用道具 举报

14#
ID:624769 发表于 2021-12-15 13:22 | 只看该作者
本帖最后由 188610329 于 2021-12-15 13:28 编辑
qwettyuio 发表于 2021-12-15 09:51
我用的是89c51,修改了延时的

要是实在不行, 你先试试看两线串口协议能不能驱动? WT588H好像不支持按键操作, WT588D还能用按键测试一下。方便判断芯片是否正常工作。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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