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.
