[DAC] 在家闲的,古董TDA1543搞平衡

[复制链接] 查看: 11467|回复: 23

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

发表于 2020-2-6 11:16 | 显示全部楼层
本帖最后由 rush 于 2020-2-6 11:17 编辑

真的搞成单声道平衡了,有图有真相
DSC03551.JPG

DSC03552.JPG
电路大概就是这个意思,原图早已失踪了


无标题111.jpg
无标题.jpg


  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. use ieee.std_logic_arith.all;
  5. entity iis is
  6.         port(bck,lrcki,datai: IN bit;
  7.                 data1o,data2o: OUT bit);
  8.         end iis;
  9. architecture behv of iis is
  10. signal counttmp : std_logic_vector(4 downto 0);

  11. signal Lchin : bit_vector(15 downto 0);---iis input
  12. signal Lchout : bit_vector(15 downto 0);
  13. signal Rchbuf : bit_vector(15 downto 0);

  14. signal old_lrck:bit;
  15. --signal cnt_enable : bit;

  16.         begin
  17.          Counter1 :process(bck,lrcki,datai)
  18.                 begin
  19.                 if bck'event and bck ='1' then               
  20.                         
  21.                         
  22.                         if (lrcki /= old_lrck) then-------RESET
  23.                                 old_lrck <= lrcki;
  24.                                 counttmp <= "00000";
  25.                         else
  26.                         
  27.                         if (old_lrck='0') then----Left ch
  28.                         case counttmp is
  29.                                 when "00000"=> Lchin(0)<=datai;
  30.                                 when "00001"=> Lchin(1)<=datai;
  31.                                 when "00010"=> Lchin(2)<=datai;
  32.                                 when "00011"=> Lchin(3)<=datai;
  33.                                 when "00100"=> Lchin(4)<=datai;
  34.                                 when "00101"=> Lchin(5)<=datai;
  35.                                 when "00110"=> Lchin(6)<=datai;
  36.                                 when "00111"=> Lchin(7)<=datai;
  37.                                 when "01000"=> Lchin(8)<=datai;
  38.                                 when "01001"=> Lchin(9)<=datai;
  39.                                 when "01010"=> Lchin(10)<=datai;
  40.                                 when "01011"=> Lchin(11)<=datai;
  41.                                 when "01100"=> Lchin(12)<=datai;
  42.                                 when "01101"=> Lchin(13)<=datai;
  43.                                 when "01110"=> Lchin(14)<=datai;
  44.                                 when "01111"=> Lchin(15)<=datai;
  45.                                 when "10000"=> null;
  46.                                 when others => counttmp <= "10001"; --cnt_enable<='0';
  47.                         end case;
  48.                         else-------Right ch
  49.                         case counttmp is
  50.                                 when "00000"=> Rchbuf(0)<=datai;
  51.                                 when "00001"=> Rchbuf(1)<=datai;
  52.                                 when "00010"=> Rchbuf(2)<=datai;
  53.                                 when "00011"=> Rchbuf(3)<=datai;
  54.                                 when "00100"=> Rchbuf(4)<=datai;
  55.                                 when "00101"=> Rchbuf(5)<=datai;
  56.                                 when "00110"=> Rchbuf(6)<=datai;
  57.                                 when "00111"=> Rchbuf(7)<=datai;
  58.                                 when "01000"=> Rchbuf(8)<=datai;
  59.                                 when "01001"=> Rchbuf(9)<=datai;
  60.                                 when "01010"=> Rchbuf(10)<=datai;
  61.                                 when "01011"=> Rchbuf(11)<=datai;
  62.                                 when "01100"=> Rchbuf(12)<=datai;
  63.                                 when "01101"=> Rchbuf(13)<=datai;
  64.                                 when "01110"=> Rchbuf(14)<=datai;
  65.                                 when "01111"=> Rchbuf(15)<=datai;
  66.                                 when "10000"=> Lchout <= Lchin; counttmp <= "10001"; --cnt_enable<='0';----disable counter,,when LRCk=1.RELOAD LCHOUT
  67.                                 when others => counttmp <= "10001"; --cnt_enable<='0';
  68.                                 end case;
  69.                         end if;
  70.                         
  71.                         counttmp <= counttmp + 1;
  72.                         
  73.                         end if;
  74.                         
  75.                 end if;               
  76.         end process Counter1 ;
  77. --------------------------------------------------
  78.         SDATAOUT1 :process(bck)
  79.         begin
  80.                 if bck'event and bck ='0' then
  81.                         ----01,output data
  82.                         if (old_lrck='0') then----Left ch
  83.                         case counttmp is
  84.                                 when "00000"=> data1o<=Lchout(0);data2o<=Rchbuf(0);
  85.                                 when "00001"=> data1o<=Lchout(1);data2o<=Rchbuf(1);
  86.                                 when "00010"=> data1o<=Lchout(2);data2o<=Rchbuf(2);
  87.                                 when "00011"=> data1o<=Lchout(3);data2o<=Rchbuf(3);
  88.                                 when "00100"=> data1o<=Lchout(4);data2o<=Rchbuf(4);
  89.                                 when "00101"=> data1o<=Lchout(5);data2o<=Rchbuf(5);
  90.                                 when "00110"=> data1o<=Lchout(6);data2o<=Rchbuf(6);
  91.                                 when "00111"=> data1o<=Lchout(7);data2o<=Rchbuf(7);
  92.                                 when "01000"=> data1o<=Lchout(8);data2o<=Rchbuf(8);
  93.                                 when "01001"=> data1o<=Lchout(9);data2o<=Rchbuf(9);
  94.                                 when "01010"=> data1o<=Lchout(10);data2o<=Rchbuf(10);
  95.                                 when "01011"=> data1o<=Lchout(11);data2o<=Rchbuf(11);
  96.                                 when "01100"=> data1o<=Lchout(12);data2o<=Rchbuf(12);
  97.                                 when "01101"=> data1o<=Lchout(13);data2o<=Rchbuf(13);
  98.                                 when "01110"=> data1o<=Lchout(14);data2o<=Rchbuf(14);
  99.                                 when "01111"=> data1o<=Lchout(15);data2o<=Rchbuf(15);
  100.                                 ---when "10000"=>
  101.                                 when others=>data1o<='0';data2o<='0';
  102.                         end case;
  103.                         else-------Right ch
  104.                         case counttmp is
  105.                                 when "00000"=> data1o<=not Lchout(0);data2o<=not Rchbuf(0);
  106.                                 when "00001"=> data1o<=not Lchout(1);data2o<=not Rchbuf(1);
  107.                                 when "00010"=> data1o<=not Lchout(2);data2o<=not Rchbuf(2);
  108.                                 when "00011"=> data1o<=not Lchout(3);data2o<=not Rchbuf(3);
  109.                                 when "00100"=> data1o<=not Lchout(4);data2o<=not Rchbuf(4);
  110.                                 when "00101"=> data1o<=not Lchout(5);data2o<=not Rchbuf(5);
  111.                                 when "00110"=> data1o<=not Lchout(6);data2o<=not Rchbuf(6);
  112.                                 when "00111"=> data1o<=not Lchout(7);data2o<=not Rchbuf(7);
  113.                                 when "01000"=> data1o<=not Lchout(8);data2o<=not Rchbuf(8);
  114.                                 when "01001"=> data1o<=not Lchout(9);data2o<=not Rchbuf(9);
  115.                                 when "01010"=> data1o<=not Lchout(10);data2o<=not Rchbuf(10);
  116.                                 when "01011"=> data1o<=not Lchout(11);data2o<=not Rchbuf(11);
  117.                                 when "01100"=> data1o<=not Lchout(12);data2o<=not Rchbuf(12);
  118.                                 when "01101"=> data1o<=not Lchout(13);data2o<=not Rchbuf(13);
  119.                                 when "01110"=> data1o<=not Lchout(14);data2o<=not Rchbuf(14);
  120.                                 when "01111"=> data1o<=not Lchout(15);data2o<=not Rchbuf(15);
  121.                                 ---when "10000"=>
  122.                                 when others =>data1o<='0';data2o<='0';
  123.                                 end case;
  124.                         end if;
  125.                 end if;
  126.         end process SDATAOUT1;
  127. end behv;
复制代码








127

主题

0

好友

1万

积分
     

版主 当前离线

脑放进行时

Rank: 7Rank: 7Rank: 7

UID
3986
帖子
18031
精华
2
经验
17363 点
金钱
15100 ¥
注册时间
2005-4-20

社区贡献 优秀设计 论坛版主

发表于 2020-2-6 11:23 | 显示全部楼层
古董级CPLD

685

主题

2

好友

2860

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
834897
帖子
4249
精华
0
经验
2860 点
金钱
1920 ¥
注册时间
2017-7-6
发表于 2020-2-6 12:13 来自手机端 | 显示全部楼层
你那个CPLD自己做的吗?

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-6 12:27 | 显示全部楼层
13266834160 发表于 2020-2-6 12:13
你那个CPLD自己做的吗?

必须的

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-6 12:29 | 显示全部楼层

不但慢,而且弱,还很贵

685

主题

2

好友

2860

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
834897
帖子
4249
精华
0
经验
2860 点
金钱
1920 ¥
注册时间
2017-7-6
发表于 2020-2-6 12:51 来自手机端 | 显示全部楼层
rush 发表于 2020-2-6 12:27
必须的

这样不就可以玩双7220+1541了?

685

主题

2

好友

2860

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
834897
帖子
4249
精华
0
经验
2860 点
金钱
1920 ¥
注册时间
2017-7-6
发表于 2020-2-6 12:52 来自手机端 | 显示全部楼层
把CPLD那部分做出来单卖

34

主题

3

好友

405

积分
     

业余侠客 当前离线

Rank: 4

UID
275330
帖子
637
精华
0
经验
405 点
金钱
361 ¥
注册时间
2010-12-24
发表于 2020-2-6 15:23 | 显示全部楼层
这个一定要顶上去,我就细欢1543声音,楼主好像平衡里面只各取一路当RL输出是取十这路吗跟普通单端声音一样吗

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-6 16:00 | 显示全部楼层
13266834160 发表于 2020-2-6 12:51
这样不就可以玩双7220+1541了?

确实是啊,能接受i2s的老芯片加上外接CPLD,就可以实现像WM8740做双单声道那种效果了

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-6 16:04 | 显示全部楼层
本帖最后由 rush 于 2020-2-6 16:09 编辑
huangxiaobian 发表于 2020-2-6 15:23
这个一定要顶上去,我就细欢1543声音,楼主好像平衡里面只各取一路当RL输出是取十这路吗跟普通单端声音一样 ...



看下这个电路,差分输出是两个对称的差分转单端构成的,所以直接拉一端也是可以的。

声音上不好说,从理论上说:只用一路输出,也是DAC两个差分信号相减,能抑制DAC部分的共模电源干扰,但是保留了运放5532自己的一些失真,就有点5532的味道在里面;
用XLR输出,则可以连5532带来的共模干扰一并抵消掉。



34

主题

3

好友

405

积分
     

业余侠客 当前离线

Rank: 4

UID
275330
帖子
637
精华
0
经验
405 点
金钱
361 ¥
注册时间
2010-12-24
发表于 2020-2-7 10:15 | 显示全部楼层
rush 发表于 2020-2-6 16:04
看下这个电路,差分输出是两个对称的差分转单端构成的,所以直接拉一端也是可以的。

声音上不好说 ...

还有1、7脚哪个是正输出

685

主题

2

好友

2860

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
834897
帖子
4249
精华
0
经验
2860 点
金钱
1920 ¥
注册时间
2017-7-6
发表于 2020-2-7 10:59 来自手机端 | 显示全部楼层
huangxiaobian 发表于 2020-2-7 10:15
还有1、7脚哪个是正输出

1,7脚应该都是正输出,没有反向输出。

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-7 19:52 | 显示全部楼层
huangxiaobian 发表于 2020-2-7 10:15
还有1、7脚哪个是正输出

1是正输出,这个先看我程序,L声道是同相,R是经过取反的,然后你看1543的L连到5532上面3脚+,R连到2脚-,这样上面的1输出就是正极性

9

主题

3

好友

364

积分

业余侠客 当前离线

000000

Rank: 4

UID
150221
帖子
441
精华
0
经验
364 点
金钱
293 ¥
注册时间
2009-11-26
发表于 2020-2-8 11:06 | 显示全部楼层
手握4个xc95144xl-10,还不会用的路过向大神学习

56

主题

2

好友

619

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
232063
帖子
1534
精华
0
经验
619 点
金钱
540 ¥
注册时间
2010-8-21
发表于 2020-2-10 10:45 来自手机端 | 显示全部楼层
看到CPLD就头痛,不会搞!还是老老实实用逻辑电路吧,虽然麻烦点,但一样可以做出来!

56

主题

2

好友

619

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
232063
帖子
1534
精华
0
经验
619 点
金钱
540 ¥
注册时间
2010-8-21
发表于 2020-2-10 10:49 来自手机端 | 显示全部楼层
前几年用洞洞板做的4x1543,就是逻辑电路分离左右声道,然后每声道两片1543输出,高速光耦隔离声音还不错

56

主题

2

好友

619

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
232063
帖子
1534
精华
0
经验
619 点
金钱
540 ¥
注册时间
2010-8-21
发表于 2020-2-10 10:52 来自手机端 | 显示全部楼层
74157+4517+高速光耦+4x1543!
2020-02-10_10.50.00.jpg
2020-02-10_10.50.32.jpg

685

主题

2

好友

2860

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
834897
帖子
4249
精华
0
经验
2860 点
金钱
1920 ¥
注册时间
2017-7-6
发表于 2020-2-10 11:25 来自手机端 | 显示全部楼层
dj-hiend 发表于 2020-2-10 10:52
74157+4517+高速光耦+4x1543!

有电路图吗?朋友。我想搞双1541,一片一声道,不知道这样出来的声音是否会比单片两声道的声场宽些?

7

主题

1

好友

63

积分
     

论坛游民 当前离线

Rank: 3Rank: 3

UID
850701
帖子
957
精华
0
经验
63 点
金钱
53 ¥
注册时间
2018-7-8
发表于 2020-2-11 09:11 | 显示全部楼层
学习一下

30

主题

1

好友

946

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
59764
帖子
486
精华
3
经验
946 点
金钱
501 ¥
注册时间
2008-10-22

新人进步

 楼主| 发表于 2020-2-12 13:09 | 显示全部楼层
13266834160 发表于 2020-2-10 11:25
有电路图吗?朋友。我想搞双1541,一片一声道,不知道这样出来的声音是否会比单片两声道的声场宽些?

完整的已经失踪,关键电路重新画了贴出来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部