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