簡(jiǎn)單好用的ISD1820語(yǔ)音錄放芯片
學(xué)習(xí)目標(biāo)
芯片特點(diǎn)
工作電壓3~5V;
單段錄放控制簡(jiǎn)單;
帶話筒放大直通功能——可用作喊話器模塊;
邊沿/電平觸發(fā)放音;
內(nèi)置8Ω喇叭驅(qū)動(dòng)放大電路,即可直接驅(qū)動(dòng)8歐0.5W小喇叭;
無(wú)需單片機(jī)參與即可實(shí)現(xiàn)錄放音功能;
取樣率和錄放音時(shí)間可以由外部振蕩電阻調(diào)節(jié)。外接電阻調(diào)整錄音時(shí)間,可以實(shí)現(xiàn)8~20秒語(yǔ)音錄放。錄入的時(shí)間越短音質(zhì)越好,錄入的時(shí)間越長(zhǎng)音質(zhì)越差;
振蕩電阻(ROSC): 此端接振蕩電阻至VSS,由振蕩電阻的阻值決定錄放音的時(shí)間。
推薦應(yīng)用電路
應(yīng)用場(chǎng)景
錄音喊話器
錄音門鈴
留言
播放固定歡迎語(yǔ)
封裝及引腳功能
1腳為錄音端(REC),高電平有效。只要REC變高電平(不管芯片處在節(jié)電狀態(tài)還是正在放音),芯片即開始錄音。錄音期間,REC必須保持為高電平。REC變低電平或內(nèi)存錄滿后,錄音周期結(jié)束,芯片自動(dòng)寫入一個(gè)信息結(jié)束標(biāo)志(EOM),使以后的重放操作可以及時(shí)停止。
如果用戶只需要電路做放音用,可以在芯片錄好音測(cè)試無(wú)誤后,將芯片的REC端長(zhǎng)期接地,取消REC按鍵,這樣可以防止意外抹音。
2腳為邊沿觸發(fā)放音端(PLAYE),此端出現(xiàn)上升沿時(shí),芯片開始放音。放音持續(xù)到EOM標(biāo)志或內(nèi)存結(jié)束。開始放音后,可以釋放PLAYE。
3腳為電平觸發(fā)放音端(PLAYL),此端從低電平變高電平時(shí),芯片開始放音。放音持續(xù)至此端回到低電平,或遇到EOM標(biāo)志,或內(nèi)存結(jié)束。
4腳為話筒輸入端(MIC)。
5腳為話筒參考端(MICREF)。
6腳為自動(dòng)增益控制端(AGC)。通常4.7μF的電容器在多數(shù)場(chǎng)合下可獲得滿意的效果。
7腳、9腳為喇叭輸出端(SP+、SP-),這對(duì)輸出端可直接驅(qū)動(dòng)8Ω以上的喇叭。
ISD1820能夠直接推動(dòng)喇叭,但音量不是很大。如果用戶需要更大音量的輸出,可以外加集成功率放大器。
8腳、14腳為地線(VSSA,VSSD),芯片內(nèi)部的模擬和數(shù)字電路的不同地線匯合在這兩個(gè)引腳。
10腳為振蕩電阻端(ROSC),此端接振蕩電阻至VSS,由振蕩電阻的阻值決定錄放音的時(shí)間。
11腳為電源端(VCC),芯片內(nèi)部的模擬和數(shù)字電路使用的不同電源總線在此引腳匯合,這樣使得噪聲最小。去耦電容應(yīng)盡量靠近芯片。
12腳為直通模式端(FT),此端允許接在MIC輸入端的外部語(yǔ)音信號(hào)經(jīng)過芯片內(nèi)部的AGC電路、濾波器和喇叭驅(qū)動(dòng)器而直接到達(dá)喇叭輸出端,形成話筒擴(kuò)音機(jī)功能。平時(shí)FT端為低電平,要實(shí)現(xiàn)直通功能,需將FT端接高電平,同時(shí)REC、PLAYE和PLAYL保持低電平。
13腳為錄音指示端(/RECLED),處于錄音狀態(tài)時(shí),此端為低電平,可驅(qū)動(dòng)LED。此外,放音遇到EOM標(biāo)志時(shí),此端輸出一個(gè)低電平脈沖。此脈沖可用來觸發(fā)PLAYE,實(shí)現(xiàn)循環(huán)放音。
錄放音控制方式
按鍵控制或者單片機(jī)IO控制;
實(shí)例分析
實(shí)現(xiàn)的功能
按下松開按鍵PLAYE可以邊沿觸發(fā)播放語(yǔ)音;
持續(xù)按下按鍵PLAYL可以電平觸發(fā)播放語(yǔ)音;
持續(xù)按下按鍵REC實(shí)現(xiàn)錄音;
以上功能實(shí)現(xiàn)不需要單片機(jī)參與。
按下松開按鍵REC,LED1點(diǎn)亮,相當(dāng)于指示有錄音留言;
按下松開按鍵PLAYE,LED1熄滅,相當(dāng)于指示留言已讀。
原理圖
代碼實(shí)現(xiàn)
按鍵BTN_PLAYE和BTN_REC初始化
//按鍵初始化函數(shù)
//PB12 設(shè)置成輸入
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
實(shí)現(xiàn)按鍵掃描函數(shù)
//按鍵處理函數(shù)
//返回按鍵值
//mode:0,不支持連續(xù)按;1,支持連續(xù)按;
//返回值:
//0,沒有任何按鍵按下
//BTN_PLAYE_PRES,BTN_PLAYE按下
//BTN_REC_PRES,BTN_REC按下
//注意此函數(shù)有響應(yīng)優(yōu)先級(jí),PLAYE>REC!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按鍵按松開標(biāo)志
if(mode)
key_up=1; //支持連按
if(key_up&&(BTN_PLAYE==1||BTN_REC==1))
{
delay_ms(10);//去抖動(dòng)
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;// 無(wú)按鍵按下
}
LED1聲明
#define LED1 PAout(15) // PA15
LED1初始化,根據(jù)原理圖設(shè)計(jì),LED1為低電平的時(shí)候,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);
}
主函數(shù)實(shí)現(xiàn),實(shí)現(xiàn)按鍵掃描,當(dāng)?shù)玫紹TN_PLAYE按鍵按下后,LED1熄滅;當(dāng)?shù)玫紹TN_REC按鍵按下后,LED1點(diǎn)亮。
#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();
//主循環(huán)
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);
}
}
推薦閱讀:
STM32單片機(jī)最小系統(tǒng)詳解
STM32F103 串口的使用方法
STM32中精確延時(shí)函數(shù)的實(shí)現(xiàn)
DHT11及DHT21溫濕度傳感器時(shí)序圖解析(STM32)
LD3320語(yǔ)音識(shí)別模塊:LDV7模塊使用詳解
基于STM32固件庫(kù)的MDK5工程建立
修改Keil工程名稱并添加其他模塊文件
Keil環(huán)境下STM32工程加入cJSON
常用電路板制作方法
讓步進(jìn)電機(jī)動(dòng)起來
喜歡請(qǐng)關(guān)注微信公眾號(hào):程序員小哈
公眾號(hào)內(nèi)容面向在校大學(xué)生、電子愛好者、嵌入式工程師;
涉及電子制作、模塊使用、單片機(jī)技術(shù)、物聯(lián)網(wǎng)相關(guān)知識(shí)分享;
玩模塊,學(xué)硬件,帶你從0走到1
若覺得本次分享的文章對(duì)您有幫助,隨手點(diǎn)[在看]并轉(zhuǎn)發(fā)分享,也是對(duì)我的支持。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!