| ??? 09/15/04 11:19 Read: times |
#77434 - Here is the ADC read code... Responding to: ???'s previous message |
Why don't you post the code that converts ADCVAL to a voltage? Yes of course it is posted below. The good news is that the spike porblem has been solved and guess what - it WAS a software bug!! Hats off to you guys for guessing that. I have marked the location in the code below wher the bug was. In the earlier PCB, memory mapped I/O was with "MOVX A, @R0" and in the current one it is "MOVX A, @DPTR". When making the change I inadvertantly overlooked the second instance in the read routine and lost sleep the last two days!! Anyway now the plot is fine with no spikes. Some more improvements are ON. Will post the clean plot and dedicate it to all you guys ;-))
; Read the Proportional valve feedback and update display with current value.
; RD_FDBK is to read the analog channel '0' and return the 12 bit value in
; ADC buffer locations in RAM, after right justifying the result.
RD_FDBK: CLR P1.0
CLR P1.1
CLR P1.2
GET_ANA: CLR P1.3 ; R/C low for coversion start
CLR P1.4 ; AO low for 12 bit mode
MOV DPTR, #ADC_IN
MOVX A, @DPTR ; to pull CE of ADC high..
MOV R6, #25
ADC_DLY: NOP
DJNZ R6, ADC_DLY ; 25 X 2 = 50 microsecond delay
SETB P1.3 ; R/C high for read
MOV DPTR, #ADC_IN
MOVX A, @DPTR
MOV ADC_HI, A ; Save high byte
SETB P1.4 ; AO high for second byte
MOVX A, @DPTR ; BUG was here
MOV ADC_LO, A ; Save low byte
RE_ORG: NOP ; RE_ORG is for right justifying ADC result
SWAP A
MOV ADC_LO, A ; ADC_LO now has zeroes in high nibble
MOV A, ADC_HI
SWAP A
ANL A, #0F0H
ADD A, ADC_LO ; Mask low nibble of ADC_HI, add to ADC_LO
MOV ADC_LO, A ; ADC_LO is now right justified.
MOV A, ADC_HI
SWAP A
ANL A, #0FH ; Mask original high nibble of ADC_HI
MOV ADC_HI, A ; ADC_HI is now right justified.
CLR P1.3
CLR P1.4
CHKPOLRTY: MOV OPERAND+0, #00H ;
MOV OPERAND+1, #08H ; 800H = 0.0 V dc
MOV R0, #ADC_LO
MOV R1, #OPERAND+0
CALL COMPARE
JC NEGFBK
JZ ZEROVAL
POSCHK: MOV OPERAND+0, #00H
MOV OPERAND+1, #08H
MOV R0, #ADC_LO
MOV R1, #OPERAND+0
CALL COMPARE
JNC POSFBK
ZEROVAL: MOV ADC_LO, #00H
MOV ADC_HI, #00H
MOV DPTR, #POSFVAL
JMP SHOADC ; Display zero if ADCvalue in the mid band (7FFH - 800H)
NEGFBK: MOV R1, #ADC_LO ; R0 holds 800H and R1 holds ADCvalue
MOV R0, #OPERAND+0
CALL COMPUTE ; Count value for -10V to 0V is to be converted to -9.99 to 0.00
MOV DPTR, #NEGFVAL ; count value for -10V is 0. and 0V is 800H
JMP SHOADC ; Counts to convert = (800H-adc value)
POSFBK: MOV R0, #ADC_LO ; R0 holds ADCvalue and R1 holds 800H
MOV R1, #OPERAND+0
CALL COMPUTE ; Count value for 0V to +10V is to be converted to 0.00 to +9.99
MOV DPTR, #POSFVAL ; count value for 0V is 800H. and +10V is FFFH
; Counts to convert = (adc value-800H)
SHOADC: CALL FBKDISP ; Adjust decimals and display in VFD
RET
;=============================================
; Following algorithm used for compute. Call this routine with R0 and R1 suitably pointing
; to the ADC_LO and OPERAND(loaded with 800H). The count is first computed by subtraction
; and then the result mutiplied by 488 ( each bit = 4.88mV and 100 is used as a multiplier
; to increase precision. Thus 2048 x 488 = 999424. Now divide the answer by 1000 to restore
; result. (999424/1000 = 999.424) Display the integer as 9.99
COMPUTE: CALL SUB16
MOV R0, #ANSWER+0
MOV OPERAND+0, #0E8H ; = 488
MOV OPERAND+1, #01H
MOV R1, #OPERAND+0
CALL MUL16
MOV R0, #PROD+0
MOV OPERAND+0, #0E8H
MOV OPERAND+1, #03H ; = 1000
MOV R1, #OPERAND+0
CALL rDIV16
MOV ADC_LO, QUOT+0
MOV ADC_HI, QUOT+1
RET
Thanks Raghu |
| Topic | Author | Date |
| Spikes in ADC readout | 01/01/70 00:00 | |
| RE: Spikes in ADC readout | 01/01/70 00:00 | |
| RE: Spikes in ADC readout | 01/01/70 00:00 | |
| Investigation ON.... Donald / Jacob. | 01/01/70 00:00 | |
| RE: Investigation ON.... Donald / Jacob. | 01/01/70 00:00 | |
| Here is the ADC read code... | 01/01/70 00:00 | |
| Strange correlation between the spikes! | 01/01/70 00:00 | |
| Excellent analysis - Kai / Russell | 01/01/70 00:00 | |
| RE: Excellent analysis - Kai / Russell | 01/01/70 00:00 | |
| Straight line plot - Kai | 01/01/70 00:00 | |
| RE: Spikes in ADC readout | 01/01/70 00:00 | |
| RE: Spikes in ADC readout | 01/01/70 00:00 | |
| RE: Spikes in ADC readout | 01/01/70 00:00 | |
| Back on talking terms with ADC | 01/01/70 00:00 | |
| 10 points for Kai | 01/01/70 00:00 | |
| RE: 10 points for Kai | 01/01/70 00:00 | |
| Hitting trees at full speed | 01/01/70 00:00 | |
| RE: Hitting trees at full speed | 01/01/70 00:00 | |
Problem solved - Thanks | 01/01/70 00:00 |



