原创 用PIC单片机定时器2 实现语音功能

2013-2-16 07:56 2359 13 13 分类: MCU/ 嵌入式

PIC单片机的定时器2 可以实现PWM功能。

在每一个PWM周期,还可以中断。

利用这个功能,在每个中断中,填写下一个占空比。实现语音播放的功能。

语音用8K, 8BITS的PCM,          一般的WAV文件用微机上自带录音机就可以转换。

把转换后的WAV文件用UltraEdit打开,变成数组放到ROM中。

关于PWM的计算可以上这个网来计算,比较方便。

http://www.microgo.cn/applications/pic-pwm-calculator-code-generator.html

 

 

/*
 * PWM registers configuration
 * Fosc = 41666666.666666664 Hz
 * PFpwm = 8037.55 Hz (Requested : 8000 Hz)
 * Duty Cycle = 50 %
 * Resolution is 10 bits
 * Prescaler is 16
 * Ensure that your PWM pin is configured as digital output
 * this source code is provided 'as is',
 * use it at your own risks
 */
 
PR2 = 0b01010000 ;
T2CON = 0b00000111 ;
***R1L = 0b00101000 ;
***1CON = 0b10011100 ;  //10 = 半桥输出:P1A和P1B被调制,带有死区控制
 
因为需要2个PWM 互补输出,需要把***1COM 改成半桥输出。
 
E***1DEL = 0X80;// 没有死区
 
PIR1bits.TMR2IF = 0; 
PIE1bits.TMR2IE = 1; 
IPR1bits.TMR2IP = 0;  
TRISCbits.TRISC2 = 0;     // RC2  SET OUTPIN
 

 

 
//在每次中断125US ,把放音数据放入PWM 
if ((PIR1bits.TMR2IF)&&(PIE1bits.TMR2IE))   //  
{
PIR1bits.TMR2IF = 0;
***R1L  = voice_buffer[voice_count];
voice_count ++;
if (voice_count >= sizeof(voice_buffer))voice_count = 0;
}

 

 

 

用硬件来实现还是蛮简单的,直接驱动喇叭音质差,很差。

看来后续的滤波是必不可少的。

如果有做过的朋友希望能提供一个简单实用的电路。

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条