12F1840 ADCIN troubles, help needed :(


Closed Thread
Results 1 to 22 of 22
  1. #1
    Join Date
    Feb 2013
    Posts
    1,078

    Default 12F1840 ADCIN troubles, help needed :(

    Hello.

    I'm trying to use ADCIN on 12F1840, here's the code:

    Code:
    ;----[12F1840 Hardware Configuration]-------------------------------------------
    #IF __PROCESSOR__ = "12F1840"
      #DEFINE MCU_FOUND 1
    #CONFIG
    cfg1 = _FOSC_INTOSC           ; INTOSC oscillator: I/O function on CLKIN pin
    cfg1&= _WDTE_OFF              ; WDT disabled
    cfg1&= _PWRTE_OFF             ; PWRT disabled
    cfg1&= _MCLRE_OFF             ; MCLR/VPP pin function is digital input
    cfg1&= _CP_OFF                ; Program memory code protection is disabled
    cfg1&= _CPD_OFF               ; Data memory code protection is disabled
    cfg1&= _BOREN_ON              ; Brown-out Reset enabled
    cfg1&= _CLKOUTEN_OFF          ; CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin
    cfg1&= _IESO_ON               ; Internal/External Switchover mode is enabled
    cfg1&= _FCMEN_ON              ; Fail-Safe Clock Monitor is enabled
      __CONFIG _CONFIG1, cfg1
    
    cfg2 = _WRT_OFF               ; Write protection off
    cfg2&= _PLLEN_OFF             ; 4x PLL disabled
    cfg2&= _STVREN_ON             ; Stack Overflow or Underflow will cause a Reset
    cfg2&= _BORV_19               ; Brown-out Reset Voltage (Vbor), low trip point selected.
    cfg2&= _LVP_OFF               ; High-voltage on MCLR/VPP must be used for programming
      __CONFIG _CONFIG2, cfg2
    
    #ENDCONFIG
    
    #ENDIF
    
    ;----[Verify Configs have been specified for Selected Processor]----------------
    ;       Note: Only include this routine once, after all #CONFIG blocks
    #IFNDEF MCU_FOUND
      #ERROR "No CONFIGs found for [" + __PROCESSOR__ +"]"
    #ENDIF
    
    
    OSCCON = %11110000  'SET INTOSC TO 32MHZ
    
    TRISA=%00110000 'set LATAA.4 as input
    ANSELA=%00010000 'set LATAA.4 as analog
    ADCON0=%00001101  'ENABLE AND CONFIGURE ADC
    ADCON1=%11100011   'JUSTIFY
    CM1CON0=%00000000   'DISABLE COMPARATORS
    
    DEFINE OSC 32
    DEFINE ADC_BITS 10
    DEFINE ADC_SAMPLEUS 50
    DEFINE ADC_CLOCK 3
    VOLTAGE VAR WORD
    SHEMAVALI VAR LATA.4
    LED VAR LATA.2
    
    
    'PACUKA:
    'HIGH LED
    'PAUSE 200
    'LOW LED
    'PAUSE 200
    'GOTO PACUKA
    
    CIKLURI:
    ADCIN 3,VOLTAGE
    IF VOLTAGE=>1023 THEN 
    HIGH LED
    else
    low led
    endif
    pause 5
    GOTO CIKLURI
    The problem is that VOLTAGE variable always reads 1024, if input is not connected to ground.

    Any ideas?

  2. #2
    Join Date
    May 2009
    Posts
    40


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Firstly ADCON1=%11100011 'JUSTIFY statement is conflicting with DEFINE ADC_CLOCK 3.
    Secondly IF VOLTAGE=>1023 THEN statement can never be greater than 1023. DEFINE ADC_BITS 10 means maximum value of voltage =1023.

  3. #3
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    well that IF is just experiment
    In real life, ADCIN returns 0 if input is grounded, if any other voltage is applied, it returns 1023.

  4. #4
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Found the problem!

    I was using Fixed internal voltage reference, but was not enabling it at all.

    added

    FVRCON=%11011111

    and now it works OK!

  5. #5
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Well, troubles continue.

    I've built a following circuitry. 10K resistor goes to LATA.2 pin and goes then to gnd.
    100k variable pot is connected one end to VCC, another to LATA.2
    LED is connected to GND via 1k resistor from LATA.1

    Wiring is 100% checked and corrected for shorts, misswire, etc.

    The code is as follows:

    Code:
    OSCCON = %11110000  'SET INTOSC TO 32MHZ
    TRISA=%00110000 'set PORt as input
    'ANSELA=%00010101 'set PORTA.4 as analog
    ADCON0=%00001111  'ENABLE AND CONFIGURE ADC
    ADCON1=%11000011   'JUSTIFY
    FVRCON=%11011111 'VREF ENABLE & set at 4.096v
    WPUA=%00000000 'pull up disable
    'CM1CON0=%00000000   'DISABLE COMPARATORS
    
    DEFINE OSC 32
    DEFINE ADC_BITS 10
    DEFINE ADC_SAMPLEUS 50
    DEFINE ADC_CLOCK 3
    VOLT VAR WORD
    LED VAR LATA.1
    
    greater:
    adcin 2,volt
    high led
    pause 1
    low led
    pause volt/10
    goto greater
    This code should do a simple thing - vary LED brightness according to pot setting. And sure it does, but the problem is that it works in very narrow range, because port sinks huge amount of current - up to 25mA via that pin. So say to achieve 2.5v on the pin, the pot resistance should be set somewhere to 40 ohms. I think this is not correct, right?

    Also I found a strange thing - if I set TRISA=%00110010, which means to set LATA.2 as input, the code does not works at all, but it also stops consuming current on that pin. What can be the reason?

  6. #6


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Quote Originally Posted by CuriousOne View Post
    Well, troubles continue.

    Also I found a strange thing - if I set TRISA=%00110010, which means to set LATA.2 as input, the code does not works at all, but it also stops consuming current on that pin. What can be the reason?
    I think you have set porta.1 to input and not porta.2

    This sets PORTA.2 as input
    Code:
    %00110100
    Not sure about your other problems

  7. #7
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,521


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Hi,
    The input (basically) only sinks current when it's configured as an output and set low. When being used as an input for the ADC it obviously needs to be set to input - just as Mark has pointed out. Then it "sinks" current only when the input is connected to the S/H circuit which leads us to the next issue: Your 100k pot viloates the maximum recommended input impedance by an order of magnitude.

    /Henrik.

  8. #8
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    I have created a voltage divider, 100k and 10k resistors, ADC input connected in their middle point. The problem is that PIC shorts the input to GND, but still works as ADC. This has no relation to input impedance, it feels like same pin is both digital out and analog in at same time. Is this possible?

  9. #9
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,521


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Hi,
    In your original code ( TRISA=%00110000 ) leaves PortA.2 as an output which is wrong.
    In your post you contiune to say TRISA=%00110010, to set LATA.2 as input which again, as mark_s points out, is wrong, the above will STILL leave PortA.2 as an OUTPUT.

    Your setting of ANSELA in the code is commented out which doesn't really have any effect on the ADC input since it defaults to analog but it WILL have an effect on the pins you want to use as digital.

    The ADC DOES put a load on the node when it samples the input that's where the max input impedance comes from. Too high impedance and too short sampling time makes the voltage at the node droop when it's sampled.

    /Henrik.

  10. #10
    Join Date
    Sep 2009
    Posts
    737


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    HenrikOlsson,
    If you use 10K and 100K for divider, impedance that PIC input see is 9,09K.

  11. #11
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Yes I have commented ANSELA because it had no effect anyways.

  12. #12
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    And I know that ADC needs some current, but not 25mA! On the RA3 or LATA.3 how you call it, which is input only, ADC works just fine and does not hog current.

  13. #13
    Join Date
    May 2013
    Location
    australia
    Posts
    2,389


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    RA3 or LATA.3 how you call it, which is input only, ADC works just fine and does not hog current.
    ? really
    RA3 is not an analogue input

    the only way a pic I/O pin will sink 25ma is :- if its an output, damaged or fed more volts than vdd

  14. #14
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    So, if I understood correctly, I need to set TRISA correctly and that is the issue?

  15. #15
    Join Date
    May 2013
    Location
    australia
    Posts
    2,389


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    any pin that is set to analogue needs to have its corresponding tris bit set

    from the data sheet
    The TRISA register (Register 12-3) controls the
    PORTA pin output drivers, even when they are being
    used as analog inputs. The user should ensure the bits
    in the TRISA register are maintained set when using
    them as analog inputs. I/O pins configured as analog
    input always read ‘0’.

  16. #16
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Yes, thanks, now that clear, changed TRISA to TRISA=%00111101 and it now works just fine!
    Just it is a bit silly, why it can be possible to have same pin both as ADC IN and LOGIC OUT at same time (circuitry-wise)

  17. #17
    Join Date
    May 2013
    Location
    australia
    Posts
    2,389


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Just it is a bit silly, why it can be possible to have same pin both as ADC IN and LOGIC OUT at same time (circuitry-wise)

    why is that you can drive a car for hundreds of miles in low gear , and with the handbrake on ?

    is that any different ?

    just because you're in the drivers seat with the motor running does not mean you are proficient

  18. #18
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    That's not fair comparison, the situations is like when you can have zipper closed on your pants, but your junk still hanging from zipper

    A side question, I'm going to monitor 9VDC battery voltage via ADCIN. To reduce current consumption, I'll have to increase resistance of both resistors, but this will also make circuit less noise proof. How do you think, what will be the gold cut in that case?

  19. #19
    Join Date
    Sep 2009
    Posts
    737


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(


  20. #20
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Thanks, but that is a bit complicated - no need to save that much power. The battery voltage to be monitored is around 11V (3S LiPo), so divider with 470k/100k resistors should work just fine?

  21. #21
    Join Date
    Sep 2009
    Posts
    737


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Look at last post.

  22. #22
    Join Date
    Feb 2013
    Posts
    1,078


    Did you find this post helpful? Yes | No

    Default Re: 12F1840 ADCIN troubles, help needed :(

    Tried that already. Too small values and I have too large ripple going on (current consumption is 20-25A). So I settled with 750k/150k+1nf combo, works just fine.

Similar Threads

  1. 12F1840 config issues
    By enigma in forum PBP3
    Replies: 13
    Last Post: - 15th February 2015, 07:49
  2. Problem converting 12F683 code to 12F1840
    By RossWaddell in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 14th March 2013, 01:55
  3. Help needed with ADCIN Averaging Routine
    By Aussie Barry in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 24th December 2012, 16:05
  4. PBP Support for 12F1840 8-Pin Device?
    By springtank in forum mel PIC BASIC Pro
    Replies: 17
    Last Post: - 10th November 2012, 08:32
  5. troubles using more than one PCF8574
    By maus in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 28th July 2007, 19:37

Members who have read this thread : 1

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