Hi Vasile,

If I want to test this I need to create a program that does not use your 
one_ch_ad_read routine. So if I use the standard adc library the program looks 
like this. Is this program giving the same problem for you (I do not know which 
PIC you are using but it seem to be an 18F)?

About the error and warning. They are only created at compile time and I am not 
sure what voltage is at the time you compile the the program. I am also not 
sure if this works for variables.


include 18f4550
--
pragma target clock 48_000_000
-- magical statements: using a 20MHz Xtal, you can run @48MHz !
pragma target PLLDIV    P5
pragma target CPUDIV    P1
pragma target USBDIV    P2
pragma target OSC       HS_PLL

pragma target WDT  control          -- watchdog
pragma target LVP  enabled          -- allow Low Voltage Programming
pragma target MCLR external         -- reset externally

WDTCON_SWDTEN = off                 -- no watchdog

-- We'll start to set all pins as digital
-- then, using ADC lib, we'll configure needed
-- ones as analog.
enable_digital_io()

const sample_nr  = 8  ; buffer size dimension
var word voltage1_a[sample_nr] ; sample array
var word one_ch_ad_read, ch0_adc_value
var word voltage1 = 0 ; the average value we need
const word c256 = 256


-- Configure ADC
-- Step 1: ADC input pin setup
pin_AN0_direction = input
-- Set A0 to analog input
ADCON1_PCFG = 0b000
-- Step 2: Set VDD and VSS as Vref
ADCON1_VCFG0 = FALSE                            -- Vref+ is VDD
ADCON1_VCFG1 = FALSE                            -- Vref- is VSS
-- Step 3: Use Fosc/64 as ADC clock when using a 48 MHz target clock, see 
datasheet
ADCON2_ADCS = 0b110
-- Now we can include the library
include adc
-- And initialize the whole with our parameters
adc_init()

var byte i
  for 8 using i loop
   ch0_adc_value = adc_read_high_res(0) ; compute result
   voltage1_a [i] = ch0_adc_value ; store sample
   voltage1 = voltage1 + voltage1_a[i] ; do a sum of all samples each i step
  end loop



________________________________
Van: [email protected] <[email protected]> namens vsurducan 
<[email protected]>
Verzonden: vrijdag 12 november 2021 07:38
Aan: [email protected] <[email protected]>
Onderwerp: Re: [jallib] adc average

Hi Rob,
If I replace the ADRESH and ADRESL content with fixed values, it looks like 
computation is ok, however this is not the real situation when reading ADC.
How can a computing error be reported after compilation time?
It seems _ERROR or _WARN  does not work... Like this:

if (voltage1 <= 490) |  (voltage1 >= 510) then
 _ERROR "average computing error"  ; this error to be reported after 
compilation, but only if it's true.
end if

On the other hand I'm using interrupts in usb_serial for debugging and STATUS 
and FSR0L are also used...

;  243    voltage1 = voltage1 + voltage1_a[i]
                               bcf      v__status, v__c,v__access
                               rlcf     v___i_2,w,v__banked
                               movwf    v____temp_66,v__banked
                               lfsr     0,v_voltage1_a
                               movf     v____temp_66,w,v__banked
                               addwf    v__fsr0l,f,v__access
                               movf     v__ind,w,v__access
                               movwf    v__pic_temp,v__access
                               incf     v__fsr0l,f,v__access
                               movf     v__ind,w,v__access
                               movwf    v__pic_temp+1,v__access
                               movf     v__pic_temp,w,v__access
                               addwf    v_voltage1,f,v__banked
                               movf     v__pic_temp+1,w,v__access
                               addwfc   v_voltage1+1,f,v__banked

On Thu, Nov 11, 2021 at 8:07 PM Rob CJ 
<[email protected]<mailto:[email protected]>> wrote:
Hi Vasile,

Strange that this does not work.

Did you try to isolate the problem to a minimum program without using special - 
other - procedures so that it can easily be reproduced by anybody that does not 
have the library you are using?

That would make it easier to find the root cause.

Thanks.

Kind regards,

Rob

________________________________
Van: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>> namens vsurducan 
<[email protected]<mailto:[email protected]>>
Verzonden: donderdag 11 november 2021 13:47
Aan: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Onderwerp: [jallib] adc average

Hi all ( aka Kiste and Rob&Rob ?) :)

One possible solution to take 8 adc average values is below (and does not work):

const sample_nr  = 8  ; buffer size dimension
var word voltage1_a[sample_nr] ; sample array
var word one_ch_ad_read
var word voltage1 = 0 ; the average value we need
const word c256 = 256

var byte i
  for 8 using i loop
   one_ch_ad_read (0, 0b10, 0b00, 1) ; read adc procedure
   ch0_adc_value = c256*ADRESH + ADRESL ; compute result
   voltage1_a [i] = ch0_adc_value ; store sample
   voltage1 = voltage1 + voltage1_a[i] ; do a sum of all samples each i step
  end loop

   voltage1 = voltage1 >> 3  ; divide by 8 and get the adc average

The issue is at the line:
voltage1 = voltage1 + voltage1_a[i] ;
initially voltage1 = 0
for i=0  voltage1 = 0 + voltage1_a[0]
for i=1 voltage1 = voltage1 (i=0) + voltage1_a[1] ...etc
this is not working as presumed...

If I remove this line from for...loop...end loop and write as:
voltage1 = voltage1_a [0] + voltage1_a [1] + voltage1_a [2] + voltage1_a [3]
            + voltage1_a [4] + voltage1_a [5] + voltage1_a [6] + voltage1_a [7]

then everything is ok.

The question is: why it does not work?
thx


--
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/CAM%2Bj4qttXVSgPyqqUetP_HaKEH01xZoSXXmG%2BD73jKOHh2Ub9g%40mail.gmail.com<https://groups.google.com/d/msgid/jallib/CAM%2Bj4qttXVSgPyqqUetP_HaKEH01xZoSXXmG%2BD73jKOHh2Ub9g%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/AM0PR07MB624187B39106F690C4BD3E10E6949%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB624187B39106F690C4BD3E10E6949%40AM0PR07MB6241.eurprd07.prod.outlook.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/CAM%2Bj4qssx%2Bkh9aoqPQ8NFY78U0veZDOjv6bXmbij23S1bebVqw%40mail.gmail.com<https://groups.google.com/d/msgid/jallib/CAM%2Bj4qssx%2Bkh9aoqPQ8NFY78U0veZDOjv6bXmbij23S1bebVqw%40mail.gmail.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/AM0PR07MB6241B09762A0EDC6896C4619E6959%40AM0PR07MB6241.eurprd07.prod.outlook.com.

Reply via email to