Low frequency audio level detector using PIC ADC?


Closed Thread
Results 1 to 40 of 69

Hybrid View

  1. #1
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    languer - tks, I'd actually seen that previously in the datasheet, but couldn't immediately work out how to apply it, then I forgot about it.

    Bert - phase project has been parked up.

    Meanwhile, this ongoing problem is going to turn out so easy that I'll never be able to show my face on here again.

    Ok, the latc didn't work, so I'm using a basic toggle, here the stripped back code...

    Code:
    @ __CONFIG _CONFIG1, _FCMEN_OFF & _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _BOREN_OFF & _PWRTE_OFF & _LVP_OFF & _CLKOUTEN_OFF 
    @ __CONFIG _CONFIG2, _LVP_OFF & _PLLEN_OFF
    
    
    INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
    INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
    
    Osccon = %01110010      'Osc 8Mhz
    
    DEFINE  OSC 8
    DEFINE  NO_CLRWDT 1   ' PBP doesn't clear WDT automatically
    
    '16F1828 Pin Connections*********************************************
    TRISC.4 = 0     '6   RC4      Main Output         
    '**********************************************************************
    CM1CON0 = 0   ' COMPARATORS OFF
    CM2CON0 = 0   ' COMPARATORS OFF
    
    ADCON0 = 0
    ADCON1 = 0
    
    ANSELA     = 0          ; All Port A ports to be digital
    ANSELB     = 0          ; All Port B ports to be digital
    ANSELC     = 0          ; All Port B ports to be digital
    
    txsta = %10100100  'needed to turn on pin 10 as valid HSerout pin. 
    
    WPUA = 0        'weak pullups disabled.
    WPUB = 0        'weak pullups disabled.
    WPUC = 0        'weak pullups disabled.
    
    'Timer2 Registers:
    'Prescaler=1:1; TMR2 PostScaler=1:1; PR2=66 - Freq = 30,303.0303Hz - Period = 33,000 ns
    T2CON.6  = 0 ' bits 6-3 Post scaler 1:1 thru 1:16
    T2CON.5  = 0
    T2CON.4  = 0
    T2CON.3  = 0
    T2CON.2  = 1 ' Timer2 on bit: 1=Timer2 is on;
    T2CON.1  = 0 ' bits 1-0  Prescaler Rate Select bits
    T2CON.0  = 0 
    PR2 = 66            ' PR2 (Timer2 Match value) 
    
    
    ASM
    INT_LIST  macro ; IntSource,    Label,         Type, ResetFlag?
        INT_Handler   TMR2_INT,  _Bert_ISR,   PBP,  yes
        endm
        INT_CREATE       ; Creates the interrupt processor
    ENDASM
    
    @ INT_ENABLE  TMR2_INT     ; enable Timer 0 interrupts
     
    ;----[Main Program Loop]------------------------------------------------------------------
    BMAIN:  'make this your new temporary main for this test
     toggle portc.4   'pin 6   (blue scope trace)
     'LATC = LATC ^ %00001000 ' this assumes you can use portc.4 as an output.
    
     GOTO BMAIN
     
     '---[TMR2 - interrupt handler]--------------------------------------------------
    Bert_ISR:
    @ INT_DISABLE  TMR2_INT     ; enable Timer 0 interrupts
        toggle PortC.3   'pin 7 (yellow scope trace)
        'LATC = LATC ^ %00000100 ' this will toggle portc.3
    
    @ INT_ENABLE  TMR2_INT     ; enable Timer 0 interrupts
    @ INT_RETURN
    
    end
    & here's the result....

    green trace is the main loop toggle (port C.4) with a frequency of just 1kHz(!!!) & the yellow trace is the ISR toggle (port C.3)with a frequency that's higher at 12Khz(!!!) , I have not got one clue what is going on here - it feels like 'week one - intro to PICs' all over again!


    Last edited by HankMcSpank; - 17th February 2011 at 23:23.

  2. #2
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Hank, 2 things to try. First turn off use PBP in the int setup. check the output. then change pr=200. no reason for the value, just much larger. You don't need to post the Scope unless you want. I am happy with just the numbers right now.

    Code:
    INT_Handler   TMR2_INT,  _Bert_ISR,   PBP,  yes
    
    becomes
    
    INT_Handler   TMR2_INT,  _Bert_ISR,   ASM,  yes
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  3. #3
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Hi Bert,

    You're onto something!

    Firstly, this doesn't stack up, but when I disable interrupts my Main loop sees a frequency of 142Khz on my scope (therefore double that at 284khz?!)

    Ok, now when I enable interrupts with the 'pbp' entry ....much baddo, my main loop toggle shows just 498Hz on my scope (therefore about 1khz)

    change the bit you outlined to it so asm, I once again get the main running 142khz (albeit choppy - I guess the interrupts are stopping a nice clean toggle in the main) & the interrupt toggle showing about 15khz on my scope (30khz)

    changing PR=200, changes the interrupt toggle rate to about 5khz on my scope (therefore 10khz)

    it's after 1.30am here in London.....and so to bed, g'night.
    Last edited by HankMcSpank; - 18th February 2011 at 01:44.

  4. #4
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Thanks Hank, I will chew on these numbers tonight.
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  5. #5
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Just one last afterthought - I'm using a PIC16F1828 for which the BAS & INC files haven't been offically released yet....but Darrel kindly pasted up the files for someone else .....

    http://www.picbasic.co.uk/forum/showthread.php?t=13977

    now I have no clue if that's significant or not, but thought it worth flagging!

  6. #6
    Join Date
    Aug 2010
    Location
    Maryland, USA
    Posts
    869


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Well MAYbe that is why LATC didn't work, but the numbers seem pretty right on. main loop speed free running seems to show there are 7 instructions being executed. heres the math:

    8Mhz clock / 4=
    2Mips
    1/2000000 = .0000005 sec per instruction
    .5uSec * 7 = 3.5uSec
    1/.0000035 = 285,714.xx Hertz ( close to 284K as posted)


    Using PBP instead of ASM, show clearly the Interupt is firing WAY faster then the time it takes to get in and out. If you are game to it, I think we can come to a definate minimun.

    With PBP and main loop at 1K, what was ISR frequency?
    Last edited by cncmachineguy; - 18th February 2011 at 03:43. Reason: asked wrong question
    -Bert

    The glass is not half full or half empty, Its twice as big as needed for the job!

    http://foamcasualty.com/ - Warbird R/C scratch building with foam!

  7. #7
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

    Default Re: Low frequency audio RMS signal level detector using PIC ADC?

    Excellent.

    Quote Originally Posted by cncmachineguy View Post
    With PBP and main loop at 1K, what was ISR frequency?
    On my scope, with main loop @1Khz, the ISR frequency shows as 5.98Khz (therefore 12Khz)

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