佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3828|回复: 38

PIC 可不可以 digitize analog sound waveform ?

[复制链接]
发表于 16-8-2006 04:59 PM | 显示全部楼层 |阅读模式
PIC16F87X 有 ADC function 对吗? 请问可不可以用来 digitize analog waveform ? 偶用 Electret Condenser MIC 来录声音,然后 filter noise, 然后要 convert to digital signal 来 send  去电脑。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
PIC16F87X 有 ADC function 对吗? 请问可不可以用来 digitize analog waveform ? 偶用 Electret Condenser MIC 来录声音,然后 filter noise, 然后要 convert to digital signal 来 send  去电脑。

看你的要求是什么, PIC16F87X 没有那么大的buffer, data send 去电脑的速度够不够快 (band width),你的采样频率(sampling rate)可能只有4~5K或更少, 音质会较差, 或很差。


刚刚才收到 MICROSHIP 寄来的 free sample。有 PIC16LF872-I/SS,PIC16F872-I/SS,PIC16F874A-I/L,PIC16F874A-I/P。

老大, 你的行为要改一改, 不要滥用MICROSHIP free sample的service。
你不知道你要的是什么,认为反正是free的,就胡乱request 一通,如果要用钱买的,你会乱买你不了解的东西吗? 这样是藐视(Abuse)这个service,过分的话,Microchip 会停止发放Free sample 到这个国家(Malaysia)。以前谁人都可以request sample,现在只有用注册公司(有Web Domain的),大学的名义才可以request 到Free sample,我不想马来西亚再被列入黑名单, 或你的大学列入黑名单
Microchip 给 sample, 主要是让作商业用图的开发者试用,作Prototype,但他们也不反对送给学生作Project,但我认为不要滥用, 取你所需就好。
P/S:如果你不是那位request sample 的人,请转告他/她。

请问这些 component model 的最后那 I/SS I/L I/P 代表什么?

你在request free sample 之前,就应该先了解I/SS I/L I/P 代表什么。
那个网页也有说请楚,自己去查吧!
回复

使用道具 举报

发表于 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。
回复

使用道具 举报

Follow Us
发表于 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 来的??
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
8K sampling rate就差不多了,人的耳朵就只能听见3.5K。
如果想储存在EEPROM的话,可以用APDCM COMPRESSION ...

对ADPCM 而言,我想你要说的是人的语音(voice)只需要3.5K, 而不是人的耳朵就只能听见3.5KHz, 对吗?


最少 38400 baud rate RS232 (1个 data 用 52us send data 给电脑)

38400 bps 需要260uS , 115200bps需要86.8uS  (1byte)

16F877A (20Mhz) , 在115Kbps下, 8bit 的ADC,(读ADC, Send Data,读ADC, Send Data。。。)可以得到11K的sampling rate。
要数码化(digitize)一个信号,那采样频率(sampling rate)最少要两倍于那信号的频率。
就是说,如信号是3.5Khz,,那最少要7K的sample rate。

但事实上,16F877A的ADC,需要19.72us的Acquisition time, 中间hold Capacitor Charging 需要16.47us。就是说,在这19.72us, 信号必须要稳定不变, 上面的理论才会成立。
在说, 那个hold Capacitor 需要时间来discharge, 也要考虑在内。还有, over sampling 会造成失真。

PIC16F877A 的ADC, 比较适合输入DC的信号,对于语音的Analog 信号,很难。
如果配合高速的Sample and Hold IC,可能才可以改善。

为了验证, 我作了实验,用PIC ADC 的value, 输出portD 8bit, 接DAC还原输入信号。
结果,直到10Khz,方波(square wave)没问题, 但换成正弦波(sine wave),10Hz都不行了。

  1.    do
  2.    {
  3.          value = Read_ADC();
  4.          port_d=value;
  5.                 //         putc(value); // send to PC
  6.                  //   oFreq=!oFreq; //use to measure sampling rate
  7.    } while (TRUE);
复制代码








所以PIC 可不可以 digitize analog sound waveform ?
我个人的看法是很难., 或我的方法错了,请大家纠正。
回复

使用道具 举报

 楼主| 发表于 22-8-2006 05:29 PM | 显示全部楼层
偶有另一个问题。。。 偶要做 summing amplifier 来 shift voltage 去 positive range, 因为 ADC 只可以 convert positive voltage。

Summing amplifier


Before summing


After summing

这是 summing amplifier circuit。但是偶是用 -5v 接上去,simulate 的时候很成功。但是在现实上是否能把 +ve voltage 的头接去 ground 呢?

如果能的话,可否请教? 不能的话,有没有别的方法把 voltage shift 去 +ve range ?
回复

使用道具 举报

 楼主| 发表于 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 就停了。。。不知道为什么这样?
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
原帖由 GeMan 于 24-8-2006 11:47 PM 发表


请问,在你的 simulation 里, ADCON0 及 ADCON1 的 setting 是如何?

(我认为 digitizing 8kHz signal 是没问题的。)

Geman, 你是最棒的。。。
是我错了, 摆了大乌龙。。。
之前的ADC 是10bit mode, 输入8bit的ADC 就corrupt了, 现set成8bit ADC, 就可以了。

# 所以PIC 可不可以 digitize analog sound waveform ? #
可以的,所以我要收回之前所说过的,对不起,给了错误的信息。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-12-2024 11:06 PM , Processed in 0.123279 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表