电位器是一种机械装置,使用它可以根据所需值设置电阻,从而改变通过它的电流。电位器有很多应用,但大多数情况下电位器用作音频放大器的音量控制器。
电位器不控制信号的增益,但它形成了一个分压器,这就是输入信号衰减的原因。因此,在这个项目中,我将向您展示如何使用 ic pt2258 构建您的数字音量控制器,并将其与 arduino 接口以控制放大器电路的音量。
集成电路pt2258
正如我之前提到的,pt2258 是一款用作 6通道电子音量控制器的 ic,该 ic 采用专为多通道音频-视频应用而设计的 cmos 技术。
该 ic 提供 i2c 控制接口,衰减范围为 0 至 -79db,1db/步长,采用 20 引脚 dip 或 sop 封装。
一些基本功能包括,
6 个输入和输出通道(适用于 5.1 家庭音频系统)
可选 i2c 地址(用于菊花链应用)
高通道分离(用于低噪声应用)
信噪比 》 100db
工作电压为 5 至 9v
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 #include
接下来,使用您喜欢的文本编辑器打开pt2258.cpp文件,我使用的是 notepad++。
可以看到wire库的“w”是小写字母,与最新的arduino版本不兼容,需要换成大写的“w”,就这样。
可在本节末尾找到 pt2258 音量控制器的完整代码。这里解释了程序的重要部分。
我们通过包含所有必需的库文件来开始代码。wire 库用于在 arduino 和 pt2258 之间进行通信。pt2258 库包含所有关键的 i2c 时序信息和确认。ezbutton库用于与按钮交互。
不要使用下面的代码图像,而是从代码文件中复制所有代码实例,并像我们以前在其他项目中那样将它们格式化
#include #include #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.setdebouncetime(50);button_2.setdebouncetime(50);
最后,通过设置默认通道音量和引脚号来启动 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 语句确保音量不低于零。如果(音量 = 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);
}
}
滤料阻燃性能测试仪的测试原理是怎样的
手机没电是自然损耗吗,分析锂电池寿命消耗的潜在原因
一文看懂刷爆资本圈的“LTE-V”与智能网联
长城汽车新能源动力规划分享与交流
紧凑型恒流LED电源适合工业用途
如何使用PT2258构建数字音量控制器
使用晶体管的选定方法(上)
信通院:中国内市场的5G手机累计出货量1.63亿部,占比为52.9%
简要概述异步电动机和同步电动机该如何区分
看张江如何构筑机器人行业创新生态
华为P10发布在即 这款旗舰手机是否值得期待?
双十一移动电源推荐,性价比高的移动电源
Silicon Labs推出全球最节能的USB微控制器
新一代Wi-Fi CERTIFIED ac:满足你快速的连网胃口
亿联云邀您体验“云+端”视频会议
机器人吵架实为人工语音:目前没有任何一家公司能做出AGI
关于带宽更大和射频性能更强的全新S FSW系列的介绍和应用
家用机器人市场不断升温 给人们带来了全新的生活方式
基于CAN总线技术构建隧道灯光控制系统
如何提高储能电池管理系统的可靠性