Me ... again ...
Tried to use Mr.Darell (RIP) routine :
...but something is wrong - always is executed do_1 subroutineCode:include "D:\PBP\average_DT.pbp" Main: ADCON0 = %10001001 Pauseus 50 ' Wait for channel to setup ADCON0.1 = 1 ' Start conversion While ADCON0.1=1:Wend ' Wait for conversion value.HighByte=ADRESH ' Read variable from ADC and save value.LowByte=ADRESL gosub Average advalue=value if (advalue < 650) then IF (advalue > 450) AND (advalue < 640) THEN gosub do_1 ... IF (advalue > 320) AND (advalue < 440) THEN gosub do_2 ... ... endif Goto Main
Note : the code in his "simple" variant, works just fine . Just I want more "accuracy" ...
Code:advalue var word advaloop var byte advaltot var word pause 200 Main: advaltot=0 advaloop=0 ADCON0 = %10001001 PAUSEuS 50 ' Wait for A/D channel acquisition time ADCON0.1 = 1 for advaloop = 1 to 20 WHILE ADCON0.1 = 1 : WEND advalue.HighByte = ADRESH advalue.LowByte = ADRESL advaltot=advaltot + advalue next advaloop advalue=advaltot / 20 if (ADvalue < 650) then IF (ADvalue > 470) AND (ADvalue < 640) THEN gosub do_1 IF (ADvalue > 320) AND (ADvalue < 450) THEN gosub do_2 ... endif Goto Main


) routine :


Bookmarks