Delta-Sigma-ADC in Assembler embedded in PBP, increasing resolution


Closed Thread
Results 1 to 15 of 15

Hybrid View

  1. #1
    Join Date
    Aug 2006
    Location
    In a world of german electrons
    Posts
    102

    Default Delta-Sigma-ADC in Assembler embedded in PBP, increasing resolution

    Good evening. I want to increase the code's resolution from 16bit to something deliberate. How do I have to change this code ?



    ...some code...
    ASM
    ;************************************************* ********************
    ;* Filename: DeltaSig.asm
    ;************************************************* ********************
    ;* Author: Dan Butler
    ;* Company: Microchip Technology Inc.
    ;* Revision: 1.00
    ;* Date: 02 December 1998
    ;* Assembled using MPASM V2.20
    ;************************************************* ********************
    ;* Include Files:
    ;* p16C622.inc V1.01
    ;************************************************* ********************
    ;* Provides two functions implementing the Delta Sigma A2D.
    ;* InitDeltaSigA2D sets up the voltage reference and comparator
    ;* in the "idle" state.
    ;* DeltaSigA2D runs the actual conversion. Results provided in
    ;* result_l and result_h.
    ;* See An700 figure 2 for external circuitry required.
    ;************************************************* ********************
    ;* What's changed
    ;*
    ;* Date Description of change
    ;*
    ;************************************************* ********************
    #include <p16C622.inc>
    cblock
    result_l
    result_h
    counter:2
    endc
    ;
    ;
    ;
    InitDeltaSigA2D
    bsf STATUS,RP0
    movlw 0xEC
    movwf VRCON
    bcf PORTA,3 ;set comparator pin to output
    bcf STATUS,RP0
    movlw 0x06 ;set up for 2 analog comparators with common reference
    movwf CMCON
    return
    ;
    ; Delta Sigma A2D
    ; The code below contains a lot of nops and goto next instruction. These
    ; are necessary to ensure that each pass through the loop takes the same
    ; amount of time, no matter the path through the code.
    ;
    DeltaSigA2D
    clrf counter
    clrf counter+1
    clrf result_l
    clrf result_h
    movlw 0x03 ; set up for 2 analog comparators with common reference
    movwf CMCON
    loop
    btfsc CMCON,C1OUT ; Is comparator high or low?
    goto complow ; Go the low route
    comphigh
    nop ; necessary to keep timing even
    bcf PORTA,3 ; PORTA.3 = 0
    incfsz result_l,f ; bump counter
    goto eat2cycles ;
    incf result_h,f ;
    goto endloop ;
    complow
    bsf PORTA,3 ; Comparator is low
    nop ; necessary to keep timing even
    goto eat2cycles ; same here
    eat2cycles
    goto endloop ; eat 2 more cycles
    endloop
    incfsz counter,f ; Count this lap through the loop.
    goto eat5cycles ;
    incf counter+1,f ;
    movf counter+1,w ;
    andlw 0x04 ; Are we done? (We're done when bit2 of
    btfsc STATUS,Z ; the high order byte overflows to 1).
    goto loop ;
    goto exit
    eat5cycles
    goto $+1 ; more wasted time to keep the loops even
    nop ;
    goto loop ;
    exit
    movlw 0x06 ; set up for 2 analog comparators with common reference
    movwf CMCON
    return
    end
    ENDASM

  2. #2
    blainecf's Avatar
    blainecf Guest


    Did you find this post helpful? Yes | No

    Default More info please.

    By deliberate do you mean 8bits, 12 bits, 19bits??? Are you just wanting to know what was implicitly set (by default) that makes this 16 bit? What is your ultimate goal?

    bcf

  3. #3
    Join Date
    Aug 2006
    Location
    In a world of german electrons
    Posts
    102


    Did you find this post helpful? Yes | No

    Default

    Thank you for your question.

    Exactly, I want to know how it subdivides in 1024 steps. Then it should be easy to change it to the desired value.

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    well i certainely miss something here but, 1024 steps it's 10Bit. you said you want Increase your actual 16Bit resolution.. euh... i'm i wrong or what.

    By the way, why using the comparator when a real ADC give you already 10Bit resolution without headache, need few lines of code and no big additional hardware?
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Jul 2003
    Location
    Sweden
    Posts
    237


    Did you find this post helpful? Yes | No

    Post

    These lines checks for 1024 passes through the loop and stops if reached.

    andlw 0x04 ; Are we done? (We're done when bit2 of
    btfsc STATUS,Z ; the high order byte overflows to 1).

    All you need to do is change ....

    andlw 0x04

    ..... to .......

    andlw 0x02 for 512(9 bits)
    andlw 0x08 for 2048(11 bits)
    andlw 0x10 for 4096(12 bits)
    andlw 0x20 for 8192(13 bits)
    andlw 0x40 for 16384(14 bits)
    andlw 0x80 for 32768(15 bits)

    If you need better resolution it can be done, but needs more changing in the code.

    /Ingvar

  6. #6
    Join Date
    Aug 2006
    Location
    In a world of german electrons
    Posts
    102


    Did you find this post helpful? Yes | No

    Default

    Thank you so far.

    In my current application, I need around 750 steps. Surely I could use 1024 steps right now.

    I want to change it to the number of steps wanted, but I have not understood the relation yet.

    Please explain the math behind your examples.
    Last edited by selbstdual; - 15th September 2006 at 01:42.

Similar Threads

  1. Delta Sigma ADC is inverting
    By selbstdual in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 30th January 2007, 15:35

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