电位器是一种机械装置,使用它可以根据所需值设置电阻,从而改变通过它的电流。电位器有很多应用,但大多数情况下电位器用作音频放大器的音量控制器。
电位器不控制信号的增益,但它形成了一个分压器,这就是输入信号衰减的原因。因此,在这个项目中,我将向您展示如何使用 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
接下来,使用您喜欢的文本编辑器打开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);
}
}
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- PCB布线设计经验大全
来源:下载中心
- 图解运算放大器电路
来源:下载中心
- Keysight 示波器基础培训
来源:大学堂
- Altera MAX10 FPGA培训视频
来源:大学堂
- PCB板基础知识讲解
来源:电路图
- 戴维宁定理:概念介绍及其求解过程
来源:电路图
推荐帖子 最新更新时间: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
- 鑫海宝贝紧急求救(悬赏100金币)
- matlab 高级讲义
- 关于操作说明的简单总结:(下面基本都是废话,了解即可)
- PPC上用isqlw给数据库建表,能建几个表,如何整理他们之间的关系啊?
- 自制STM32F103VET6评估板
- 招聘: S/W Engineer beijing
- 555定时器只有触发信号,没有RC电路,输出端是什么电平?
- 易电源试用贴第三贴
- 飞思卡尔HCS08&coldfire v1单片机I2C教程
- 51单片机与蓝牙hc05模块通信
- 东芝光电继电器TLP3547评测——开关频率测试2
- 汇编
- GSM-V5产品介绍
- 求助:基于DSP的高速采样模块方案
- HSPICE教程
- 出租房事故频发,如何才能彻底解决
- 【关注】独家推出性能卓越 接口丰富的OK6410开发板
- 进口连接器在电子市场上的发展趋势
- microchip 零点漂移运算放大器
- 非正弦周期信号傅里叶分解疑问
- NCP3135GEVB:2.9V 至 5.5V、5A 集成同步 DC-DC 降压转换器评估板
- 【牡师院校赛】——家用智能擦玻璃机器人
- 适用于日本市场的应用说明 TDx5101x 低功率天线板
- LTC4267CDHC 演示板,RJ-45 以太网输出,Vout = 3.3V @ 1.0A
- LT8570EDD-1 1MHz 升压转换器的典型应用从 5 至 12V 输入产生 24V
- LTC1727ES8-2.5、3.3V 双电源监视器的典型应用
- BST7970双电机驱动电路
- 数字时钟
- LTC3630IDHC 5V 至 65V 输入至 5V 输出、150mA 稳压器和 20kHz 最小突发频率的典型应用电路
- FS4508评估板, 系统基础芯片