PORTA.4 as analog input


Closed Thread
Results 1 to 22 of 22

Hybrid View

  1. #1
    Join Date
    Jul 2005
    Location
    Selangor, Malaysia
    Posts
    31


    Did you find this post helpful? Yes | No

    Default

    Thanks for the reply.

    Below are my declaration

    OSCCON = %01101110 ' 4 MHz, primary clock, internal RC

    PIR1 = %00000000 ' clear all flags particularly A/D IF bit 6
    SSPCON = %00000000
    SSPBUF = %00000000
    TXSTA = %00000000
    RCSTA = %00000000
    OPTION_REG = %00000000 'weak pullups enable

    'pin IO 76543210
    TrisB = %10000100
    TrisA = %01010101

    cmcon =7 'disable the comparator register


    ADCON1 = %10000000 ' right justified, AD Clock divided by 2,Vdd = Vref+, Vss = Vref-
    ANSEL=%1010100'only the RA4/AN4, RA2/AN2, RB7/AN6 as analog input
    CCP1CON = %00001100


    The adc are working on RA2 and RB7, but not on RA4.

    Please help.

  2. #2
    Join Date
    Jul 2003
    Posts
    2,358


    Did you find this post helpful? Yes | No

    Default

    OK...

    Your settings look good, the ones that you have shown us... but here are some comments...

    If you have problems, follow the instructions in the Datasheet.

    They tell you that ANSEL should be set before ADCON1.

    Also, if you are setting an entire Register using the Binary notation %, and the Register is eight bits wide, then you really should be setting all eight bits... ANSEL=%01010100 and not just seven bits.

    You've not shown us your setting of ADCON0.

    Have you also checked that your RA4/AN4 pin is not shorted out against any other pin or part of your circuit? Measure the Resistance between that pin and 0v, then unplug the PIC and measure it again on the socket. This way you will determine whether the excessive loading is internal to the PIC (indicating a possible setting error or other problem with the PIC), of if it is external on your PCB or breadboard layout.

    Finally, beware of settings like...

    OPTION_REG = %00000000 'weak pullups enable

    That does a lot MORE than just set weak pull-up's.

    OPTION_REG.7=0 ' Set weak Pull-up's ONLY (leave the other settings alone!)

    Take a look at the OPTION REG in the Datasheet to see what I mean.

  3. #3
    Join Date
    Jul 2005
    Location
    Selangor, Malaysia
    Posts
    31


    Did you find this post helpful? Yes | No

    Default

    Thank you Melanie,

    Thanks for your reply. I have learn something what i have missed. I will try them out and post the result later. Thanks!

    Really appreciate your help, Melanie

  4. #4
    Join Date
    Jul 2005
    Location
    Selangor, Malaysia
    Posts
    31


    Did you find this post helpful? Yes | No

    Red face

    Hi all,
    I have tested the setting, but the PORTA.4 still pull down the signal to 0v.
    Just for your info, the signal is Voltage fluctuated between 0 to .9 v.

    don't know where i did it wrong......

  5. #5
    Join Date
    Jul 2005
    Location
    Selangor, Malaysia
    Posts
    31


    Did you find this post helpful? Yes | No

    Default

    Anyone can explain to me:

    The maximum recommended impedance for analog sources is 10 kΩ. This is required to meet the pin
    leakage specification.


    1.What does this means?

    2. How to measure the impedance for analog sources?

    3.How to add or minus the analog sources?

    Thanks for the answer....

  6. #6
    Join Date
    Jul 2003
    Posts
    2,358


    Did you find this post helpful? Yes | No

    Default

    Let me expain what is a complex subject in simple terms.

    Pretend that the Input pin of a PIC is a 10K Resistor connected between the pin and 0v (it isn't, but just for argument think of it this way). If you now feed that pin with a high-impedance source (eg +5v via a 1M Resistor), whilst you may measure +5v with a DMM on the end of the Resitor BEFORE you connect it, the instant you connect that Resistor to your PIC pin (10k), the voltage will collapse and you will only measure a few mV. Simple Ohms Law determies what has happened. Now this explaination isn't actually correct when dealing with impedance as we have to take the frequency of the signal into account, but will serve aquequately without going into a lecture on AC theory.

    Please post your electrical schematic, so that we can understand your circuit. It could be something very basic that you are doing wrong, or you could be doing everything correctly and may have a defective component. It is difficult to give advice when blind.

  7. #7
    Join Date
    Jul 2005
    Location
    Selangor, Malaysia
    Posts
    31


    Did you find this post helpful? Yes | No

    Default

    Hi Melanie,
    First of all thanks for your reply. I really appreciate it.

    Attached is the schematic. The problem happens at PortA.4. However I already connect the incoming signal to PortB.7 and it is working.


    Include "modedefs.bas"
    Define OSC 8
    Disable Interrupt 'to disable the interrupt bcoz the PortB.0 is in used

    define INTRC_OSC, CCPMX_OFF, MCLR_OFF, LVP_OFF, PROTECT_ON
    define MCLR_OFF, LVP_OFF

    '@ __CONFIG _CONFIG1, _INTRC_OSC_NOCLKOUT&_CP_ALL

    @ __CONFIG _CONFIG1, _CCP1_RB3

    OSCCON = %01111110 ' 8 MHz, primary clock, internal RC

    PIR1 = %00000000 ' clear all flags particularly A/D IF bit 6
    SSPCON = %00000000
    SSPBUF = %00000000
    TXSTA = %00000000
    RCSTA = %00000000
    OPTION_REG.7 = 0 'weak pullups enable

    'pin IO 76543210
    TrisB = %10000100
    TrisA = %01010101

    cmcon =7 'disable the comparator register

    ANSEL=%01010100'only the RA4/AN4, RA2/AN2, RB7/AN6 as analog input
    ADCON1 = %10000000 ' right justified, AD Clock divided by 2,Vdd = Vref+, Vss = Vref-

    CCP1CON = %00001100

    CurrentLevelSensor con %00100000 'PortA.4/AN4
    WaterLevelSensor con %00010000 'PortA.2/AN2

    Start:
    ADCON0 = OX2Input
    gosub readadc
    pauseus 60
    Goto Start

    '---------------read the ADC here ----------------------------------------
    ReadADC:
    ox2Result = 0
    ADCON0.bit0 =1

    'Pauseus 150 'can try 50 ~ 200us
    Pause 250

    'start the convertion here
    ADCON0.bit2 = 1

    while ADCON0.bit2 = 1

    wend

    ox2Result.Lowbyte = ADRESL
    ox2Result.highbyte = ADRESH
    return
    '----------------------------
    Attached Images Attached Images  

Similar Threads

  1. pic18f analog comparator problem
    By david.silaghi in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 6th May 2009, 10:38
  2. Analog input on 18f252
    By kiteman in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 12th January 2009, 09:34
  3. Analog Input on PIC16F88
    By penelopepug in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 6th May 2008, 23:49
  4. 16f88 - pin RA4 as analog input
    By savnik in forum mel PIC BASIC Pro
    Replies: 20
    Last Post: - 15th December 2006, 14:55
  5. Analog pins for digital input
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 9th September 2005, 01:32

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts