佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

12
返回列表 发新帖
楼主: cshaopin

PIC 可不可以 digitize analog sound waveform ?

[复制链接]
发表于 26-8-2006 12:01 AM | 显示全部楼层
很就没来了~~~哈哈~~~

hardware解决了???


不过~~send去电脑save as什么format???

我建议用.net language 写比较容易,只要有好心人做好library,你import就行了~~
developer写这样的library~~~

现在我在学c#,很不错的language。值得一学
回复

使用道具 举报


ADVERTISEMENT

发表于 28-8-2006 09:44 PM | 显示全部楼层
我喜欢 assmebly

因为做很多 timing sensitive (in micro-second) 的 program。
回复

使用道具 举报

发表于 27-1-2007 03:58 PM | 显示全部楼层
我的方法是做一個pre-amp 到low  pass filter  才到adc...
pre-amp 到low pass filter 沒問題...
但是從low pass 到adc 0804 好像有問題...
我post 電路上來....
對了你用甚麼microphone..



[ 本帖最后由 HSAN 于 27-1-2007 04:06 PM 编辑 ]
回复

使用道具 举报

发表于 28-1-2007 03:08 PM | 显示全部楼层
那个不是有16k那么多吗??可是我想问的是pc16f877a可以用3.3v跑吗
回复

使用道具 举报

发表于 29-1-2007 01:02 AM | 显示全部楼层
active low pass filter circuit 有问题。

- LM358 的 pin 1 output 接到  inverting input pin 2.
- C2 接到 LM358 的 pin 3  (non-inverting input)
- C4 接到 LM358 的 pin 3  (non-inverting input)

请看:Sallen-Key Topology Filter
http://www.beis.de/Elektronik/Filter/ActiveLPFilter.html
回复

使用道具 举报

发表于 29-1-2007 01:48 PM | 显示全部楼层
对对电路画错...哈哈
对了你用adc0804时需要注意什么我出现一个很奇怪的问题
有些power supply 可以用有一些不可以用。。。
哟也不知道y???
回复

使用道具 举报

Follow Us
发表于 1-2-2007 08:52 PM | 显示全部楼层
對了問一下pic16f877 可以把resolution set 成8 bit 嗎??
回复

使用道具 举报

发表于 2-2-2007 03:44 PM | 显示全部楼层
原帖由 HSAN 于 1-2-2007 08:52 PM 发表
對了問一下pic16f877 可以把resolution set 成8 bit 嗎??

pic16fXXX 的ADC是10bit,但可以set 8bit。 查看DataSheet就知道怎样作了。
回复

使用道具 举报


ADVERTISEMENT

发表于 27-2-2007 11:11 AM | 显示全部楼层
简单!!
拿前面的8个msb就可以咯
回复

使用道具 举报

发表于 1-3-2007 02:52 PM | 显示全部楼层
你的意思是要拿adresh的資料作為output是不是
回复

使用道具 举报

发表于 1-3-2007 05:35 PM | 显示全部楼层
对!是ADRESH如果left justified (ADFM=0)

你用什么language???
datasheet里能设定吗??那一个register?
回复

使用道具 举报

发表于 1-3-2007 06:59 PM | 显示全部楼层
我應該是用.asm  把因為以前用過 8051 所以 asm 我比較在行,雖然我知道 c 寫比較沒那麼複雜...
我現在在考慮sampling rate 的問題因為data  sheet  寫 adcon0  bit 7 ,6  用來控制conversion clock ...  Tosc  那麼  Tosc   就是adc的sampling rate  ,input  在那一根腳???
回复

使用道具 举报

发表于 2-3-2007 09:57 AM | 显示全部楼层
原帖由 HSAN 于 1-3-2007 06:59 PM 发表
我應該是用.asm  把因為以前用過 8051 所以 asm 我比較在行,雖然我知道 c 寫比較沒那麼複雜...
我現在在考慮sampling rate 的問題因為data  sheet  寫 adcon0  bit 7 ,6  用來控制conversion clock ...  Tosc  ...

首先set A/D Format Select bit-0
ADCON1 ADFM(bit7) =0  (或不set也可以, 因为default是0)

然后读 ADRESH(1Eh) , 就得到8bit了, 就是这么简单。

(Let Value=20h)
....................    value = read_adc();
0020:  BSF    1F.2
0021:  BTFSC  1F.2
0022:  GOTO   021
0023:  MOVF   1E,W
0024:  MOVWF  20  (value)
回复

使用道具 举报

发表于 5-3-2007 09:08 PM | 显示全部楼层
這個是我寫的只有基本功能
conv
BANDSEL     ADCON1;
MOVLW       B'00001110'    ;SET AN0 AS ANALOG INPUT AND VREF = VDD AND VSS
BANKSEL     ADCON0
MOVLW       B'00000000'    ;SET FOSC/2 AND CHANNEL 0(RA0,AN0) ANALOG INPUT
MOVWF       ADCON0
BSF         ADCON0,GO    ;START CONVERSION
BTFSC       ADCON0,GO
GOTO        $-1        ;GO BACK TO PREVOUSE STATE (BTFSC ADCON0,GO)
MOVLW       B'00000001'
MOVWF       PORTB
BANKSEL     ADRESH
MOVF        ADRESH,W
MOVWF       PORTA

當convert 完成时我需要一个bits 来告诉我convert完成这样我的fbga才能读data 所以我加了以下两行才把output写去port A。
<
MOVLW B'00000001'
MOVWF    PORTB
>


我想問sampling rate 的問題還有adc的delay.
我知道要12Tad 才能完全convert 完10bits,但是我自需要8bit這有影響嗎???
現在我選用Tad=Tosc/2那麼12Tad=6Tosc
我的sampling rate  要在那裡調???
大概要8khZ左右

[ 本帖最后由 HSAN 于 5-3-2007 09:25 PM 编辑 ]
回复

使用道具 举报

发表于 6-3-2007 10:27 AM | 显示全部楼层

回复 #34 HSAN 的帖子

hp我想問sampling rate 的問題還有adc的delay.
我知道要12Tad 才能完全convert 完10bits,但是我自需要8bit這有影響嗎???
現在我選用Tad=Tosc/2那麼12Tad=6Tosc
我的sampling rate  要在那裡調???
大概要8khZ左右

還有pic adc 的sampling rate 是由adcon0 bit7,6 來set  那麼Fosc/2  
這是sampling per bit 的clock 還是sampling per  byte 的clock.
我理解的是如果在Tosc/2 operation的話那麼
12Tad=12Tosc/2     =6Tosc
對嗎???


要纠正一下,你上面问的是Convertion time, 而不是Sampling rate, 这是两回事。

Sampling rate 是一秒钟要几个ADCsample,已知你要8Khz。
Conversion Time 是说一个 ADC Sample, 要用几多时间。


一般简单的作法,会用20Mhz的PIC MCU,用快的conversion time,但它会快过8Khz, 可能10~16KHz以上也说不定。

太快了,你要8khz, 你就要“弄慢”它。
怎样“弄慢”呢?

1。加delay是最简单的方法。加多少delay?要试验,一点一点加, 直到8KHz。
以上的前提是,你MCU只能做一个Task。

2。较高级的作法,就是用Timer Interrupt,在适当的时间读ADC。
回复

使用道具 举报

发表于 6-3-2007 12:53 PM | 显示全部楼层
對於Tosc,我還想越來越不明白了...
Tad=32Tosc=20Mhz
Tad=8Tosc =5Mhz
Tad=2Tosc =1.25Mhz

現在例如我選2Tosc=1.25Mhz
那麼我們知道12Tad才能convert 完10bits data

1.25MHz/12接近100K這是pic最慢的速度,我要自己加delay
回复

使用道具 举报


ADVERTISEMENT

发表于 6-3-2007 05:13 PM | 显示全部楼层
原帖由 HSAN 于 6-3-2007 12:53 PM 发表
對於Tosc,我還想越來越不明白了...
Tad=32Tosc=20Mhz
Tad=8Tosc =5Mhz
Tad=2Tosc =1.25Mhz

現在例如我選2Tosc=1.25Mhz
那麼我們知道12Tad才能convert 完10bits data

1.25MHz/12接近100K這是pic最慢的 ...


用timer interrupt generate 1/8khz = 0.000125s的interrupt.然后每当interrupt occur的时候才read adc.
这样就可以拿到8khz的sampling rate.
用delay比较麻烦拿到准确地8khz sampling rate.再加上delay浪费时间。

Tad=32Tosc=20Mhz
Tad=8Tosc =5Mhz
Tad=2Tosc =1.25Mhz
-->他的意思是当你选择conversion clock = 2Tosc的时候, 你的device max frequency 最多可以去到1.25mhz而已。
也就是说conversion rate = 2/1.25mhz = 1.6uS.
pic 用12Tad来完成一个conversion.
也就是说ideal case的sampling rate = 1/19.2uS = 52083samples/sec. = 52.083k samples/sec. 没有到100k.
理论上是52.083k的sampling rate,不过你check bit, clear bit,还有自己的operation,全部都需要execution time, 实际上的sampling rate会比较低一点。

大概是这样吧。 有错请纠正。对pic也不是很熟。

[ 本帖最后由 fritlizt 于 6-3-2007 05:33 PM 编辑 ]
回复

使用道具 举报

发表于 6-3-2007 07:32 PM | 显示全部楼层
大概明白你的意思了謝謝.
就是寫interupt 每125us 讀一次data 就對了. 不需要管他的Tosc
回复

使用道具 举报

发表于 6-3-2007 07:49 PM | 显示全部楼层
原帖由 HSAN 于 6-3-2007 07:32 PM 发表
大概明白你的意思了謝謝.
就是寫interupt 每125us 讀一次data 就對了. 不需要管他的Tosc


Tosc也是要管的,最少conversion rate要少过125uS. 当然Tosc越快越好。 program efficiency比较高。如果你用1.25mhz,然后你选择convertion time = 64Tosc, convert 10bits data就需要614.4uS.不过你的timer interrupt每125uS interrupt一次。 这样就有问题了。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


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

GMT+8, 23-12-2024 06:44 PM , Processed in 0.120604 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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