congrats, but it still be simplified a bit...:)

On Wed 14 Sep 2022, 5:40 PM flyway38 <[email protected] wrote:

> Hey all,
>
> Problem solved. Had to redo all ADC code.
> Here is the working code. Maybe this is usefull for the coders here;
>
> -- ok, now let's configure ADC
> pin_AN0_direction = input
> -- ADCON0 CONFIG
> ADCON0_CHS0 = OFF -- Channel at 0 (Bit 0)
> ADCON0_CHS1 = OFF -- Channel at 0 (Bit 1)
> ADCON0_CHS2 = OFF -- Channel at 0 (Bit 2)
> ADCON0_CHS3 = OFF -- Channel at 0 (Bit 3)
> -- ADCON1 CONFIG
> ADCON1_PCFG0 = OFF -- AN0 as Analog ONLY (Bit 0)
> ADCON1_PCFG1 = ON  -- AN0 as Analog ONLY (Bit 1)
> ADCON1_PCFG2 = ON  -- AN0 as Analog ONLY (Bit 2)
> ADCON1_PCFG3 = ON  -- AN0 as Analog ONLY (Bit 3)
> ADCON1_VCFG0 = OFF -- Vref+ at VDD
> ADCON1_VCFG1 = OFF -- Vref- at VSS
> -- ADCON2 CONFIG
> ADCON2_ADCS0 = OFF -- AD Conversion Clock at Fosc/64 (Bit 0)
> ADCON2_ADCS1 = ON  -- AD Conversion Clock at Fosc/64 (Bit 1)
> ADCON2_ADCS2 = ON  -- AD Conversion Clock at Fosc/64 (Bit 2)
> ADCON2_ACQT0 = ON  -- AD Acq. Time at 2xTAD (Bit 0)
> ADCON2_ACQT1 = OFF -- AD Acq. Time at 2xTAD (Bit 1)
> ADCON2_ACQT2 = OFF -- AD Acq. Time at 2xTAD (Bit 2)
> ADCON2_ADFM = ON   -- AD Result Justify at Right
> --
> const word ADC_RSOURCE = 2_500                        -- Input Resistance
> const byte ADC_TEMP = 85                              -- PIC Max.
> Temperature
> const byte ADC_MAX_TAD = 6                            -- (0.8us < TAD <
> 12.5us as per
> --                                                        Datasheet, Pag.
> 41)
> -- AD ACQUISITION TIME (Original VAR: adc_conversion_delay)
> -- Tacq = Tamp + Tc + Tcoff
> const word tamp = 1 -- (=> 0.2us as per Datasheet, Pag. 30)
> const word adc_tc = 2 -- ((TEMP – 25°C)x(0.02 us/°C) => 1.2us as per
> Datasheet, Pag. 30))
> const word adc_tcoff = 2 -- (-(25 pF)x(1 kohm + 4 kohm +
> RSOURCE)xln(0.0004883)
> --                          => 1.56us as per Datasheet, Pag. 30)
> const byte ADC_TACQ = byte(tamp + adc_tc + adc_tcoff)
> -- (Original VAR: adc_conversion_delay)
> --
> var word adc_word                               -- return value
> var byte adc_byte[2] at adc_word                -- byte array overlay
> --
> function adc_read_high_res(byte in adc_chan) return word is
> pragma inline
>    --
>    -- Original Code has here the Channel and L/R Justifying
>    --  These parameters are set above...
>   --
>   ADCON0_ADON = TRUE                              -- turn on ADC module
>    --
>    for ADC_TACQ loop
>       _usec_delay(1)                              -- wait acquisition time
>       -- Original: _usec_delay(10)
>    end loop
>    --
>    ADCON0_GO = TRUE                                -- start conversion
>    while ADCON0_GO == TRUE loop                    -- wait until
> conversion completed
>       -- Empty loop.
>    end loop
>    --
>    adc_byte[1] = ADRESH                         -- copy high order bits
>    adc_byte[0] = ADRESL                         -- copy low order bits
>    -- Choosed High Resolution options here, from Original Code...
>    --
>    -- Honor 2 * max Tad time. Note the value is not very accurate, but
> safe.
>    _usec_delay(2 * ADC_MAX_TAD) -- As per Datasheet, Pag. 29
>    --
>    ADCON0_ADON = false                             -- turn off ADC module
>    return adc_word                                 -- back to caller
> end function
>
> Best regrads,
> FS
>
> On Wednesday, September 14, 2022 at 1:43:19 PM UTC+1 flyway38 wrote:
>
>> Hello Vasile,
>>
>> Thank you for your input.
>> About Vref it should be set to VCC (5V) and GND. It's the default anyways
>> (by the Datasheet info).
>> Have, however, noticed that the ADC initial configuration constants don't
>> match with the needed ones.
>> EX: ANSEL_ADCS, ADCON0_VCFG, ANSEL_ANS0, etc.. aren't used in ADC lib or
>> even in PIC(18F2523) lib.
>>
>> About convertion time and MAX_TAD, have already tested longer time values
>> with no sucess...
>> Any more ideas?
>> Thanks anyways.
>>
>> Cheers,
>> Filipe Santos.
>>
>> On Wednesday, September 14, 2022 at 12:57:26 PM UTC+1 vasile wrote:
>>
>>> If your Vref + is +5V and Vref- is GND, full scale means 4095 at 5V.
>>> One issue might appear if acquisition time is too short or you have
>>> messed something with references.
>>> |Vref+| - |Vref-| >=3V
>>>
>>> On Tue, Sep 13, 2022 at 4:54 PM flyway38 <[email protected]> wrote:
>>>
>>>> Hello all,
>>>>
>>>> New question.
>>>> My PIC is reading ok ADC values if below 2.5V (1/2 of range VCC/GND).
>>>> It seems like 11bit ADC behaviour.
>>>>
>>>> My code:
>>>> -- ok, now let's configure ADC
>>>> -- Step 1: ADC analog input pin setup
>>>> const byte ADC_CHANNEL = 0                       -- port 0 is analog
>>>> input (default)
>>>> pin_AN0_direction = input
>>>> const byte ANSEL_ANS0 = TRUE                     -- potmeter connected
>>>> to pin_AN0
>>>> -- Step 2: Set VDD and VSS as Vref
>>>> const byte ADCON0_VCFG = FALSE
>>>> -- Step 3: Use Frc as ADC clock
>>>> const byte ANSEL_ADCS = 0b110
>>>> --
>>>> const ADC_RSOURCE = 500                          -- Input Resistance
>>>> const ADC_TEMP = 20                              -- PIC Temperature
>>>> -- We want the fastest possible ADC timing, so we specify here the
>>>> --const ADC_MIN_TAD = 1
>>>> const ADC_MAX_TAD = 10
>>>> -- Now we can include the library
>>>> include adc
>>>> -- And initialize the whole with our parameters
>>>> adc_init()
>>>>
>>>> Inside Forever Loop:
>>>>    iVal = 0 -- Its a DWord
>>>>    --
>>>>    for AdcReadings loop
>>>>       AdcData = adc_read_high_res(AdcChnn)
>>>>       iVal = iVal + dword(AdcData)
>>>>    end loop
>>>>    --
>>>>    mVal = word(iVal / dword(AdcReadings))
>>>>
>>>> Any help would be great.
>>>> Thank you very much.
>>>>
>>>> Kind regrads,
>>>> Filipe Santos
>>>>
>>>> --
>>>> 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/5c020fb1-f8fa-4684-9284-1dc3a1793ca4n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/jallib/5c020fb1-f8fa-4684-9284-1dc3a1793ca4n%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/a77e7cc0-016b-407f-b2ff-c364f0646ccfn%40googlegroups.com
> <https://groups.google.com/d/msgid/jallib/a77e7cc0-016b-407f-b2ff-c364f0646ccfn%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/CAM%2Bj4quAuWSZoWkpYOZEyY9fLvhw-9MLr2YuzQgPznwYWCFs7A%40mail.gmail.com.

Reply via email to