首页 > 音频视频电路 >音频放大电路 > 如何使用PT2258构建数字音量控制器

如何使用PT2258构建数字音量控制器

来源:互联网发布者:MartinFowler 关键词: 电位器 音量控制器 PT2258 更新时间: 2024/03/06

电位器是一种机械装置,使用它可以根据所需值设置电阻,从而改变通过它的电流。电位器有很多应用,但大多数情况下电位器用作音频放大器的音量控制器。

电位器不控制信号的增益,但它形成了一个分压器,这就是输入信号衰减的原因。因此,在这个项目中,我将向您展示如何使用 IC PT2258 构建您的数字音量控制器,并将其与 Arduino 接口以控制放大器电路的音量。

集成电路PT2258

集成电路PT2258

正如我之前提到的,PT2258 是一款用作 6通道电子音量控制器的 IC,该 IC 采用专为多通道音频-视频应用而设计的 CMOS 技术。

该 IC 提供 I2C 控制接口,衰减范围为 0 至 -79dB,1dB/步长,采用 20 引脚 DIP 或 SOP 封装。

一些基本功能包括,

6 个输入和输出通道(适用于 5.1 家庭音频系统)

可选 I2C 地址(用于菊花链应用)

高通道分离(用于低噪声应用)

信噪比 》 100dB

工作电压为 5 至 9V

PT2258 IC 工作原理

PT2258 IC 工作原理

该 IC 通过 SCL 和 SDA 线从微控制器发送和接收数据。SDA 和 SCL 构成总线接口。这些线必须通过两个 4.7K 电阻拉高,以确保稳定运行。

在我们进入实际的硬件操作之前,这里是IC的详细功能描述。如果你不想知道这一切,你可以跳过这部分,因为所有的功能部分都由 Arduino 库管理。

数据验证

当 SCL 信号为 HIGH 时,SDA 线上的数据被认为是稳定的。

SDA 线的 HIGH 和 LOW 状态仅在 SCL 为 LOW 时改变。

启动和停止条件

启动条件被激活时

SCL 设置为 HIGH 和

SDA 从 HIGH 状态变为 LOW 状态。

停止条件被激活时

SCL 设置为 HIGH 和

SDA 从低状态转变为高状态

笔记!此信息对于调试信号非常有用。

数据格式

传输到 SDA 线的每个字节由 8 位组成,形成一个字节。每个字节后面必须跟一个确认位。

致谢

确认确保稳定和正确的操作。在确认时钟脉冲期间,微控制器将 SDA 引脚拉高,此时外围设备(音频处理器)将 SDA 线拉低(低)。

外围设备(PT2258)现在被寻址,它必须在接收到一个字节后产生一个确认,否则,SDA 线将在第九(9)个时钟脉冲期间保持高电平。如果发生这种情况,主发送器将生成 STOP 信息以中止传输。

这消除了有效数据传输的必要性。

地址选择

该 IC 的 I2C 地址取决于 CODE1 (Pin No.17) 和 CODE2 (Pin No.4) 的状态。

逻辑高 = 1

逻辑低 = 0

接口协议

接口协议由以下部分组成:

一个起始位

一个芯片地址字节

ACK=确认位

一个数据字节

停止位

IC上电后,需要等待至少200ms才能传输第一个数据位,否则可能会导致数据传输失败。

延迟之后,首先要做的是通过 I2C 线发送“0XC0”来清除寄存器,这样可以确保正常运行。

上述步骤清空了整个寄存器,现在我们需要给寄存器设置一个值,否则,寄存器存储垃圾值,我们得到一个雀斑的输出。

为保证音量调节合适,需要依次发送 10dB 的倍数和 1dB 的代码到衰减器,否则 IC 会出现异常。下图更清楚地说明了这一点。

以上两种方法都可以正常工作。

为确保正常运行,请确保 I2C 数据传输速度不超过 100KHz。

这就是您可以向 IC 传输一个字节并衰减输入信号的方式。上面的部分是学习 IC 的功能,但正如我之前所说,我们将使用 Arduino 库与管理所有硬代码的 IC 进行通信,我们只需要进行一些函数调用。

原理图

上图显示了基于 PT2258 的音量控制电路的测试原理图。它取自数据表并根据需要进行修改。

为了演示,电路是在上面显示的示意图的帮助下在无焊面包板上构建的。

所需组件

PT2258 集成电路 – 1

Arduino Nano 控制器 – 1

通用面包板 - 1

螺丝端子 5mm x 3 – 1

按钮 – 1

4.7K 电阻,5% - 2

150K 电阻,5% - 4

10k 电阻,5% - 2

10uF 电容 – 6

0.1uF 电容 – 1

跳线 - 10

Arduino代码

#include

#include

接下来,使用您喜欢的文本编辑器打开PT2258.cpp文件,我使用的是 Notepad++。

可以看到wire库的“w”是小写字母,与最新的Arduino版本不兼容,需要换成大写的“W”,就这样。

可在本节末尾找到 PT2258 音量控制器的完整代码。这里解释了程序的重要部分。

我们通过包含所有必需的库文件来开始代码。Wire 库用于在 Arduino 和 PT2258 之间进行通信。PT2258 库包含所有关键的 I2C 时序信息和确认。ezButton库用于与按钮交互。

不要使用下面的代码图像,而是从代码文件中复制所有代码实例,并像我们以前在其他项目中那样将它们格式化

#include

接下来,为两个按钮和 PT2258 库本身制作对象。

PT2258 PT2258;
ezButton button_1(2);
ezButton button_2(4);

接下来,定义音量级别。这是该 IC 启动时的默认音量级别。

国际体积 = 40;

接下来,启动 UART,并设置 I2C 总线的时钟频率。

序列号.开始(9600);
Wire.setClock(100000);

设置I2C时钟非常重要,否则IC将无法工作,因为该IC支持的最大时钟频率为100KHz。

接下来,我们使用if else语句做一些整理工作,以确保 IC 与 I2C 总线正确通信。

如果 (!pt2258.init())
 Serial.printIn("PT2258 启动成功");
别的
 Serial.printIn(“启动 PT2258 失败”);

接下来,我们设置按钮的去抖动延迟。

Button_1.setDebounce

最后,通过设置默认通道音量和引脚号来启动 PT2258 IC。

/* 使用默认音量和 Pin 启动 PT*/
Pt2258.setChannelVolume(音量,4);
Pt2258.setChannelVolume(音量,5);

这标志着Void Setup()部分的结束。

在循环部分,我们需要从按钮类中调用循环函数;这是图书馆的规范。

Button_1.loop(); //库规范
Button_2.loop(); //库规范

下面的if部分是为了降低音量。

/* 如果条件为真,则按下按钮 1 */
如果 (button_1.ispressed())
{
   音量++;// 增加音量计数器。
   // 这个 if 语句确保交易量不超过 79
   如果(音量 >= 79)
   {
   体积 = 79;
   }
   Serial.print(“卷:”); // 打印音量级别
   Serial.printIn(volume);
   /* 设置通道 4 的音量
   在 PT2558 IC 的 PIN 9 中
  */
  Pt2558.setChannelVolume(音量,4);
  /* 设置通道 5 的音量
  PT2558 IC的PIN 10是哪个
  */
  Pt2558.setChannelVolume(音量,5);
}

下面的if部分是为了增加音量。

// 按钮 2 也是如此
如果 (button_2.isPressed())
{
体积 - ;
// 这个 if 语句确保音量不低于零。
如果(音量 <= 0)
音量 = 0;
Serial.print(“卷:”);
Serial.printIn(volume);
Pt2258.setChannelVolume(音量,4);
Pt2558.setChannelVolume(音量,5);
}

测试数字音频音量控制电路

为了测试电路,使用了以下设备

具有 13-0-13 分接头的变压器

2 4Ω 20W 扬声器作为负载。

音源(电话)

我弄乱了机械电位器,并用两条小跨接电缆短接了两条引线。现在,借助两个按钮,可以控制放大器的音量。
#include
#include
#include
PT2258 PT2258;// PT2258 对象
ezButton button_1(2); //Button_1 对象
ezButton button_2(4); //Button_2 对象
整数体积 = 40;// 默认音量/起始音量
无效设置(){
序列号.开始(9600);//UART开始
Wire.setClock(100000); // 将 I2C 时钟设置为 100KHz
/* 检查 MCU 是否可以与 PT 通话 */
如果(!pt2258.init())
Serial.println("PT2258 启动成功");
别的
Serial.println("启动 PT2258 失败");
/* 设置按钮去抖动延迟*/
button_1.setDebounceTime(50);
button_2.setDebounceTime(50);
/* 使用默认音量和 Pin 启动 PT*/
pt2258.setChannelVolume(音量, 4);
pt2258.setChannelVolume(音量, 5);
}
无效循环(){
button_1.loop(); //库规范
button_2.loop(); //库规范
/* 如果条件为真,则按下按钮 1*/
if (button_1.isPressed())
{
音量++;// 增加音量计数器。
// 这个 if 语句确保交易量不超过 79
如果(音量 >= 79)
{
体积 = 79;
}
Serial.print("音量:"); // 打印音量级别
Serial.println(卷);
/*设置通道4的音量
在 PT2258 IC 的 PIN 9 中
*/
pt2258.setChannelVolume(音量, 4);
/*设置通道5的音量
PT2258 IC的10脚是哪个
*/
pt2258.setChannelVolume(音量, 5);
}
//按钮2也是如此
如果 (button_2.isPressed())
{
体积 - ;
// 这个 if 语句确保音量不低于零。
如果(音量 <= 0)
体积 = 0;
Serial.print("音量:");
Serial.println(卷);
pt2258.setChannelVolume(音量, 4);
pt2258.setChannelVolume(音量, 5);
}
}

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间:2024-11-13 09:08

几个CCS调试过程的疑难杂症解决办法
1、 Example_2802xBUZZER.c , line 2: fatal error: could not open source file DSP28x_Project.h 解决:Build Option- Compiler- Include Search Path
 灞波儿奔DSP 与 ARM 处理器
Sensor Tile 九轴数据预处理
在论坛众多大神帖子的指点下,终于在电脑串口上收到 了Sensor Tile的数据。(一根没有数据传输功能的USB供电线耽误了我一天的进度……吐血,引以为戒吧……) 关于 Sensor Tile 的众多强大功能就不再赘述,本次的项目任务主要是想用 Sensor Tile 做
 train2004MEMS传感器
迎猴年干货!SSD坏块管理 (转)
转自: http://mp.weixin.qq.com/s?__biz=MzAwMDM4NTUyNw==&mid=402653589&idx=1&sn=733296d86b91d5f1111ea26e8f2c8200&3rd=MzA3MDU4NTYzMw==&scene=6#r
 白丁FPGA/CPLD
MSP-FET430UIF V3固件降级程序
MSP-FET430UIF V3固件降级程序 楼主,为什么要降级程序呀? 谢谢楼主
 qq849682862微控制器 MCU
RSL10问题 SWD idcod获取不到解决以及小坑分享
拿到板子的那一刻,第一就是觉得小巧,做嵌入比较合适。开始还找了一阵子烧写口,后来在原理图中找到了,选择跳线出来接到Jlink。(吐槽下,作为一个宣传的板,把烧写做的这么麻烦真是不应该) MDK环境配置参照https://bbs.eeworld.com.cn/thread-
 lehuijie安森美和安富利物联网创新设计大赛
【问TI】关于LM3S9B96使用SDRAM的问题。
在IAR环境下使用SDRAM做缓冲,我在ICF文件中使用 place in SDRAM { readwrite };时,程序会跳到FaultISR(void)函数中了。我用的是类似 USB-dev-BULK 这个例程的一个程序运行。readwrite 放在内部SRAM中正常,但放
 ccd007微控制器 MCU

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved