M62429驱动笔记

本文档详细介绍了M62429双声道电子音量控制器的特性、引脚功能、驱动电路及数据格式。通过CLOCK和DATA引脚进行串行通信,控制音量范围从0~-83dB,步长1dB。提供了两种驱动方法,包括预定义音量数组和按需计算,通过单片机发送11位数据来调整音量。示例代码展示了如何设置不同音量和通道状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

M62429驱动笔记

M62429是一款串行数据控制的双声道电子音量控制器芯片,它的规格书(中文),三菱(英文), RENESAS(英文)

1.功能框图

在这里插入图片描述

2.引脚说明

在这里插入图片描述

Pin no.SymbolFunction
1VIN 1声道 1 输入脚
2VOUT1声道 1 输出脚输
3GND
4DATA控制数据输入脚,与时钟同步数据输入脚
5CLOCK传输串行数据地时钟入脚
6VCC电源,必须接滤波容到地电源
7VOUT2声道 2 输出脚
8VIN2声道 2 输入脚输

3.驱动电路

在这里插入图片描述

详细说明见规格书。

4.驱动数据说明

要想驱动M62429,需要在CLOCK发出11个周期时钟,DATA脚发出11位数据

D0D1D2D3D4D5D6D7D8D9D10
0/10/1---音量---11

其中:

BIT说明
D00:选择声道1
1:选择声道2
D10:同时控制两个声道
1:只能控制一个声道
D2~D8音量控制码,Volume 0 to -83dB (1dB/step), -∞
D9默认为1,不可改变
D10默认为1,不可改变

在这里插入图片描述

音量控制器可以将声音衰减0 ~ -83dB,其中D2~D6控制步长为4dB,加上D7、D8才能达到控制步长为1dB的要求;

最大音量时衰减值为0dB,即D2 ~ D8的数据为:1010111,假如只使用通道1,只控制一个声道,则D0~D10为:01101011111;

再例如将音量衰减值-36dB,D2 ~ D8为:0011011,则D0~D10为:01001101111,D0在低位,D10在高位,在计算器中得出数据为: 0x7B2,使用单片机驱动音量控制芯片时,DATA上发送的数据为0X07B2。

在这里插入图片描述

端口仿真波形:

在这里插入图片描述

5.驱动例程

这里给出两种实现的方法:

A.取0 ~ -83dB内的数据,将D0、D1、D2~D8全部预定义好,整成一个数组,设置音量时,直接在数组内取值,使用IO口将数据发送出去;

// 第一级音量定义
#define    MainVol_0dB            0x15      // 0dB
#define    MainVol_n4dB           0x14      // -4dB
#define    MainVol_n8dB           0x13      // -8dB
#define    MainVol_n12dB          0x12      // -12dB
#define    MainVol_n16dB          0x11      // -16dB
#define    MainVol_n20dB          0x10      // -20dB
#define    MainVol_n24dB          0x0F      // -24dB
#define    MainVol_n28dB          0x0E      // -28dB
#define    MainVol_n32dB          0x0D      // -32dB
#define    MainVol_n36dB          0x0C      // -36dB
#define    MainVol_n40dB          0x0B      // -40dB
#define    MainVol_n44dB          0x0A      // -44dB
#define    MainVol_n48dB          0x09      // -48dB
#define    MainVol_n52dB          0x08      // -52dB
#define    MainVol_n56dB          0x07      // -56dB
#define    MainVol_n60dB          0x06      // -60dB
#define    MainVol_n64dB          0x05      // -64dB
#define    MainVol_n68dB          0x04      // -68dB
#define    MainVol_n72dB          0x03      // -72dB
#define    MainVol_n76dB          0x02      // -76dB
#define    MainVol_n80dB          0x01      // -80dB

// 第二级音量定义
#define    SubVol_0dB             0x03      // 0dB
#define    SubVol_n1dB            0x02      // -1dB
#define    SubVol_n2dB            0x01      // -2dB
#define    SubVol_n3dB            0x00      // -3dB

#define    _1CH              0x00
#define    _SINGLE           0x01

// 音量调节最大0dB, 最小-80dB, 分成12步
const uint  VolumeTable[] = {
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_0dB << 2)),        // 0dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_n2dB << 7) | (MainVol_0dB << 2)),       // -2dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n4dB << 2)),       // -4dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_n2dB << 7) | (MainVol_n4dB << 2)),      // -6dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_n1dB << 7) | (MainVol_n8dB << 2)),      // -9dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n12dB << 2)),      // -12dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_n2dB << 7) | (MainVol_n16dB << 2)),     // -18dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n24dB << 2)),      // -24dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n36dB << 2)),      // -36dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n48dB << 2)),      // -48dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n60dB << 2)),      // -60dB
  (0x0600 | _1CH | (_SINGLE << 1) | (SubVol_0dB << 7) | (MainVol_n80dB << 2)),      // -80dB
};

/*
************************************************************************************************************************
**函数原型:  	void VolumeSet(uchar VolIndex)
**参数说明:  	VolIndex: 音量调节
**返回值:    	无
**说明:			该函数用于控制音量的大小,一共12项选择
************************************************************************************************************************
*/
void VolumeSet(uchar VolIndex)
{
	uint Dat;
	uchar i;

	// 音量调节最大0dB, 最小-80dB, 分成12步
	Dat = VolumeTable[VolIndex];

	for(i=0;i<10;i++)	//发送10位数据,共11位,最后1位另外发
	{
		SDA_VOL=Dat&0x01;
		SCL_VOL=1;
		DELAY5US();
		SDA_VOL=0;
		SCL_VOL=0;
		Dat>>=1;
	}
	SDA_VOL=1;		//最后1位D10 = 1
	SCL_VOL=1;
	DELAY5US();
	SCL_VOL=0;
}

SDA_VOL和SCL_VOL是单片机的输出脚,连接CLOCK和DATA,例如51中,定义为:

// M62429 IO 定义
sbit 	SDA_VOL 	= P2^2;
sbit 	SCL_VOL		= P2^1;

调用函数

VolumeSet(8);		//设置音量大小

B.将需要设置的音量根据规格书的说明,一一换算出来。

// ----------------- M62429 D0 控制位 --------------------------------
#define	M62429_D0_SW_0		0x0	//选择声道1
#define	M62429_D0_SW_1		0x1	//选择声道2

// ----------------- M62429 D1 控制位 --------------------------------
#define	M62429_D1_SW_0		(0x0 << 1)	//同时控制两个声道
#define	M62429_D1_SW_1		(0x1 << 1)	//只能控制一个声道

/*
************************************************************************************************************************
**函数原型:  	void VolSet(uchar ChnSet, uchar Volume)
**参数说明:  	ChnSet: 通道控制(bit 0:D0,bit 1: D1)
				Volume: 音量控制,实际是0 ~ -83dB(1dB/step)
**返回值:    	无
**说明:			该函数用于控制音量的大小
************************************************************************************************************************
*/
void VolSet(uchar ChnSet, uchar Volume)
{
	/* m62429数据格式(D0~D10)
	D0: 0:1CH / 1:2CH
	D1: 0: Both channels at a time / 1: A channel at a time
	D2~D6: 音量控制码(-4dB步进)
	D7~D8: 音量控制码(-1dB步进)
	D9:1
	D10:1
	*/
	uint Dat;
	uchar i;
	Volume=87-Volume;  //加上此句最大为0dB,最小为87dB
	
	Dat=0x600|(Volume&0xfc)|((Volume&0x03)<<7);  //音量合并成控制数据,查看DATASHEET
	Dat=Dat|(ChnSet&0x03);	//音量与通道控制合并成控制数据,查看DATASHEET

	for(i=0;i<10;i++)        //发送10位数据,共11位,最后1位另外发
	{
		SDA_VOL=Dat&0x01;
		SCL_VOL=1;   
		_nop_();
		_nop_();
		_nop_();
		SDA_VOL=0;  
		SCL_VOL=0;    
		Dat>>=1;
	}
	SDA_VOL=1;	//最后1位D10 = 1
	SCL_VOL=1;
	_nop_();
	_nop_();
	_nop_();
	SCL_VOL=0;
}

调用函数

VolSet(M62429_D0_SW_0|M62429_D1_SW_1, 36);//设置音量大小

两种方法实现的效果是一样的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值