Well, the way I achieve that is to take say 16 ADC readings, sort them in sequential order of value, junk the top and bottom four readings as being 'out-of-range', sum and average the middle eight... this makes ADC readings in industrial applications pretty much bomb-proof...
Now, whilst there's quite a few tricks and treats within this, here's a simple sort routine for doing just that (when you analyse it, it's pretty similar to your example Trent albeit a little more compact)... The Data to be sorted sits in an array called RawData, and when it falls out of the subroutine, RawData is in sequential order. Change DataA and RawData variables to WORDS if you need them. Those that know will notice that the additional variable DataA is only needed because PBP's SWAP command doesn't work with arrays.
CounterA var Byte DataA var Byte RawData var Byte [16] .. .. ' ' Sort Array ' ---------- SortArray: CounterA=0 SortLoop: If RawData(CounterA+1) < RawData(CounterA) then DataA=RawData(CounterA) RawData(CounterA)=RawData(CounterA+1) RawData(CounterA+1+0)=DataA If CounterA > 0 then CounterA=CounterA-2 endif CounterA=CounterA+1 If CounterA < 15 then goto SortLoop Return
;Initialize your hardware first A VAR WORD B VAR WORD TempA VAR WORD TempB VAR WORD LCDOUT $FE,1 For A = 0 to 65535 LCDOUT $FE,2,"A=",DEC A For B = 0 to 65535 TempA = A TempB = B TempA = TempA ^ TempB TempB = TempA ^ TempB TempA = TempA ^ TempB IF (TempA <> B) OR (TempB <> A) THEN ; Test Failed LCDOUT $FE,1,"Test Failed",$FE,$C0,"A=",DEC A,", B =",DEC B STOP ENDIF Next B Next A LCDOUT $FE,1,"Test Passed!" STOP
you would no doubt see the message "Test Passed!" on the LCD.
Only a half hour into it, but it's still passing. Kinda obvious what the result will be.
Update: 43hrs, Test Passed! (obviously)
Re: PIC hangs after interrupt when FT232RL is connected
There is probablu RX interupt when connected, and it is not handled correctly for what ever reason.
pedja089 Yesterday, 20:13