热度 13
2013-2-16 07:56
2359 次阅读|
0 个评论
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 ++; if (voice_count = sizeof(voice_buffer))voice_count = 0; } 用硬件来实现还是蛮简单的,直接驱动喇叭音质差,很差。 看来后续的滤波是必不可少的。 如果有做过的朋友希望能提供一个简单实用的电路。