ISD17240

ISD17240晶片是Winbond推出的單片優質語音錄放電路晶片。

語音晶片

ISD1700系列晶片是Winbond推出的單片優質語音錄放電路,該晶片提供多項新功能,包括內置專利的多信息管理系統,新信息提示(vAlert),雙運作模式(獨立&嵌入式),以及可定製的信息操作指示音效。晶片內部包含有自動增益控制、麥克風前置擴大器、揚聲器驅動線路、振盪器與記憶體等的全方位整合系統功能。

★  功能特點

· 可錄、放音十萬次,存儲內容可以斷電保留一百年

· 按鍵模式和MCU串列控制模式(SPI協定)

· MIC和ANAin兩種錄音模式

· PWM和AUD/AUX三种放音輸出方式

· 可處理多達255段以上信息

· 有豐富多樣的工作狀態提示

· 多種採樣頻率對應多種錄放時間

· 音質好,電壓範圍寬,套用靈活

★  電特性

· 工作電壓:DC2.4V~5.5V,,最高不能超過6V

· 靜態電流:0.5 ~1 μA

· 工作電流:20mA

型號參數列表及管腳定義列表


ISD1730 ISD1740 ISD1750 ISD1760 ISD1790 振盪電阻
12kHz 20秒 26秒 33秒 40秒 60秒 60kΩ
8kHz 30秒 40秒 50秒 60秒 90秒 80kΩ
6.4kHz 37秒 50秒 62秒 75秒 112秒 100kΩ
5.3kHz 45秒 60秒 75秒 90秒 135秒 120kΩ
4kHz 60秒 80秒 100秒 120秒 180秒 160kΩ

ISD17120 ISD17150 ISD17180 ISD17210 ISD17240 振盪電阻
12kHz 80秒 100秒 120秒 140秒 160秒 60kΩ
8kHz 120秒 150秒 180秒 210秒 240秒 80kΩ
6.4kHz 150秒 187秒 225秒 262秒 300秒 100kΩ
5.3kHz 181秒 226秒 271秒 317秒 362秒 120kΩ
4kHz 240秒 300秒 360秒 420秒 480秒 160kΩ
引腳名稱 PDIP/SOIC封裝 TSOP封裝 引腳說明
VCCD 1 22 數字電路電源
/LED 2 23 LED指示信號輸出
/RESET 3 24 晶片復位
MISO 4 25 SPI接口的串列輸出。ISD1700在 SCLK下降沿之前的半個周期將數據放置在MISO端。數據在SCLK的下降沿時移出
MOSI 5 26 SPI接口的數據輸入連線埠。主控制晶片在SCLK上升沿之前的半個周期將數據放置在MOSI端。數據在SCLK上升沿被鎖存在晶片內。此管腳在空閒時,應該被拉高
SCLK 6 27 SPI接口的時鐘。由主控制晶片產生,並且被用來同步晶片MOSI和MISO端各自的數據輸入和輸出。此管腳空閒時,必須拉高。
/SS 7 28 為低時,選擇該晶片成為當前被控制設備並且開啟SPI接口。空閒時,需要拉高
VSSA 8 1 模擬地
Anain 9 2 晶片錄音或直通時,輔助的模擬輸入。需要一個交流耦合電容(典型值為0.1uF),並且輸入信號的幅值不能超出1.0Vpp。APC暫存器的D3可以決定Anain信號被立刻錄製到存儲器中,與Mic信號混合被錄製到存儲器中,或者被快取到喇叭端並經由直通線路從AUD/AUX輸出。
MIC+ 10 3 麥克風輸入+
MIC- 11 4 麥克風輸入-
VSSP2 12 5 負極PWM喇叭驅動器地
SP- 13 6 喇叭輸出-
VCCP 14 7 PWM喇叭驅動器電源
SP+ 15 8 喇叭輸出+
VSSP1 16 9 正極PWM喇叭驅動器地
AUD/ AUX 17 10 輔助輸出,決定於APC暫存器的D7,用來輸出一個AUD或AUX輸出。AUD是一個單端電流輸出,而AuxOut是一個單端電壓輸出。他們能夠被用來驅動一個外部揚聲器。出廠默認設定為AUD。APC暫存器的D9可以使其掉電
AGC 18 11 自動增益控制
/VOL 19 12 音量控制
ROSC 20 13 振盪電阻ROSC用一個電阻連線到地,決定晶片的採樣頻率
VCCA 21 14 模擬電路電源
/FT 22 15 在獨立按鍵模式下,當FT一直為低,Anain直通線路被激活。Anain信號被立刻從Anain經由音量控制線路發射到喇叭以及AUD/AUX輸出。不過,當在SPI模式下,SPI無視這個輸入,而且直通線路被APC暫存器的D0所控制。該管腳有一個內部上拉和防抖動設計,允許使用按鍵開關來控制開始和結束。
/PLAY 23 16 播放控制端,有電平觸發和脈衝觸發兩種模式
/REC 24 17 錄音控制端,低電平有效
/ERASE 25 18 擦除控制端,低電平有效
/FWD 26 19 快進控制端,低電平有效
RDY /INT 27 20 一個開路輸出。 Ready( 獨立模式 ) 該管腳在錄音,放音,擦除和指向操作時保持為低,保持為高時進入掉電狀態 Interrupt(SPI 模式 ) 在完成SPI命令後,會產生一個低信號的中斷。一旦中斷消除,該腳變回為高。
VSSD 28 21 數字地

ISD17240工作電路

獨立按鍵電路


ISD1700的獨立按鍵工作模式錄放電路非常簡單(後附圖),而且功能強大。不僅有錄、放功能,還有快進、擦除、音量控制、直通放音和復位等功能。這些功能僅僅通過按鍵就可完成。

ISD17240 ISD17240

SPI協定工作電路

ISD17240 ISD17240

ISD17240SPI操作例程

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

//******************定義連線埠******************//

sbit SS = P1^0;

sbit SCK = P1^1;

sbit MOSI = P1^2;

sbit MISO = P1^3;

sbit PR = P1^4;//PLAY = 0;REC = 1;

sbit STOP = P1^5;

sbit AN = P1^6;

sbit LED = P1^7;

//******************定義ISD1700狀態暫存器及各標誌位******************//

uchar bdata SR0_L;//SR0暫存器低位、高位

uchar bdata SR0_H;

uchar bdata SR1;//SR1暫存器

uchar APC_L = 0, APC_H = 0;//APC暫存器

uchar PLAYADDL = 0, PLAYADDH = 0;//放音指針低位、高位

uchar RECADDL = 0, RECADDH = 0;//錄音指針低位、高位

sbit CMD_ERR = SR0_L^0;//SPI指令無效標誌位

sbit FULL = SR0_L^1;//晶片存儲空間滿標誌位

sbit PU = SR0_L^2;//上電標誌位

sbit EOM = SR0_L^3;//EOM標誌位

sbit INT = SR0_L^4;//操作完成標誌位

sbit RDY = SR1^0;//晶片空閒標誌位

sbit ERASE = SR1^1;//擦除標誌位

sbit PLAY = SR1^2;//放音標誌位

sbit REC = SR1^3;//錄音標誌位

//******************定義標誌位******************//

uchar bdata fang;

sbit PR_fang = fang^1;//錄音、放音標誌位,放音=0,錄音=1

sbit Erase_fang = fang^4;//擦出標誌位

sbit STOP_fang = fang^7;//停止放音標誌位

//******************延時μs******************//

void delay(uint time)//延時n微秒

{

while(time!=0)

{

time--;

}

}

//******************延時ms******************//

void delayms(uint time)//延時n毫秒

{

for(time; time>0; time--)

{

TH0 = 0xfc;

TL0 = 0x18;

TR0 = 1;//計數器0啟動

while(TF0!=1);//計數溢出處理

TF0 = 0;

TR0 = 0;

}

}

//******************CPU初始化******************//

void cpu_init (void)

{

P1 = 0xFF;

P2 = 0xFF;

P3 = 0xFF;

TMOD = 0x01;//定時器初始化,工作於方式1

EA = 0;//關中斷

fang = 0;//標誌位歸0

LED = 1;//關指示燈

}

//******************傳送、讀回數據******************//

uchar isd_senddata (uchar dat)

{

uchar i, BUF_ISD = dat;

SS = 0;

SCK = 1;

delay(4);

for(i=0; i<8; i++)

{

SCK = 0;

if((BUF_ISD&0x01)==1)

{

MOSI = 1;

}

else

{

MOSI = 0;

}

BUF_ISD = BUF_ISD >> 1;

if(MISO)

{

BUF_ISD = BUF_ISD|0x80;

}

SCK = 1;

delay(6);

}

MOSI = 0;

return(BUF_ISD);

}

//******************上電******************//

void isd_pu (void)

{

isd_senddata (0x01);

isd_senddata (0x00);

SS = 1;

delayms(50);

}

//******************停止當前操作******************//

void isd_stop (void)

{

isd_senddata (0x02);

isd_senddata (0x00);

SS = 1;

delayms(50);

}

//******************復位******************//

void isd_reset (void)

{

isd_senddata (0x03);

isd_senddata (0x00);

SS = 1;

}

//******************清除中斷******************//

void isd_clr_int (void)

{

isd_senddata (0x04);

isd_senddata (0x00);

SS = 1;

}

//******************讀狀態暫存器內容******************//

void isd_rd_status (void)

{

isd_senddata (0x05);

isd_senddata (0x00);

isd_senddata (0x00);

SS = 1;

delay(2);

SR0_L = isd_senddata (0x05);

SR0_H = isd_senddata (0x00);

SR1 = isd_senddata (0x00);

SS = 1;

}

//******************讀放音指針******************//

void isd_rd_playptr (void)

{

isd_senddata (0x06);

isd_senddata (0x00);

isd_senddata (0x00);

isd_senddata (0x00);

SS = 1;

delay(2);

SR0_L = isd_senddata (0x06);

SR0_H = isd_senddata (0x00);

PLAYADDL = isd_senddata (0x00);

PLAYADDH = isd_senddata (0x00);

SS = 1;

}

//******************下電******************//

void isd_pd (void)

{

isd_senddata (0x07);

isd_senddata (0x00);

SS = 1;

delayms(50);

}

//******************讀錄音指針******************//

void isd_rd_recptr (void)

{

isd_senddata (0x08);

isd_senddata (0x00);

isd_senddata (0x00);

isd_senddata (0x00);

SS = 1;

delay(2);

SR0_L = isd_senddata (0x08);

SR0_H = isd_senddata (0x00);

RECADDL = isd_senddata (0x00);

RECADDH = isd_senddata (0x00);

SS = 1;

}

//******************讀晶片ID******************//

uchar isd_devid (uchar deviceNO)

{

isd_senddata (0x09);

isd_senddata (0x00);

isd_senddata (0x00);

SS = 1;

delay(2);

isd_senddata (0x09);

isd_senddata (0x00);

deviceNO = isd_senddata (0x00);

SS = 1;

return(deviceNO);

}

//******************放音******************//

void isd_play (void)

{

isd_senddata (0x40);

isd_senddata (0x00);

SS = 1;

}

//******************錄音******************//

void isd_rec (void)

{

isd_senddata (0x41);

isd_senddata (0x00);

SS = 1;

}

//******************擦除******************//

void isd_erase (void)

{

isd_senddata (0x42);

isd_senddata (0x00);

SS = 1;

}

//******************全部擦出******************//

void isd_g_erase (void)

{

isd_senddata (0x43);

isd_senddata (0x00);

SS = 1;

}

//******************讀APC暫存器內容******************//

void isd_rd_apc (void)

{

isd_senddata (0x44);

isd_senddata (0x00);

isd_senddata (0x00);

isd_senddata (0x00);

SS = 1;

delay(2);

SR0_L = isd_senddata (0x44);

SR0_H = isd_senddata (0x00);

APC_L = isd_senddata (0x00);

APC_H = isd_senddata (0x00);

SS = 1;

}

//******************寫APC暫存器******************//

void isd_wr_apc2 (uchar apcdatl,apcdath)

{

isd_senddata (0x65);

isd_senddata (apcdatl);

isd_senddata (apcdath);

SS = 1;

}

//******************將APC暫存器內容寫入NVCFG******************//

void isd_wr_nvcfg (uchar apcdatl,apcdath)

{

isd_senddata (0x46);

isd_senddata (apcdatl);

isd_senddata (apcdath);

SS = 1;

}

//******************將NVCFG內容寫入APC******************//

void isd_ld_nvcfg (void)

{

isd_senddata (0x47);

isd_senddata (0x00);

SS = 1;

}

//******************快進******************//

void isd_fwd (void)

{

isd_senddata (0x48);

isd_senddata (0x00);

SS = 1;

}

//******************空檢查******************//

void isd_chk_mem (void)

{

isd_senddata (0x49);

isd_senddata (0x00);

SS = 1;

}

//******************外部時鐘的啟用、關閉******************//

void isd_extclk (void)

{

isd_senddata (0x4a);

isd_senddata (0x00);

SS = 1;

}

//******************指定地址放音******************//

void isd_set_play (uchar saddl,saddh,eaddl,eaddh)

{

isd_senddata (0x80);

isd_senddata (0x00);

isd_senddata (saddl);

isd_senddata (saddh);

isd_senddata (eaddl);

isd_senddata (eaddh);

isd_senddata (0x00);

SS = 1;

}

//******************指定地址錄音******************//

void isd_set_rec (uchar saddl,saddh,eaddl,eaddh)

{

isd_senddata (0x81);

isd_senddata (0x00);

isd_senddata (saddl);

isd_senddata (saddh);

isd_senddata (eaddl);

isd_senddata (eaddh);

isd_senddata (0x00);

SS = 1;

}

//******************指定地址擦除******************//

void isd_set_erase (uchar saddl,saddh,eaddl,eaddh)

{

isd_senddata (0x82);

isd_senddata (0x00);

isd_senddata (saddl);

isd_senddata (saddh);

isd_senddata (eaddl);

isd_senddata (eaddh);

isd_senddata (0x00);

SS = 1;

}

//******************晶片系統初始化******************//

void isd_init (void)

{

uchar i = 2;

SS = 1;

SCK = 1;

MOSI = 0;

do

{

isd_pu ();

isd_rd_status ();

}while(CMD_ERR||(!PU));

isd_wr_apc2 (0x40,0x04);

do

{

isd_rd_status ();

}while(RDY==0);

do

{

LED = 0;

delayms(300);

LED = 1;

delayms(300);

i--;

}while(i>0);

}

//******************isd1700的相關操作******************//

void isdwork (void)

{

uchar i;

switch (fang)

{

case 0x00:

{

do

{

isd_rd_status ();

}while(RDY==0);

delayms(10);

isd_play ();

delayms(2);

LED = 0;

do

{

isd_rd_status ();

if(STOP==0)

{

delayms (10);

if(STOP==0)

{

LED = 1;

isd_clr_int ();

isd_stop ();

isd_reset ();

isd_pd ();

isd_init ();

return;

}

}

}while(PLAY==1);

LED = 1;

isd_clr_int ();

do

{

isd_rd_status ();

}while(RDY==0);

delayms (10);

isd_fwd ();

do

{

isd_rd_status ();

}while(RDY==0);

}

break;

case 0x02:

{

isd_clr_int ();

do

{

isd_rd_status ();

}while(RDY==0);

delayms(10);

isd_rec ();

delayms(2);

LED = 0;

do

{

isd_rd_status ();

if(FULL==1)

{

for(i=3; i>0; i--)

{

LED = 0;

delayms (300);

LED = 1;

delayms (200);

}

}

}while(AN==0);

isd_clr_int ();

isd_stop ();

LED = 1;

}

break;

case 0x10:

{

do

{

isd_rd_status ();

}while(RDY==0);

delayms (10);

isd_g_erase ();

delayms (2);

do

{

isd_rd_status ();

}while(RDY==0);

for(i=3; i>0; i--)

{

LED = 0;

delayms (300);

LED = 1;

delayms (200);

}

}

break;

case 0x80:

{

isd_clr_int ();

isd_stop ();

isd_reset ();

isd_pd ();

}

break;

}

}

//******************主程式******************//

void main (void)

{

uchar i;

cpu_init ();

delayms (1);

isd_init ();

while(1)

{

if(AN==0)

{

delayms (10);

if(AN==0)

{

if(PR==1)

{

PR_fang = 1;

}

else

{

PR_fang = 0;

}

isdwork ();

}

}

if(STOP==0)

{

delayms (10);

if(STOP==0)

{

for(i=100; i>0; i--)

{

if(STOP==1)

{

STOP_fang = 1;

isdwork ();

isd_init ();

break;

}

delayms(30);

}

if (STOP_fang==1)

{

fang = 0;

continue;

}

Erase_fang = 1;

isdwork ();

}

}

}

}

相關詞條

熱門詞條

聯絡我們