录音笔的设计与制作.docx
- 文档编号:5544013
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:7
- 大小:18.11KB
录音笔的设计与制作.docx
《录音笔的设计与制作.docx》由会员分享,可在线阅读,更多相关《录音笔的设计与制作.docx(7页珍藏版)》请在冰豆网上搜索。
录音笔的设计与制作
录音笔的设计与制作
摘要:
该实验设计基于AVRmega16开发板平台,介绍和分析了市场上流行的录音笔的基本原理,并做出了较为简单的录音笔模型展示其原理!
主要功能有录音,存储,删除,放音等!
关键字:
单片机录音笔录音与放音
我们的课程设计是基于该系列的单片机,在硬件滤波的基础上,实现录音笔的各项功能!
所作的录音笔具有可移植性强,功能简单,可以简单继续添加更多相关功能的模型!
对市场上流行已久的录音笔,我们有着学习相关知识以及制作的兴趣,又加上单片机课程给我们提供了相关的实验器材,所以说我们的目的最主要是学习,当然也有好奇的心理在里面。
我们制作的录音笔能够进行简单语音信号的采集,存储与播放。
对于应用于实际生活中的各种语音信号的处理,还有很大差距,这有待于系统设计的进一步完善和改进,功能的进一步扩充。
硬件部分:
电路图如下:
硬件设计思想:
用麦克风采集音频信号,经过一次功放,然后用电容进行一次滤波,电容的大小采用2.2nf,滤波后进行AD转换,转换后的信号存在AT45DB081B中,然后用单片机调出信号,经过一次放大,将信号传到扬声器播放。
电路图上,mag16以上的电路图就是用来采集信号的,放大信号用的是LM324集成功放芯片。
Mag16一下的电路图用来放音,也是经过一次信号放大,再放大的同时尽心信号过滤,分别用了2.2nf和22nf的电容接地来实现!
软件部分:
软件设计思想:
首先是设备初始化,但是我在初始化程序中ADC.定时器等并没有进行初始化,只是告诉芯片PA0应该设置为输入,不上拉使能(为AD转换的输入通道设置),用于SPI的输出端口哪些应该为输入,哪些该为输出,如此等简单的引脚初始化。
初始化完成之后,就进入主程序中进行键盘扫描,速度极其的快,无键盘按下时甚至只用不到1微秒的时间。
一旦检测到哪个键按下就进入相应的程序中去。
录音程序的设计思想:
检测到录音键按下后进入,然后ADC初始化同时开始一次AD转换,延时等待一小会,AD转换结束了。
接着SPI、定时器初始化,从此就靠定时器来主导整个录音程序的运行了。
定时器有中断,其中有要求TCNT0设置这个基本的操做,还有一个就是ADSC置位要求进行下一次转换。
至于AD转化的值则在AD中断中往一个已经建好循环队列中写。
定时器定时80微秒,一次AD转换是在定是一开始就进行,需要时间52微秒,也就是说定时器溢出时AD中断一定结束了,下一次中断之前数据一定已经进入了队列中,如此循环。
而在这两个终端中间有大量的时间给我利用循环队列的特点向Dataflash中写数据。
Dataflash有2048页,每一页有264字节,在每一页写满之前,程序不会再检测按键,一直到一页写满了,才检测按键,如果仍旧是按下则继续录音,否则退出。
退出后如果存储空间未满则存储位置的参数会保留,下次录音可以接下去。
如果满了,则录音工作指示灯永远都不会亮了,除非重启。
但是在退出录音程序时,ADC、SPI、定时器会全部关闭,再进入程序时再初始化开启。
放音程序的设计思想:
与录音程序相同,进入程序之后才开启所需要的功能。
不同的是先开录音工作指示灯,SPI,然后向Dataflash要一次数据,再开TIMER2的快速PWM功能。
一次PWM时间是16微秒,每五次更新一次,通过调节占空比来实现DA转换的功能。
同样的每五次中断期间都有足够的时间给程序向Dataflash要数据。
放音程序最大的特点是那些控制参数虽然是全局变量,但是它们在进入程序的第一时间就被初始化了,在就要退出程序的最后时刻再次被初始化。
这样就使得整个程序可以进行循环放音,但是每次都是从头开始,放开按键时停止,再按下时从头开始。
以此结束时会因为人很不可能恰好在退出程序时放开按键,所以放音键按下的状态会在下一个按键检测循环中被检测到,并进入方音程序。
软件实现具体流程:
相关软件程序模块源代码以及相关功能:
//ICC-AVRapplicationbuilder:
2007-6-2217:
58:
09
//Target:
M16
//Crystal:
16.000Mhz
#include
#include
#defineBUFFER1_READ0x54
#defineBUFFER2_READ0x56
#defineMAIN_TO_BUFFER10x53
#defineMAIN_TO_BUFFER20x55
#defineBUFFER1_WRITE0x84
#defineBUFFER2_WRITE0x87
#defineBUFFER1_TO_MAIN_WITH0x83
#defineBUFFER2_TO_MAIN_WITH0x86
#defineBUFFER1_TO_MAIN_WITHOUT0x88
#defineBUFFER2_TO_MAIN_WITHOUT0x89
#defineMAIN_PROGRAM_BUFFER10x82
#defineMAIN_PROGRAM_BUFFER20x85
//给SPI定义的PORTB的引脚
#defineDF_CS3
#defineDDR_MOSI5
#defineDDR_MISO6
#defineDDR_SCK7
//给工作状态指示灯LED的引脚定义
//PA7?
0B01111111
#defineRECORD_LED0x7F
#definePLAY_LED0xBF
#defineERASE_LED0xDF
#defineunit8unsignedchar
#defineunit16unsignedint
volatileunit8over_times=0,play_buffer_number=1,updata_OCR=0;
volatileunsignedcharNEW_OCR=0;
volatileunit16play_buffer_counter=0,play_page_counter=0;
volatileunsignedcharrecord_buffer[264]={0};
volatileunit8new_turn=0,record_buffer_number=1;
volatileunit16record_page_counter=0,record_buffer_counter=0,data_position=0,send_position=0;
voidport_init(void)
{
PORTA=0xE0;
DDRA=0xE0;
PORTB=0x00;
DDRB=0xB8;
PORTC=0x43;//m103outputonly
DDRC=0x00;
PORTD=0x00;
DDRD=0x80;
}
voidtimer0_init(void)
{
TCCR0=0x00;//stop
TCNT0=0x60;//setcount
TCCR0=0x02;//starttimer8分频
TIMSK|=0x01;//timer0interruptsources溢出中断
SEI();
}
voidtimer2_init(void)
{
TCCR2=0x00;//stop
ASSR=0x00;//setasyncmode
TCNT2=0x01;//setup
OCR2=0xFF;
TCCR2=0x69;//start
TIMSK|=0x40;//timer2interruptsources
}
//callthisroutinetoinitializeallperipherals
voidinit_devices(void)
{
//stoperrantinterruptsuntilsetup
CLI();//disableallinterrupts
port_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;//timerinterruptsources
SEI();//re-enableinterrupts
//allperipheralsarenowinitialized
}
voidadc_init(void)
{
ADCSRA=0x00;//disableadc
ADMUX=0x60;//selectadcinput0andAVCC左对齐
ACSR=0x80;
ADCSRA=0xC6;//刚进入就进行一次A/D转换
while(!
(ADCSRA&0x40));//等待转换结束
}
voidtimer0_stop(void)
{
TCCR0=0x00;//stop
TIMSK&=~0x01;//stoptimer0overflowinterrupt
}
voiddelay_ms(unsignedintn)
{
unsignedinti;
for(;n!
=0;n--)
for(i=2665;i!
=0;i--)
;
}
voidsend_SPI(unsignedchardata)
{
SPDR=data;
while(!
(SPSR&0x80));
}
voidrecord(void)
{
//PORTA&=RECORD_LED;?
//不应该从这儿开始开灯,开录音指示灯
adc_init();//调用
timer0_init();//调用
SPCR=0x5c;//enableSPI
SPSR=0x00;
PORTB|=(1< while(! (PINC&0x01)&&record_page_counter<2048) { PORTA&=RECORD_LED;//开录音指示灯 record_buffer_counter=0; while(record_buffer_counter<264)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 录音笔 设计 制作