OK Adam, you asked for it... here it is... quickly thrown together for an 18F2420... (you can probably optimise it with a bit of thought, but it's a starter just to get going)...
The variables...
Some Initialisation Set-up's for the PIC....Code:ADCValue var WORD ' Final ADC Result CounterA var BYTE ' Just a BYTE Temporary working variable DataW var WORD ' Just a WORD Temporary working variable RawData var WORD [16] ' Array holding ADC Result
Now for the real program... First TAKE your SAMPLES...Code:ADCON1=%00001110 ' ADC Control 1 ' 7=0 - 0 Unused ' 6=0 - 0 Unused ' 5=0 - VRef=Vss ' 4=0 - VRef=Vdd ' 3=1 ) ' 2=1 ) RA0 set to Analogue ' 1=1 ) All others set to Digital ' 0=0 ) ADCON2=%10101001 ' ADC Control 2 ' 7=1 - Right Justified - Read 10-Bits ' 6=0 - 0 Unused ' 5=1 ) ' 4=0 ) TAD ' 3=1 ) ' 2=0 ) ' 1=0 ) Fosc/8 ' 0=1 )
Then SORT your RESULTS...Code:' ' Stuff 16 Element WORD Array full of ADC values ' ---------------------------------------------- For CounterA=0 to 15 ADCON0=%00000001 ' Select Channel, Turn-On A/D ' 7=0 Unused ' 6=0 Unused ' 5=0 ) ' 4=0 ) ' 3=0 ) selects AN0 ' 2=0 ) ' 1=0 Go-done Bit ' 0=1 switch-On ADC Module Pauseus 50 ' Wait for channel to setup ADCON0.1 = 1 ' Start conversion While ADCON0.1=1:Wend ' Wait for conversion DataW.HighByte=ADRESH ' Read variable from ADC and save DataW.LowByte=ADRESL RawData(CounterA)=DataW Next CounterA
Finally EXTRACT SOMETHING USEFUL from what you've got...Code:' ' Sort ADC Input ' -------------- CounterA=0 GetADCSortLoop: If RawData(CounterA+1) < RawData(CounterA) then DataW=RawData(CounterA) RawData(CounterA)=RawData(CounterA+1) RawData(CounterA+1)=DataW If CounterA>0 then CounterA=CounterA-2 endif CounterA=CounterA+1 If CounterA<15 then goto GetADCSortLoop
Ain't so difficult when you break it down into little steps is it?Code:' ' Quanticise discarding top and bottom FOUR elements ' ---------------------------------------------------- DataW=0 For CounterA=4 to 11 DataW=DataW+RawData(CounterA) Next CounterA ADCValue=DataW>>3 ' Divide Result by EIGHT






Bookmarks