请帮忙检查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
- 108683
- 性别
- 男
|
我所说的信号当然是100赫兹的方波,用的是捕捉下降沿。我觉得你所说的AD的频率可能有问题也是我所想的。因为我是用+5伏的电源来代替AD输入信号,这样单片机捕捉到的数据应该是#$FD,可结果却相差很大。谢谢你的指点。 |
|
|
|
|
|
 
- UID
- 108683
- 性别
- 男
|
我所说的信号当然是100赫兹的方波,用的是捕捉下降沿。我觉得你所说的AD的频率可能有问题也是我所想的。因为我是用+5伏的电源来代替AD输入信号,这样单片机捕捉到的数据应该是#$FD,可结果却相差很大。谢谢你的指点。另外,你能告诉我如果是正弦波的话,应该怎样计算。或者说要看哪些书就能学到。非常感谢! |
|
|
|
|
|
 
- UID
- 108683
- 性别
- 男
|
还有,因为我要测的频率为0到200赫兹,而通过AD转换来实现这么低频采样,硬件电路很难实现。 |
|
|
|
|
|
 
- UID
- 108683
- 性别
- 男
|
8808beter,你好,能不能把你的电话号码或者邮箱告诉我吗?
由于你以前做过这方面的东东,所以我想向你专门请教一下,谢谢!
感激涕淋!!! |
|
|
|
|
|
 
- 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
- 108683
- 性别
- 男
|
你好!
1、我AD用的是8位精度。其实我的程序也不复杂,主要是有5个信号,所以看起来复杂。因为每个信号采样6次,然后减去最大最小值,再求平均值。而为了考虑累加时可能会有溢出,所以都把8位数字放入低字节中,然后用D累加器进行相加。
2、输入捕捉的信号脉冲宽度要大于两个总线时钟,你建议我把信号源的频率减小,那我可否通过增大时钟频率来实现?另外,我设的输入捕捉时钟周期约为5微秒,而100赫兹的脉冲宽度为10毫秒,应该能满足你提示的那句英文啊!
3、请教一私人问题,你现在在哪?原先是哪个学校毕业的?现在工作了吗? |
|
|
|
|
|
 
- UID
- 108683
- 性别
- 男
|
我用的AD频率是24MHZ/128=187.5KHZ.频率肯定能满足呀! |
|
|
|
|
|