Thanks Rob, I've done this but perhaps I've missed something.
I'm thinking of moving the ADC reading completely in the ISR.
thank you!


On Sat, Nov 13, 2021 at 1:40 PM Rob CJ <rob...@hotmail.com> wrote:

> Hi Vasile,
>
> I am not sure what you are doing but if you read words in a main loop that
> are changed (written) in an interrupt routine you can get data corruption
> since more cycles are need to write a word (or read it).
>
> The easiest way to fix this is to disable all interrupts (or at least the
> interrupt routine that writes the word) in the main loop just before
> reading it and enable it again as soon as you have read the word.
>
> Kind regards,
>
> Rob
>
> ------------------------------
> *Van:* jallib@googlegroups.com <jallib@googlegroups.com> namens vsurducan
> <vsurdu...@gmail.com>
> *Verzonden:* zaterdag 13 november 2021 12:26
> *Aan:* jallib@googlegroups.com <jallib@googlegroups.com>
> *Onderwerp:* Re: [jallib] adc average
>
> Hi Kiste, this is the way I'm debugging right now, not on LCD but on PC
> via USB (that's because I'm using the USB ).
> Old jal (Wouter's) had a feature for testing computation at the compile
> time. I realized it was very useful even if using constants for testing
> math routines.
>
> My problem is related to the folloswing issue:
> I have a flag in the isr which is changing (flag = !flag)  each 400uS.
> In the main program I test the flag and during one state I'm switching
> some fast mosfets and reading a pair of voltage/current, during the other
> state I'm switching again the mosfets in a different way and reading again
> the voltage/current pair. Everything looks ok on the digital analyzer and
> scope.
>
> As long the length of the code involved with ADC read is running below
> 400us, I should read correct values for voltage/current.
> However, if the length of the main code is too short or too long ( and
> this happens around 3800h) I get corrupted adc data reads in a way I do not
> understand it.
> In a situation a longer program data creates good readings... :)
>
> So I can only suppose it is a compiler bug related to words manipulations
> or page/bank issues.
> thx
>
>
>
> On Sat, Nov 13, 2021 at 12:45 PM 'Oliver Seitz' via jallib <
> jallib@googlegroups.com> wrote:
>
> Hi!
>
> _error is meant to produce an error whenever it is compiled. You can only
> use it with constants:
>
> if target_clock<12000000 then
>   _error "Need at least 12MHz for this program"
> end if
>
> If there's a variable in the if statement, the content will have to be
> compiled, and so the error is raised.
>
> If you want to see characters depending on a value of a variable, you can
> only check at runtime. So, connect some kind of a display and use
> print_string()
>
>
> Greets,
> Kiste
>
> Am Samstag, 13. November 2021, 09:56:29 MEZ hat Rob CJ <rob...@hotmail.com>
> Folgendes geschrieben:
>
>
> Hi Vasile,
>
> Thanks for the update. I found something strange. Given the code below.
>
> include 18f4550
>
> var byte i = 0
>
> if (i == 100) then
>   _error "Is 100"
> end if
>
> When I compile this I get:
>
> jal jalv25r6 (compiled Oct 29 2021)
> generating p-code
> 16858 tokens, 151522 chars; 3221 lines; 3 files
> generating PIC code pass 1
> generating PIC code pass 2
> 0 data accesses checked, 0 errors
> 1 skips checked, 0 errors
> writing result
> d:\PIC\Compiler\Test\2021\ADC_in_array\Test.jal:6: "Is 100"
> 1 errors, 0 warnings
> The terminal process "c:\jallib\compiler\jalv2_64.exe
> 'd:\PIC\Compiler\Test\2021\ADC_in_array\Test.jal', '-s', 'c:\jallib\lib'"
> terminated with exit code: 1.
>
> Which is not correct. Same happens when you replace it with _warn but then
> it is generated as warning.
>
> But when I have this program:
>
> include 18f4550
>
> var byte i = 0
>
> if !defined(i) then
>   _error "i is not defined"
> end if
>
> I get:
>
> jal jalv25r6 (compiled Oct 29 2021)
> generating p-code
> 16858 tokens, 151533 chars; 3221 lines; 3 files
> generating PIC code pass 1
> generating PIC code pass 2
> 0 data accesses checked, 0 errors
> 0 skips checked, 0 errors
> writing result
> Code area: 6 of 32768 used (bytes)
> Data area: 1 of 2048 used
> Software stack available: 2046 bytes
> Hardware stack depth 0 of 31
> 0 errors, 0 warnings
>
> Which is correct because when I change i to j the output is:
>
> jal jalv25r6 (compiled Oct 29 2021)
> generating p-code
> 16858 tokens, 151533 chars; 3221 lines; 3 files
> generating PIC code pass 1
> generating PIC code pass 2
> 0 data accesses checked, 0 errors
> 0 skips checked, 0 errors
> writing result
> d:\PIC\Compiler\Test\2021\ADC_in_array\Test.jal:6: "i is not defined"
> 1 errors, 0 warnings
> The terminal process "c:\jallib\compiler\jalv2_64.exe
> 'd:\PIC\Compiler\Test\2021\ADC_in_array\Test.jal', '-s', 'c:\jallib\lib'"
> terminated with exit code: 1.
>
> So not sure why this happens but is seems to be not OK.
>
> Kind regards,
>
> Rob
>
> ------------------------------
> *Van:* jallib@googlegroups.com <jallib@googlegroups.com> namens vsurducan
> <vsurdu...@gmail.com>
> *Verzonden:* zaterdag 13 november 2021 08:08
> *Aan:* jallib@googlegroups.com <jallib@googlegroups.com>
> *Onderwerp:* Re: [jallib] adc average
>
> Hi Rob,
> I think you will not find any issue, please don't bother. The code works
> now (without interrupts), I had a multiplication error which is not part of
> the code.
> My original test used  tmr0 interrupt and USB_serial, the average
> measurements should happen in 400us intervals and it seems something went
> wrong because the values are not those expected.
>
> About the test procedure, I've loaded the ADRESH and ADRESL with constant
> values, without using any ADC_read procedure. Then tried to test the
> average procedure using _ERROR.  When the compiler finds the line
> containing _ERROR it reports an error no matter if the condition is true or
> false. Did I use it in the wrong way?
> A very old version of the JAL compiler used a pragma_test (or something
> like that) previously to start a testing procedure. The result was
> delivered at compile time.
> thank you,
>
>
> On Fri, Nov 12, 2021 at 11:37 PM Rob CJ <rob...@hotmail.com> wrote:
>
> 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:* jallib@googlegroups.com <jallib@googlegroups.com> namens vsurducan
> <vsurdu...@gmail.com>
> *Verzonden:* vrijdag 12 november 2021 07:38
> *Aan:* jallib@googlegroups.com <jallib@googlegroups.com>
> *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 <rob...@hotmail.com> 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:* jallib@googlegroups.com <jallib@googlegroups.com> namens vsurducan
> <vsurdu...@gmail.com>
> *Verzonden:* donderdag 11 november 2021 13:47
> *Aan:* jallib@googlegroups.com <jallib@googlegroups.com>
> *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 jallib+unsubscr...@googlegroups.com.
> 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 jallib+unsubscr...@googlegroups.com.
> 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 jallib+unsubscr...@googlegroups.com.
> 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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/AM0PR07MB6241B09762A0EDC6896C4619E6959%40AM0PR07MB6241.eurprd07.prod.outlook.com
> <https://groups.google.com/d/msgid/jallib/AM0PR07MB6241B09762A0EDC6896C4619E6959%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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/CAM%2Bj4qu9Xf-1mHHdH_G9LOG8_Ag5MNXs1jS%2BPSYYJNyP1v%2B4Zg%40mail.gmail.com
> <https://groups.google.com/d/msgid/jallib/CAM%2Bj4qu9Xf-1mHHdH_G9LOG8_Ag5MNXs1jS%2BPSYYJNyP1v%2B4Zg%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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/AM0PR07MB62417856DB18942ADFD73FD7E6969%40AM0PR07MB6241.eurprd07.prod.outlook.com
> <https://groups.google.com/d/msgid/jallib/AM0PR07MB62417856DB18942ADFD73FD7E6969%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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/1434797526.302696.1636800319189%40mail.yahoo.com
> <https://groups.google.com/d/msgid/jallib/1434797526.302696.1636800319189%40mail.yahoo.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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/CAM%2Bj4quPwv%3DW7qJfOea8PKGZ06Xy8%2Bet8fW%2Bm0q%2BwwXueMq__g%40mail.gmail.com
> <https://groups.google.com/d/msgid/jallib/CAM%2Bj4quPwv%3DW7qJfOea8PKGZ06Xy8%2Bet8fW%2Bm0q%2BwwXueMq__g%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 jallib+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jallib/AM0PR07MB62413DF471527376921A66EBE6969%40AM0PR07MB6241.eurprd07.prod.outlook.com
> <https://groups.google.com/d/msgid/jallib/AM0PR07MB62413DF471527376921A66EBE6969%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 jallib+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/CAM%2Bj4qtH-ptbY%2BCW92RgNjfGZWGjv%2BmaumevQF-hRMsHk7S6mQ%40mail.gmail.com.

Reply via email to