查看: 3828|回复: 38
|
PIC 可不可以 digitize analog sound waveform ?
[复制链接]
|
|
PIC16F87X 有 ADC function 对吗? 请问可不可以用来 digitize analog waveform ? 偶用 Electret Condenser MIC 来录声音,然后 filter noise, 然后要 convert to digital signal 来 send 去电脑。 |
|
|
|
|
|
|
|
发表于 16-8-2006 05:34 PM
|
显示全部楼层
原帖由 cshaopin 于 16-8-2006 04:59 PM 发表
PIC16F87X 有 ADC function 对吗? 请问可不可以用来 digitize analog waveform ? 偶用 Electret Condenser MIC 来录声音,然后 filter noise, 然后要 convert to digital signal 来 send 去电脑。
可以。 用adc。我现在用adc把0-5v的signal换去digital signal.
noise filtering我就自己做。。
[ 本帖最后由 fritlizt 于 16-8-2006 05:35 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 16-8-2006 10:42 PM
|
显示全部楼层
原帖由 fritlizt 于 16-8-2006 05:34 PM 发表
可以。 用adc。我现在用adc把0-5v的signal换去digital signal.
noise filtering我就自己做。。
可不可以 post 您的 PIC code 上来让小弟参考呢? 因为小弟第一次用 PIC。刚刚才收到 MICROSHIP 寄来的 free sample。有 PIC16LF872-I/SS,PIC16F872-I/SS,PIC16F874A-I/L,PIC16F874A-I/P。请问这些 component model 的最后那 I/SS I/L I/P 代表什么? |
|
|
|
|
|
|
|
发表于 17-8-2006 11:34 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 17-8-2006 12:42 PM
|
显示全部楼层
原帖由 cshaopin 于 16-8-2006 04:59 PM 发表
PIC16F87X 有 ADC function 对吗? 请问可不可以用来 digitize analog waveform ? 偶用 Electret Condenser MIC 来录声音,然后 filter noise, 然后要 convert to digital signal 来 send 去电脑。
你要录音多久??
音频多少?要怎样的quality?我怕sample rate不够快~~
当digitize的时候,mcu不可能分身send data 给电脑~~
或者需要很好的mcu,或者dsp可以代替
而且你需要储存在EEPROM内~~所以需要很大的memory,不然录音不会长的~~ |
|
|
|
|
|
|
|
发表于 17-8-2006 09:00 PM
|
显示全部楼层
ADC可以将声音换成digital format。
8K sampling rate就差不多了,人的耳朵就只能听见3.5K。
如果想储存在EEPROM的话,可以用APDCM COMPRESSION,10, 12,16 bits减少至4,
2bits。如果8K sampling rate,每秒使用4K MEMORY。
如果只是要传去电脑,跟本不需要MEMORY 或COMPRESSION。
每SAMPLE一次,就传到电脑上去。如果要安全的话buffer几十 bytes吧。
以上method要小心处理,必须确定传送data的当时不能间断 sampling。 |
|
|
|
|
|
|
|
发表于 17-8-2006 09:24 PM
|
显示全部楼层
ADC可以将声音换成digital format。
8K sampling rate就差不多了,人的耳朵就只能听见3.5K。
如果想储存在EEPROM的话,可以用APDCM COMPRESSION,10, 12,16 bits减少至4,
2bits。如果8K sampling rate,每秒使用4K MEMORY。
如果只是要传去电脑,跟本不需要MEMORY 或COMPRESSION。
每SAMPLE一次,就传到电脑上去。如果要安全的话buffer几十 bytes吧。
以上method要小心处理,必须确定传送data的当时不能间断 sampling。 |
|
|
|
|
|
|
|
发表于 18-8-2006 11:22 AM
|
显示全部楼层
8K frequency??
1次125 us?你用什么mcu??? 还要传去电脑~~够时间吗??
APDCM COMPRESSION是IC 来的?? |
|
|
|
|
|
|
|
发表于 18-8-2006 12:34 PM
|
显示全部楼层
原帖由 cshaopin 于 16-8-2006 10:42 PM 发表
请问这些 component model 的最后那 I/SS I/L I/P 代表什么?...
--请问这些 component model 的最后那 I/SS I/L I/P 代表什么?
##读大学,做 engineer => 从 books/datasheet 寻找答案。 找不到答案才问其他人。
这么容易的问题,自己想办法(datasheet)找答案吧。
(不是责怪你,只是不想看到大学生的数值大跌) |
|
|
|
|
|
|
|
发表于 18-8-2006 01:06 PM
|
显示全部楼层
原帖由 ychenfei 于 17-8-2006 12:42 PM 发表
你要录音多久??
音频多少?要怎样的quality?我怕sample rate不够快~~
当digitize的时候,mcu不可能分身send data 给电脑~~
或者需要很好的mcu,或者dsp可以代替
而且你需要储存在EEPROM内~~所 ...
--当digitize的时候,mcu不可能分身send data 给电脑~~
##可以, ADC 开始 digitize 时, program code 会继续 execute。
- ADC max 30 ksamples per second (34us)
- 最少 38400 baud rate RS232 (1个 data 用 52us send data 给电脑)
就算先 digitize,后 send data, 都够时间 (34us + 52us = 86us)。 8k freq sampling frequency (125us) 有余
更好的方法: 用 ADC complete interrupt。
-先 start ADC digitize , 然后 马上 send 之前的 ADC data 至 电脑。
-当 ADC digitize 完毕时, 会 initiate interrupt, 到时候再用 interupt routine 来读新的 ADC result 。
这样,就能同一时间,做两样事。 |
|
|
|
|
|
|
|
发表于 18-8-2006 04:55 PM
|
显示全部楼层
原帖由 cshaopin 于 16-8-2006 10:42 PM 发表
可不可以 post 您的 PIC code 上来让小弟参考呢? 因为小弟第一次用 PIC。刚刚才收到 MICROSHIP 寄来的 free sample。有 PIC16LF872-I/SS,PIC16F872-I/SS,PIC16F874A-I/L,PIC16F874A-I/P。请问这些 component ...
我的case和你不一样。 每10分钟才sampling一次。 program不能共用。只是跟你讲可以a--->d罢了。
[ 本帖最后由 fritlizt 于 18-8-2006 04:58 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 19-8-2006 09:47 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 22-8-2006 05:29 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 22-8-2006 05:40 PM
|
显示全部楼层
哦。。。不好意思。。。虽然偶的确是用大学的名义去索取 free samples,但是这是经过 senior lecturer 的同意的。如果觉得可以用的话,当然会向贵公司购买。这些 samples 只是用来做 prototype 罢了。需要的 PIC 还很多呢!
很对不起因为小弟还没读 datasheet 就乱拿 sample。会改进。是因为有 senior 说哪一种 model 都能用,所以小弟才没读 168 面的 datasheet。 |
|
|
|
|
|
|
|
发表于 23-8-2006 11:55 AM
|
显示全部楼层
原帖由 cshaopin 于 22-8-2006 05:29 PM 发表
偶有另一个问题。。。 偶要做 summing amplifier 来 shift voltage 去 positive range, 因为 ADC 只可以 convert positive voltage。
不一定要用summing amp 的。
参考以下的电路(之前发表的) :Inverting Amp, gain=1(C2, C4 不用)
当input是0V时,输出是 2.5V 。
当input是+100mV时,输出是 2.5V-100mV =2.4V。
当input是-100mV时,输出是 2.5V+100mV = 2.6V。
重点是把reference set成1/2 VCC。用你的simulator 试,分享结果, 不明白再问。 |
|
|
|
|
|
|
|
楼主 |
发表于 23-8-2006 10:18 PM
|
显示全部楼层
首先我照着以上的 schematic 画在 Pspice。因为我的 Version 没有 TL082,所以用普通的 Op-Amp 来代替。Vcc set 成 12V。
这是我的 simulation 结果:
当 Input 是 0V,Output 是6V,而不是2。5V。
当 Input 是 Vsin 1Vp,Output Swings 7V,6V,5V。
当 Input 是 Vsin 2Vp,Output Swings 8V,6V,4V。
但是我的 Circuit 全部都是用 5V 的。我试了一下把 Vcc 换成 5V,但是 simulate 时出现以下状况:
当 Vcc set 去 5V 时, voltage 就 shift upward 2。5V。但是Simulation 只到 700us 就停了。。。不知道为什么这样? |
|
|
|
|
|
|
|
发表于 24-8-2006 08:05 AM
|
显示全部楼层
原帖由 pic 于 19-8-2006 09:47 AM 发表
38400 bps 需要260uS , 115200bps需要86.8uS (1byte)
...
你说的对, 3年没做 engineering 就开始忘记了。 (baud=BITS per second)!
microchip website 写 ADC max sampling rate = 30ksps (kilo sample per second), sampling freq = 30kHz, nyquist freq = 15kHz, 要 sample 8kHz sinewave 应该没问题。
program code 用 assembly 写, 用 MPLab 做 simulation 来 check timing (很准的)。
limitation 在 RS232。 |
|
|
|
|
|
|
|
发表于 24-8-2006 08:42 AM
|
显示全部楼层
原帖由 cshaopin 于 23-8-2006 10:18 PM 发表
首先我照着以上的 schematic 画在 Pspice。因为我的 Version 没有 TL082,所以用普通的 Op-Amp 来代替。Vcc set 成 12V。
这是我的 simulation 结果:
当 Input 是 0V,Output 是6V,而不是2。5V。
当 ...
VCC 是要set 5V, 电路只是供参考,重点是要明白原理。
(p/s:一般上,当我们说VCC,就是指5V。)
我没用过你的Pspice,关于 Simulation 只到 700us 就停了, 可能是software setting。 |
|
|
|
|
|
|
|
发表于 24-8-2006 11:47 PM
|
显示全部楼层
原帖由 pic 于 19-8-2006 09:47 AM 发表
所以PIC 可不可以 digitize analog sound waveform ?
我个人的看法是很难., 或我的方法错了,请大家纠正。
请问,在你的 simulation 里, ADCON0 及 ADCON1 的 setting 是如何?
(我认为 digitizing 8kHz signal 是没问题的。) |
|
|
|
|
|
|
|
发表于 25-8-2006 10:20 AM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|