|
PIC 可不可以 digitize analog sound waveform ?
[复制链接]
|
|
发表于 26-8-2006 12:01 AM
|
显示全部楼层
很就没来了~~~哈哈~~~
hardware解决了???
不过~~send去电脑save as什么format???
我建议用.net language 写比较容易,只要有好心人做好library,你import就行了~~
developer写这样的library~~~
现在我在学c#,很不错的language。值得一学 |
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-1-2007 01:48 PM
|
显示全部楼层
对对电路画错...哈哈
对了你用adc0804时需要注意什么我出现一个很奇怪的问题
有些power supply 可以用有一些不可以用。。。
哟也不知道y??? |
|
|
|
|
|
|
|
发表于 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就知道怎样作了。 |
|
|
|
|
|
|
|
发表于 27-2-2007 11:11 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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 |
|
|
|
|
|
|
|
发表于 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一次。 这样就有问题了。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|