Hello all,

I simplified the ADC library because of the changes in the ADC for the newer 
PICs which was not supported. It is - almost - impossible to cover for all the 
differences. This means that the library has been simplified and the result it 
that some of the configuration - like selecting the analog inputs, the 
reference voltage selection and the ADC clock -  has to be done in the main 
program before the library is initialized.

I updated all 26 ADC sample files and created two new ADC sample files (for the 
16F18857 and the 18F25k22) and tested 19 of them since I did not have all 
hardware or PICs available. You can recognize the tested sample files by the 
comments where the actual output of the program is mentioned. All others are 
compiled but could not be re-tested. I noticed that some generated sample files 
did not work - and could not have worked at all - so these where fixed. All 
sample files are now manually maintained.

If you encounter any problems, let me know.

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens Rob CJ 
<[email protected]>
Verzonden: maandag 28 juni 2021 17:10
Aan: [email protected] <[email protected]>
Onderwerp: Re: [jallib] Re: ADC library

Hi Bill,

Thanks for the update. Currently I made some changes to the adc library since I 
started modifying the sample files. I think the change has no further impact on 
the functionality (for some PICs I got a compile error).

While modifying the 30 ADC sample files, I will test the ones for which I have 
a PIC - and samples that can easily be tested - and I found out that some could 
never have worked so I fixed those.

It will take me some time before all sample files are modified. I can have a 
look at the 18F25K22 too and also create a sample file for that one (and for 
the 16F18857).

Once all is done I will upload the new adc.jal and all 30 adc sample files.

Kind regards,

Rob


________________________________
Van: [email protected] <[email protected]> namens Bill Beek 
<[email protected]>
Verzonden: maandag 28 juni 2021 13:59
Aan: jallib <[email protected]>
Onderwerp: Re: [jallib] Re: ADC library

Hello Rob and Vasile,
The following PICs have also been tested with Rob's adc lib. 16F886, 18F2553, 
18F2580, 26K80.
No problems found so far. The 18F25K22 only worked well with the old adc lib.
With the new lib 5 volts supply voltage and reference voltage could only be 
measured up to 2.5 volts.
At a higher voltage, the value remained there. I'll have to investigate that 
too.
I have not yet looked at the 16F1783 configuration.
At 12 bits resolution the differential measurement is more suitable than single 
ended in my opinion,
I will look at that later. At the moment I am busy with other things for the 
next 4 weeks.

Bill



On Friday, June 25, 2021 at 6:38:50 PM UTC+2 vasile wrote:
Hi Bill, Rob,
BTW, I don't know if you've noticed, but in all Microchip datasheet is missing 
the minimum value for
(Vref+) -|Vref-|. Usually they presume the user is connecting Vref- to Vss and 
Vref+ to Vdd or to the internal reference
(1.024V, 2.048V or 4.096V) or to a different one for external Vref+ mode).

The Vref- can be tied to a positive voltage. On old PIC16F876 supplied at 5V, I 
remember the (Vref+) -|Vref-| = ~2.2V.
I'm quite sure that on XLP microcontrollers supplied at minimum 1.8V this value 
must be much smaller.
More than that, Vref- can be tied to a negative voltage of about -0.5V ( at 
0.6V the protective diodes on IO pins are conducting) without degrading the ADC 
linearity. Again, that value is from memory, measured on PIC16F876 supplied at 
5V.

Bill, can you do please a test about these reference voltage values on 16F1783?
thx,


On Fri, Jun 25, 2021 at 6:25 PM Rob CJ <[email protected]> wrote:
Hi Bill,

Thanks for the update. About the 16F1783. If you look in the datasheet it say 
this:

The CHS<4:0> bits of the ADCON0 register determine which positive channel is 
selected.
When CHSN<3:0> = 1111 then the ADC is effectively a single ended ADC converter.

These CHSN bits seems to be something extra since not al ADC has them 
(CHSN<3:0> are Negative Differential Input Channel Select bits). At reset, the 
CHSN bits are at 0, which selects AN0. So you could try to set these bits to 
1111 and see if your problem is solved (1111 = ADC Negative reference - 
selected by ADNREF).

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens Bill Beek 
<[email protected]>
Verzonden: vrijdag 25 juni 2021 16:29
Aan: jallib <[email protected]>
Onderwerp: Re: [jallib] Re: ADC library

Hi Rob,
I've tested your adc lib on several PICs so far found no problems. It concerns 
the following types:
16F876A, 18F2520, 18F24K50, 16F1783.
The latter only works well if AN0 is connected to GND, the other 10 analog 
channels then work well
with 12 bits of resolution.This also happens with the old adc lib, so I suspect 
something is wrong somewhere in myconfiguration, I'm still looking into that.
I will test some other types later on.

Bill.
On Wednesday, June 23, 2021 at 9:12:03 AM UTC+2 [email protected] wrote:
Hi Bill,

Thanks for the update but I have chosen a different approach to solve the 
problem.

Yesterday I simplified the ADC library to a basic version so that it supports 
more PICs and to prevent that the libary becomes too complex to support all 
variations of the ADC. Reason is that the library did not provide the 
functionality that it said it did, this because the library 'adc_channel.jal' 
was no longer used some time ago and so some functionality was not working 
because of that (like channel selection and setting the reference voltage).

This simplified version makes it more generic but as I mentioned earlier, the 
user has to take the following steps in de main program:
1) Set the correct analog input for the used channel(s)
2) Set the correct reference voltage. I think the default is often that is used 
VDD as reference which works fine in most cases.
3) Set the correct AD clock using the table in the datesheet.

With this change I no longer include the adc_clock.jal library and  so this 
also works for a PIC16F18857.

I attached this version to this post and if there are no objections to this 
change, I need to update the adc sample programs (hmm, 26 sample files to 
check) and test some to see if they work for different PICs.

So @Jallib users. If you have any objections, let me know.

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens Bill Beek 
<[email protected]>
Verzonden: dinsdag 22 juni 2021 21:15
Aan: jallib <[email protected]>

Onderwerp: Re: [jallib] Re: ADC library
Hi Rob, I have included your piece of software in the adc_clock library library.
After I defined the variables  everything worked  properly.
Of course I have the ADC_ADCS_BITCOUNT set back to 1 in the 16F18857 lib.
The FRC clock signal is now used, which is also my preference.
As far as I'm concerned, this chapter is closed
Thanks again to all who contributed ideas and made suggestions.
 Bill.
On Tuesday, June 22, 2021 at 7:17:59 AM UTC+2 vasile wrote:
Hi Rob, this wasn't a  request. I never used the ADC library from the jalpack 
even though I have read it and tried to understand it's philosophy.
But you have perfectly defined my way of working with ADC. So it's up to jal 
users requests and finally on your own wish.
best wishes,


On Mon, Jun 21, 2021 at 8:18 PM Rob CJ <[email protected]> wrote:
Hi Vasile,

Thanks for the feedback. I agree with you that a basic ADC library is better 
than nothing. I think the Tad calculation is making it more beautiful but 
requires also more space than needed (since it calculates for different target 
clocks).

The basic ADC library would then only start a conversion and return the result.

The user of the library should then take care of the following 3 items which 
can be mentioned in the adc.jal library and the sample program:
1) Set the correct analog input for the used channel
2) Set the correct reference voltage. I think the default is often that is used 
VDD as reference which works fine.
3) Set the correct AD clock (Tad) using the table in the datesheet. I think if 
you do not set this it will still work OK.

If we would go this way, the whole Tad calculation (adc_clock.jal) could be 
removed (sorry Rob Hamerling) and adc.jal could be simplified.

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens vsurducan 
<[email protected]>
Verzonden: maandag 21 juni 2021 18:50
Aan: [email protected] <[email protected]>
Onderwerp: Re: [jallib] Re: ADC library

Rob, the library does not need to compute the TAD, that was introduced first by 
a french jallian (i think it was Sebastien Lelong) who tried to write an 
universal ADC library ( and for a short time it works).
You have only to choose one of the recommended ranges. The ADC will work very 
well with several different clocks...
As a PIC user, performing an ADC without reading the microcontroller 
datasheet...and letting the library do everything for you just to be easy seems 
weird.
best wishes,

On Mon, Jun 21, 2021 at 6:28 PM Rob CJ <[email protected]> wrote:
Hi Bill,

I looked into some more details of the library and I think understand why it 
works for you. Since you use the defaults of the PIC after reset and you 
changed ADC_ADCS_BITCOUNT to 2 the program compiles and runs but the clock 
selection that is calculated by the library does not work correctly for the PIC 
you are using.

I am not sure what the ADC clock settings are used now but it may be that your 
ADC now uses a clock source of fosc/2 since a clock register is set to 0 (this 
PIC is different from the other PICs since is uses a separate register for the 
clock of the ADC and that is why it has the setting of 1 instead of 2 and 3). 
If you are using fosc/2 then according to the datasheet you may be  using it 
out of spec. see table below with a clock frequency of 20 MHz.

[X]

The clock register for your PIC is defined as follows:
[X]

I was working on an update of the library but got stuck with the clock 
adc_clock part that calculates the Tad.

Maybe somebody else knows what goes wrong in the code below (it always results 
in the warning that the clock speed is too high as if the dword 'value' is not 
calculated correctly). It also results in quite some rom space which I do not 
like.

I wonder why we would not simplify the libary and always use FRC since that is 
always correct according to the table  above. It would make the adc library 
simpler since adc_clock.jal library st no longer needed. If somebody has any 
idea why not to do that,  let me know.

   elsif (ADC_ADCS_BITCOUNT == 1) then          -- target has separate clock 
selection register
      counter = 0
      done = FALSE
      ADCON0_ADCS = FALSE                       -- use ADCLK register
      repeat
         value = (2 * dword(counter + 1) * 10_000_000) / target_clock
         if value >= ADC_MIN_TAD then
            tad_word  = word(value)
            jallib_adcs = counter
            done = TRUE
         end if
         counter = counter + 1
      until done | (counter == 64)
      if !done then
         _warn "\n\tClock speed too high for Tad, internal ADC oscillator (Frc) 
selected"
         tad_word  = 40                        -- (approx)
         ADCON0_ADCS = TRUE                    -- use Frc
      end if

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens Bill Beek 
<[email protected]>
Verzonden: maandag 21 juni 2021 16:22
Aan: jallib <[email protected]>
Onderwerp: [jallib] Re: ADC library

Hi Rob,
After your post I looked even further, I use the latest adc lib and tested the 
first 10 adc channels. they work all the time, and are relatively accurate. I 
also looked at the adc_clock lib and tried to adjust the code. The 18857 only 
has 1 clock selection bit "FRC or crystal controlled" , but it didn't work yet. 
For now, I'm happy with the result.
Here's a piece of the program I used.

const bit ADC_HIGH_RESOLUTION = true
const byte ADC_NCHANNEL = 2
const byte ADC_NVREF = ADC_NO_EXT_VREF
include adc
adc_init()
var word measure
var word voltage
var byte lowmeasure
const byte prefix[] = "Channel "
const byte highstr[] = " (high) "
const byte lowstr[] = " (low) "
const byte suffix[] = ": "
const byte value[] = "  U = "
const byte units[] = " Volts."
forever loop
   var byte channel = 0
   -- loop over all channels and read
   led = !led
   for 11 using channel loop
      -- get ADC result, high resolution
      measure = adc_read_high_res(channel)
      -- send it back through serial
      print_string(serial_hw_data,prefix)
      print_string(serial_hw_data,highstr)
      print_byte_dec(serial_hw_data,channel)
      print_string(serial_hw_data,suffix)
      -- print_word_bin(serial_hw_data,measure) ; this one works !
      print_word_dec(serial_hw_data,measure) ; I should get ~512
      voltage = measure * 0.4883  -- 5 V / 1024 * 100 (for 2 decimals)
     print_string(serial_hw_data,value)
     --print_word_dec(serial_hw_data,voltage)
     --print_string(serial_hw_data,value)
     format_word_dec(serial_hw_data,voltage,5,2) -- decimal 2 = /100
     print_string(serial_hw_data,units)
     print_crlf(serial_hw_data)
       delay_1ms(250)
      -- Even if we set high resolution, we can still access results
      -- in low resolution (the 2 LSb will be removed)
      lowmeasure = adc_read_low_res(channel)
      print_string(serial_hw_data,prefix)
      print_string(serial_hw_data,lowstr)
      print_byte_dec(serial_hw_data,channel)
      print_string(serial_hw_data,suffix)
      print_byte_dec(serial_hw_data,lowmeasure) ; I should get ~127
      print_crlf(serial_hw_data)
      -- and sleep a litte...
      --led = OFF
     delay_1ms(2500)
   end loop
end loop

Kind regards Bill.
On Thursday, June 17, 2021 at 3:56:36 PM UTC+2 Bill Beek wrote:
Hello all,

When I tried to do a test with analog input on the 16F18857 I found that the 
library adc.jal gave 7 errors. In particular, the "adcon0_chs" was not 
recognized. The lib of the 16F18857 does recognize it the "adcon0_adcs" . It 
seems that some newer MCU's have this problem as well.  After a change of the 
adc lib a new error occurred,
_error "Found unsupported value for constant ADC_ADCS_BITCOUNT".
Does anyone else have experience with this event or know a solution?
Thanks, Bill

--
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/fb841324-9302-4429-b6ce-bf91a8cc5ed2n%40googlegroups.com<https://groups.google.com/d/msgid/jallib/fb841324-9302-4429-b6ce-bf91a8cc5ed2n%40googlegroups.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/AM0PR07MB6241CE5B558BCB2464E7B2AEE60A9%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB6241CE5B558BCB2464E7B2AEE60A9%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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/CAM%2Bj4qu%2B4yTSgaMF7V_0%3DEf8ypCOtrenVvJ3xxXwSFuCBxubOw%40mail.gmail.com<https://groups.google.com/d/msgid/jallib/CAM%2Bj4qu%2B4yTSgaMF7V_0%3DEf8ypCOtrenVvJ3xxXwSFuCBxubOw%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/AM0PR07MB62416C19816AE39CC900C31DE60A9%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB62416C19816AE39CC900C31DE60A9%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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/90d7b00f-fbae-4ece-b4e2-1361b9167f51n%40googlegroups.com<https://groups.google.com/d/msgid/jallib/90d7b00f-fbae-4ece-b4e2-1361b9167f51n%40googlegroups.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/828a6520-fea0-441a-8f91-105be2d134can%40googlegroups.com<https://groups.google.com/d/msgid/jallib/828a6520-fea0-441a-8f91-105be2d134can%40googlegroups.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/AM0PR07MB624157796524C32D2CEEBA38E6069%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB624157796524C32D2CEEBA38E6069%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/a7cd8f64-71c3-4c05-b7a6-9663649ec3fbn%40googlegroups.com<https://groups.google.com/d/msgid/jallib/a7cd8f64-71c3-4c05-b7a6-9663649ec3fbn%40googlegroups.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/AM0PR07MB6241DA1F6A9DC3A4C002BE20E6039%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB6241DA1F6A9DC3A4C002BE20E6039%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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/AM0PR07MB624149C9B5253586DE716D15E6179%40AM0PR07MB6241.eurprd07.prod.outlook.com.

Reply via email to