简单好用的ISD1820语音录放芯片

30 篇文章 223 订阅 ¥9.90 ¥99.00
本文介绍了ISD1820语音录放芯片的使用方法,包括其工作电压、特点、应用电路和录放音控制方式。通过实例分析展示了如何实现按键控制的录音和播放功能,适合电子爱好者和嵌入式工程师学习。
摘要由CSDN通过智能技术生成

喜欢请关注微信公众号:嵌入式从0到1

在这里插入图片描述

公众号内容面向在校大学生、电子爱好者、嵌入式工程师;

涉及电子制作、模块使用、单片机技术、物联网相关知识分享;

软硬件全栈工程师,玩模块,学硬件,带你从0走到1


学习目标
  • 学习ISD1820语音芯片的使用方法
  • 学习STM32 GPIO的输入输出
  • 按键扫描功能实现
芯片特点
  1. 工作电压3~5V;
  2. 单段录放控制简单;
  3. 带话筒放大直通功能——可用作喊话器模块;
  4. 边沿/电平触发放音;
  5. 内置8Ω喇叭驱动放大电路,即可直接驱动8欧0.5W小喇叭;
  6. 无需单片机参与即可实现录放音功能;
  7. 取样率和录放音时间可以由外部振荡电阻调节。外接电阻调整录音时间,可以实现8~20秒语音录放。录入的时间越短音质越好,录入的时间越长音质越差;

振荡电阻(ROSC): 此端接振荡电阻至VSS,由振荡电阻的阻值决定录放音的时间。

在这里插入图片描述

推荐应用电路:

在这里插入图片描述

应用场景
  • 录音喊话器
  • 录音门铃
  • 留言
  • 播放固定欢迎语
封装及引脚功能:

在这里插入图片描述

  • 1脚为录音端(REC),高电平有效。只要REC变高电平(不管芯片处在节电状态还是正在放音),芯片即开始录音。录音期间,REC必须保持为高电平。REC变低电平或内存录满后,录音周期结束,芯片自动写入一个信息结束标志(EOM),使以后的重放操作可以及时停止。

如果用户只需要电路做放音用,可以在芯片录好音测试无误后,将芯片的REC端长期接地,取消REC按键,这样可以防止意外抹音。

  • 2脚为边沿触发放音端(PLAYE),此端出现上升沿时,芯片开始放音。放音持续到EOM标志或内存结束。开始放音后,可以释放PLAYE。

  • 3脚为电平触发放音端(PLAYL),此端从低电平变高电平时,芯片开始放音。放音持续至此端回到低电平,或遇到EOM标志,或内存结束。

  • 4脚为话筒输入端(MIC)。

  • 5脚为话筒参考端(MICREF)。

  • 6脚为自动增益控制端(AGC)。通常4.7μF的电容器在多数场合下可获得满意的效果。

  • 7脚、9脚为喇叭输出端(SP+、SP-),这对输出端可直接驱动8Ω以上的喇叭。

ISD1820能够直接推动喇叭,但音量不是很大。如果用户需要更大音量的输出,可以外加集成功率放大器。

  • 8脚、14脚为地线(VSSA,VSSD),芯片内部的模拟和数字电路的不同地线汇合在这两个引脚。

  • 10脚为振荡电阻端(ROSC),此端接振荡电阻至VSS,由振荡电阻的阻值决定录放音的时间。

  • 11脚为电源端(VCC),芯片内部的模拟和数字电路使用的不同电源总线在此引脚汇合,这样使得噪声最小。去耦电容应尽量靠近芯片。

  • 12脚为直通模式端(FT),此端允许接在MIC输入端的外部语音信号经过芯片内部的AGC电路、滤波器和喇叭驱动器而直接到达喇叭输出端,形成话筒扩音机功能。平时FT端为低电平,要实现直通功能,需将FT端接高电平,同时REC、PLAYE和PLAYL保持低电平。

  • 13脚为录音指示端(/RECLED),处于录音状态时,此端为低电平,可驱动LED。此外,放音遇到EOM标志时,此端输出一个低电平脉冲。此脉冲可用来触发PLAYE,实现循环放音。

录放音控制方式:

按键控制或者单片机IO控制;

实例分析
实现的功能
  • 按下松开按键PLAYE可以边沿触发播放语音;
  • 持续按下按键PLAYL可以电平触发播放语音;
  • 持续按下按键REC实现录音;

以上功能实现不需要单片机参与。

  • 按下松开按键REC,LED1点亮,相当于指示有录音留言;
  • 按下松开按键PLAYE,LED1熄灭,相当于指示留言已读。
原理图

在这里插入图片描述
在这里插入图片描述

代码实现
  • 按键BTN_PLAYE和BTN_REC初始化
//按键初始化函数 
//PB12 设置成输入
void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
 
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10|GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
	GPIO_Init(GPIOC, &GPIO_InitStructure);	
} 
  • 按键声明

#define BTN_PLAYE GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)
#define BTN_REC GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)

#define BTN_PLAYE_PRES	1
#define BTN_REC_PRES	2
  • 实现按键扫描函数
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//BTN_PLAYE_PRES,BTN_PLAYE按下
//BTN_REC_PRES,BTN_REC按下
//注意此函数有响应优先级,PLAYE>REC!!
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)
		key_up=1;  //支持连按	
	
	if(key_up&&(BTN_PLAYE==1||BTN_REC==1))
	{
		delay_ms(10);//去抖动 
		key_up=0;

		if(BTN_PLAYE==1)return BTN_PLAYE_PRES;
		else if(BTN_REC==1)return BTN_REC_PRES;
	}
	else if(BTN_PLAYE==0&&BTN_REC==0)
	{
		key_up=1; 
	}
	
	return 0;// 无按键按下
}
  • LED1声明
#define LED1 PAout(15)	// PA15
  • LED1初始化,根据原理图设计,LED1为低电平的时候,LED1亮。
//LED IO初始化
void LED_Init(void)
{
 
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
    
	GPIO_SetBits(GPIOA,GPIO_Pin_15);
}
  • 主函数实现,实现按键扫描,当得到BTN_PLAYE按键按下后,LED1熄灭;当得到BTN_REC按键按下后,LED1点亮。
#include "sys.h"
#include "delay.h"
#include "usart.h" 
#include "led.h" 		 	 
#include "key.h"  

int main(void)
{
    u8 key=0XFF;
	uart_init(115200);	
	 
	delay_init();
	LED_Init();
	KEY_Init();	
	
	//主循环	
	while(1) 
	{	
		key = KEY_Scan(0);
		
		if(key)   
		{ 
			switch(key)    
			{ 				
				case BTN_PLAYE_PRES:
					{
						LED1 = 1;	
						printf("BTN_PLAYE_PRES \r\n");		
					}
					break; 	
				case BTN_REC_PRES:
					{
						LED1 = 0;	
						printf("BTN_REC_PRES \r\n");			
					}
					break; 	
			}   
		}
		
		delay_ms(10); 
	}
	
}

在这里插入图片描述
从六月份开始,每个月会制作一个毕业设计难度的DIY作品,
前期作品以模块组合的形式搭建,降低门槛,方便大家一起跟着做;
DIY过程只在微信公众号中分享,大家没关注的,赶紧关注哈。

每个月时间大致安排:

  • 上个月25号,公布DIY作品名称;
  • 每月1日公布作品功能点及所需要的功能模块链接;
  • 每月10日前绘制完模块配合的线路板;
  • 每月15日之前硬件搭建完毕,之后按模块撰写代码,调试,随时公众号更新进展;
  • 每月月底开源整个作品的源码和PCB工程文件。

题目选取原则:

  • 公众号每个月20日发起投票,25号截止,票数最多的作为下个月的DIY内容;
  • 投票的备选项大家可以后台留言给我,我会选出五种留言最多的作为选项;
  • 每个月的DIY内容尽量与上个月分享的文章有一定的相关度,起到温故知新的作用。

有什么想法或者建议,留言给我哈。

下个月的每月一练内容已经在公众号中开启投票了,感兴趣请关注哈!


喜欢请关注微信公众号:嵌入式从0到1
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值