IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> M62429驱动笔记 -> 正文阅读

[嵌入式]M62429驱动笔记

M62429驱动笔记

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

m62429 的图像结果

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);//设置音量大小

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:17:17  更:2021-08-13 12:18:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:38:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码