element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Experts, Learning and Guidance
  • Technologies
  • More
Experts, Learning and Guidance
Ask an Expert Forum Reading voltages at input pins through ADC on a PIC16F18877
  • Blog
  • Forum
  • Documents
  • Leaderboard
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Experts, Learning and Guidance to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 5 replies
  • Subscribers 302 subscribers
  • Views 1505 views
  • Users 0 members are here
  • ask_an_expert
  • PIC16F18877
  • adc
Related
See a helpful answer?

Be sure to click 'more' and select 'suggest as answer'!

If you're the thread creator, be sure to click 'more' then 'Verify as Answer'!

Reading voltages at input pins through ADC on a PIC16F18877

Sumutiu
Sumutiu over 3 years ago

I am trying to read the voltage at a specific AN pin through the ADC however I am not sure if my ADC is set up correctly.

I tried 

void ADC_Initialize() {
    ADCON0 = 0b10010100;            // ADC on, Clock set in ADCLK, right justified.
    ADCLK = 0b00000011;             // Clock is Fosc/8.
    ADCON1 = 0b00000000;            // Fancy sh*t off.
    ADCON2 = 0b00000000;
    ADCON3 = 0b00000000;            //ADC Error Calculation Mode First derivative of single measurement(bit 6 to 4).
    ADREF = 0b00000010;             //Internal reference voltage is selected
}

int ADC_Read(int8_t AnChannel) {
    ADPCH &= 0b00000000;           // Clearing the Channel Selection Bits
    ADPCH |= AnChannel;         // Setting the required Bits
    __delay_ms(1);                 // Acquisition time to charge hold capacitor
    ADCON0bits.ADGO = 1;
    while(ADCON0bits.ADGO);
    return ((ADRESH<<8)+ADRESL);    // Returns Result
}

Now if I do ADC_Read(1), I get 1023.0 as a result however, at pin 1, I have 2.4V,

Is there something off with the configuration for the ADC?

P.S. I am using HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1

  • Sign in to reply
  • Cancel

Top Replies

  • jc2048
    jc2048 over 3 years ago +2
    32MHz divided by 8 is 4MHz. That's probably too fast (the datasheet just says 'outside recommended range'). Bring the tAD down to 1us or below and see if that helps.
  • scottiebabe
    scottiebabe over 3 years ago +2
    Just an FYI, if you intend to have the ADC use the external voltage reference inputs, ANA3 (and ANA2 if use VREF- versus gnd) then these pins won't be available to uses as adc inputs:
  • shabaz
    shabaz over 3 years ago +1
    Hi, There's not a lot of information here. What happens when you (say) apply 0V? Does the value change? What does the microcontroller datasheet suggest for the reference voltage value, what is the…
  • shabaz
    0 shabaz over 3 years ago

    Hi,

    There's not a lot of information here. What happens when you (say) apply 0V? Does the value change?

    What does the microcontroller datasheet suggest for the reference voltage value, what is the value?

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • jc2048
    0 jc2048 over 3 years ago

    32MHz divided by 8 is 4MHz. That's probably too fast (the datasheet just says 'outside recommended range'). Bring the tAD down to 1us or below and see if that helps.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • scottiebabe
    0 scottiebabe over 3 years ago

    Just an FYI, if you intend to have the ADC use the external voltage reference inputs, ANA3 (and ANA2 if use VREF- versus gnd) then these pins won't be available to uses as adc inputs:

    image

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Sumutiu
    0 Sumutiu over 3 years ago in reply to scottiebabe

    Thanks. Found the problem. The voltage reference for the + side was Pin + Vref. Changed to VDD and - side to VSS

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Sumutiu
    0 Sumutiu over 3 years ago in reply to jc2048

    It was the voltage refference not correctly set.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube