请帮忙检查AD采集以及频率采集程序有无错误[求助]
- UID
- 108683
- 性别
- 男
|
请帮忙检查AD采集以及频率采集程序有无错误[求助]
请帮我检查一下我编写的AD采样滤波程序,以及利用输入捕捉功能编写的频率采集程序有无错误。我用信号发生器输出100赫兹的频率,可单片机检测不到。非常感谢!
一AD采集程序
AD: LDY #$2000
LDX #$06
LDAB #%10000000 ;LEVEL MODE,ACTIVE HIGH(10000000)
STAB $82 ;ATDCTL2
LDAB #%00101000 ;FIVE CONVERTS IN ONE SQUENCE
STAB $83 ;ATDCTL3
SAMPLE: LDAB #%11000101 ;8-BIT ACUURACY,FREQUENCE 6—24MHZ,SAMPLE PERIOD 8个,MAXIMAM FRE 2MHZ,MIN500KHZ
STAB $84 ;ATDCTL4
LDAB #%00110000 ;LEFT ALIGNED,UNSIGNED,MULTI CHANNEL CONTIOUS
STAB $85 ;ATDCTL5
LDAA #$00 ;CLEAR CONVERT COMPLETE FLAG (something maybe wrong)
STAA $86 ;ATDSTAT
BRCLR $86,#$80,* ;IF CONVERT IS NOT COMPLETE THEN WAIT
CLRA
LDAB $90 ;CHANNEL0 TORQUE1 WAS PUT IN RESULT REGISTER(ATDDR0H)
STD 0,Y ;$2000
LDAB $92 ;CHANNEL1 TORQUE2 WAS PUT IN RESULT REGISTER(ATDDR1H)
STD 16,Y ;$2010
LDAB $94 ;CHANNEL2 MOTOR CURRENT1 WAS PUT IN RESULT REGISTER(ATDDR2H)
STD 32,Y ;$2020
LDAB $96 ;CHANNEL3 MOTOR CURRENT2 WAS PUT IN RESULT REGISTER(ATDDR3H)
STD 48,Y ;$2030
LDAB $98 ;CHANNEL4 H-BRIDGE CURRENT WAS PUT IN RESULT REGISTER(ATDDR4H)
STD 64,Y ;$2040
INY ;Y POINT TO NEXT EVEN ADDRESS
INY ;
DEX
BNE SAMPLE ;IF NOT EQUAL ZERO THEN JUMP TO SAMPLE
LDX #$05 ;COUNT TIME IS 5
LDY #$2000 OINT TO TORQUE1
LDD 0,Y ;
T1MAX: INY ;
INY ;
EMAXD Y ;
DEX ;
BNE T1MAX ;
STD $200C ;STORE MAXMIUM OF TORQUE1 TO $200C
LDX #$05 ;
LDY #$2000 ;
LDD 0,Y ;
T1MIN: INY ;
INY ;
EMIND Y ;
DEX ;
BNE T1MIN ;MINIMUM OF TORQUE1
ADDD $200C ;
STD $200E ;STORE SUM OF MIN AND MAX TO $200E
LDX #$05 ;
LDY #$2000 ;
LDD 0,Y ;
T1TL: INY ;
INY ;
ADDD 0,Y ;
DEX ;
BNE T1TL ;TORQUE1 TOTAL
SUBD $200E ;SUM OF FOUR TORQUE
LSRD ;DIVIDE BY 2
LSRD ;DIVIDE BY 2
STD $2050 ;RESULT OF TORQUE1
LDX #$05 ;
LDY #$2010 ;
LDD 0,Y ;
T2MAX: INY ;
INY ;
EMAXD Y ;
DEX ;
BNE T2MAX ;
STD $201C ;STORE MAXMIUM OF TORQUE2 TO $201C
LDX #$05 ;
LDY #$2010 ;
LDD 0,Y ;
T2MIN: INY ;
INY ;
EMIND Y ;
DEX ;
BNE T2MIN ;MINIMUM OF TORQUE2
ADDD $201C ;
STD $201E ;STORE SUM OF MIN AND MAX TO $201E
LDX #$05 ;
LDY #$2010 ;
LDD 0,Y ;
T2TL: INY ;
INY ;
ADDD 0,Y ;
DEX ;
BNE T2TL ;TORQUE2 TOTAL
SUBD $201E ;SUM OF FOUR TORQUE
LSRD ;DIVIDE BY 2
LSRD ;DIVIDE BY 2
STD $2052 ;RESULT OF TORQUE2
LDX #$05 ;
LDY #$2020 ;
LDD 0,Y ;
C1MAX: INY ;
INY ;
EMAXD Y ;
DEX ;
BNE C1MAX ;
STD $202C ;STORE MAXMIUM OF MOTOR CURRENT1 TO $202C
LDX #$05 ;
LDY #$2020 ;
LDD 0,Y ;
C1MIN: INY ;
INY ;
EMIND Y ;
DEX ;
BNE C1MIN ;MINIMUM OF MOTOR CURRENT1
ADDD $202C ;
STD $202E ;STORE SUM OF MIN AND MAX TO $202E
LDX #$05 ;
LDY #$2020 ;
LDD 0,Y ;
C1TL: INY ;
INY ;
ADDD 0,Y ;
DEX ;
BNE C1TL ;MOTOR CURRENT1 TOTAL
SUBD $202E ;SUM OF FOUR CURRENT
LSRD ;DIVIDE BY 2
LSRD ;DIVIDE BY 2
STD $2054 ;RESULT OF MOTOR CURENT1
LDX #$05 ;
LDY #$2030 ;
LDD 0,Y ;
C2MAX: INY ;
INY ;
EMAXD Y ;
DEX ;
BNE C2MAX ;
STD $203C ;STORE MAXMIUM OF MOTOR CURRENT2 TO $203C
LDX #$05 ;
LDY #$2030 ;
LDD 0,Y ;
C2MIN: INY ;
INY ;
EMIND Y ;
DEX ;
BNE C2MIN ;MINIMUM OF MOTOR CURRENT2
ADDD $203C ;
STD $203E ;STORE SUM OF MIN AND MAX TO $203E
LDX #$05 ;
LDY #$2030 ;
LDD 0,Y ;
C2TL: INY ;
INY ;
ADDD 0,Y ;
DEX ;
BNE C2TL ;MOTOR CURRENT TOTAL
SUBD $203E ;SUM OF FOUR TORQUE
LSRD ;DIVIDE BY 2
LSRD ;DIVIDE BY 2
STD $2056 ;RESULT OF MOTOR CURRNT2
LDX #$05 ;
LDY #$2040 ;
LDD 0,Y ;
HCMAX: INY ;
INY ;
EMAXD Y ;
DEX ;
BNE HCMAX ;
STD $204C ;STORE MAXMIUM OF H-BRIDGE CURRENT TO $204C
LDX #$05 ;
LDY #$2040 ;
LDD 0,Y ;
HCMIN: INY ;
INY ;
EMIND Y ;
DEX ;
BNE HCMIN ;MINIMUM OF H-BRIDGE CURRENT
ADDD $204C ;
STD $204E ;STORE SUM OF MIN AND MAX TO $204E
LDX #$05 ;
LDY #$2040 ;
LDD 0,Y ;
HCTL: INY ;
INY ;
ADDD 0,Y ;
DEX ;
BNE HCTL ;H-BRIDGE CURRENT TOTAL
SUBD $204E ;SUM OF FOUR TORQUE
LSRD ;DIVIDE BY 2
LSRD ;DIVIDE BY 2
STD $2058 ;RESULT OF H-BRIDGE CURRNT
二频率采集程序
LDAA #%00000000 ;DEFINE CHANNEL1 AS INPUT CAPTURE
STAA $40 ;TIOS
STAA $52 ;TC1
LDAA #%10000000 ;COUNTER START
STAA $46 ;TSCR1
LDAA #%00001000 ;CAPTURE EDGE SELECT
STAA $4B ;TCTL4
LDAA #%00000111 ;CAPTURE FREQUENCE SELECT
STAA $4D ;TSCR2
LDAA #$2 ;CLEAR FLAG
STAA $4E ;TFLG1
BRCLR $4E,#$2,* ;WAIT UNTIL EQUAL
CLRA
CLRB
LDD $52 ;TC1
STD $2060 ;STORE FIRST NUMBER
LDAA #$2 ;FLAG CLEAR
STAA $4E ;TFLG1
BRCLR $4E,#$2,* ;WAIT UNTIL EQUAL
LDD $52 ;TC1
SUBD $2060 ;SECOND NUMBER SUBSTRACT FIRST NUMBER
STD $2062 ERIOD NUMBER
XGDX ERIOD NUMBER IS DIVISOR
LDY #$02 ;187617 IS DIVIDEND
LDD #$DCE1 ;
EDIV ;
STY $2064 ;(FREQUENCY) |
|
|
|
|
|
- UID
- 109210
- 性别
- 男
|
建议您最好先检查ADC转换有没有问题,然后才做信号采样.
不是很明白你想怎么用输入捕捉功能做频率采样工作. 输入的100HZ是什么波形?
請说详细点. |
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
首先我不是很明白你的程序,汗~但你的信号是方波吗?输入捕捉只能用于上升下降沿。我想你的AD转换应该是正确的吧,只是频率识别不了,对吗?如果你的信号是正弦波之类的,那频率可不能这样计算!!
要想让别人弄明白,把条件和结果写清楚吧。 |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
我所说的信号当然是100赫兹的方波,用的是捕捉下降沿。我觉得你所说的AD的频率可能有问题也是我所想的。因为我是用+5伏的电源来代替AD输入信号,这样单片机捕捉到的数据应该是#$FD,可结果却相差很大。谢谢你的指点。 |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
我所说的信号当然是100赫兹的方波,用的是捕捉下降沿。我觉得你所说的AD的频率可能有问题也是我所想的。因为我是用+5伏的电源来代替AD输入信号,这样单片机捕捉到的数据应该是#$FD,可结果却相差很大。谢谢你的指点。另外,你能告诉我如果是正弦波的话,应该怎样计算。或者说要看哪些书就能学到。非常感谢! |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
还有,因为我要测的频率为0到200赫兹,而通过AD转换来实现这么低频采样,硬件电路很难实现。 |
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
你说的是两件事情吧。一路在做AD转换,用的是+5V电源输入,结果是数据不是0xFDH;另一路是在做频率捕捉,用的是信号发生器100Hz方波,结果是捕捉不到。
我想1、如果是+5V电源(恒定值),那么你要检查你的硬件连接了,AD的参考电平接好没有。还有AD转换有些条件的,如连续转换、对应的引脚选择、分频1MHz左右等。
2、问题就是最基本的了。寄存器设置、中断函数的号,还有最基本的对应的定时器要不停的计数,根据计数值来计算频率。只要计数停止,那么也就不捕捉了!!我以前也犯过如此错误! |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
8808beter,你好,能不能把你的电话号码或者邮箱告诉我吗?
由于你以前做过这方面的东东,所以我想向你专门请教一下,谢谢!
感激涕淋!!! |
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
我觉得我的寄存器设置应该没问题,不过你所说的计数器要不断的计数,这是通过设置什么来实现的?我用ECT编写输出比较的程序就一点问题没有,可输入捕捉就不行。
1。频率采样
LDAA #%00000000 ;系统默认输入,我选择通道1为输入捕捉通道
STAA $40 ;TIOS寄存器
STAA $52 ;将通道1计数器清零
LDAA #%10000000 ;计数器开始工作
STAA $46 ;TSCR1
LDAA #%00001000 ;通道1捕捉下降沿
STAA $4B ;TCTL4
LDAA #%00000111 ;ECT频率设置为E/128(E=24MHZ)
STAA $4D ;TSCR2
LDAA #$2 ;通道1标志位清零
STAA $4E ;TFLG1
BRCLR $4E,#$2,* ;等待下降沿.
CLRA
CLRB
LDD $52 ;将通道1计数器值送入$2060单元
STD $2060 ;
LDAA #$2 ;通道1标志位清零
STAA $4E ;TFLG1
BRCLR $4E,#$2,* ;等待第二次下降沿
LDD $52 ;读取通道1计数器第二次
SUBD $2060 ;将第二次值减去第一次值,结果放入$2062单元(周期数)
STD $2062 ;
XGDX ;把周期数(除数)放入X寄存器
LDY #$02 ;187617是被除数
LDD #$DCE1 ;
EDIV ;
STY $205A ;频率值
2 AD转换的硬件连接肯定没问题,因为我用的是清华大学MC9S12DG128的最小系统,上面AD的参考电平都已经设置好。不过你所说的把AD转换分频为1MHZ,这是怎样分到的。系统E时钟为24MHZ。下面两条指令是对AD进行分频的,请查一下有错吗?
LDAB #%11000101 ;
STAB $84 ;
3另外,您的邮箱能告诉我吗? |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
才看清楚你的芯片型号,我先当成8位的了
在PDF中有这样一句。The minimum pulse width for the input capture input is greater than two bus clocks.
我想你的时钟频率可能慢于信号源。你先把信号源的频率调慢些试试,如50Hz。 |
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
仔细看了一下你的AD转换,你定义的是10BIT数据结果吧。那么+5V的结果应该不是FDH,应该是FE00左右(具体和你定义的数据类型相关)。
你定义的转换时钟是2M(可以),连续转换,
总之,你的程序用汇编写实在让人5,注释也没写清楚。你最好去抄个典型的用。 |
|
|
|
|
|
- UID
- 108683
- 性别
- 男
|
你好!
1、我AD用的是8位精度。其实我的程序也不复杂,主要是有5个信号,所以看起来复杂。因为每个信号采样6次,然后减去最大最小值,再求平均值。而为了考虑累加时可能会有溢出,所以都把8位数字放入低字节中,然后用D累加器进行相加。
2、输入捕捉的信号脉冲宽度要大于两个总线时钟,你建议我把信号源的频率减小,那我可否通过增大时钟频率来实现?另外,我设的输入捕捉时钟周期约为5微秒,而100赫兹的脉冲宽度为10毫秒,应该能满足你提示的那句英文啊!
3、请教一私人问题,你现在在哪?原先是哪个学校毕业的?现在工作了吗? |
|
|
|
|
|
- UID
- 106342
- 性别
- 男
|
你不是分频24MHz/128=187.5Hz吗,怎么能满足呢?你的时钟周期5ms是怎么来的。另外脉冲宽度是10ms吗?应是5ms吧,不是指周期呀。
当然可以将分频系数减小试一下。
我上班N年了,,,
[此贴子已经被作者于2005-5-10 8:54:28编辑过] |
|
|
|
|
|