Low frequency audio level detector using PIC ADC?


Closed Thread
Results 1 to 40 of 69

Hybrid View

  1. #1
    Join Date
    Oct 2005
    Location
    Loveland CO USA
    Posts
    83


    Did you find this post helpful? Yes | No

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

    If you search for VU meter you will find examples of what you are working on.
    With out a PIC the two attached pictures show an analog way of getting average and peak readings.
    The rectifier is:
    if MSB is 1 then shift left to remove that bit.
    if MSB is 0 then compliment number +1 then shift left.
    The peak detector (analog version):
    The meter moves up at a rate set by R18 & C5. (fast)
    The meter moves down at a rate set by R17+R18 & C5. (slow)
    In software:
    If the output of the rectifier > than the meter reading then (meter-rectifier)/x add to meter.
    If rectifier is < meter then meter=meter-y.
    Where y is a small number that will move the meter from full scale to 0 in about 600mS.
    Where x sets the response time. (moving up)

    There are several companies (THAT CORP and National see LM3915/16.) that have applications notes on the response of of VU meters. A typical test is to inject a 5khz tone for 10mS then stop. The meter should reach near full scale in 1.7mS and decay in 660mS.

    My first try at a VU meter is attached. R2,3 set the input at 1/2 supply.
    C1 blocks DC. 1/(2*2.14*50k*C1)=20hz set lowest frequency of intrest.
    R1 & C2 makes a low pass filter to block information above 20khz.
    R1 is to limit the current going into the PIC if the signal gets above 5 volts or below 0 volts. Could be 1k.

    There is several better ways of setting the DC input of the ADC to 2.5 volts. More later.
    Attached Images Attached Images    

  2. #2
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

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

    Quote Originally Posted by ronsimpson View Post
    In software:
    If the output of the rectifier > than the meter reading then (meter-rectifier)/x add to meter.
    If rectifier is < meter then meter=meter-y.
    Hi Ron

    If you glance at the final code I knocked together - that's essentially what I'm doing ...... 'x' being the AC signal coming in on a PIC pin, 'y' being my pseudo (sw) cap discharge rate (albeit I'm not driving VU meters & I require different attack/release times).

  3. #3
    Join Date
    Oct 2005
    Location
    Loveland CO USA
    Posts
    83


    Did you find this post helpful? Yes | No

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

    Audio has a large dynamic range. I wanted to get as much range as possible. I needed to “zero” at 512 (10 bit). Resistors at 1% and even 0.1% did not always get me to zero. I also tried resistors to get within 1% of zero and then used the PWM output to move the ˝ voltage point +/- a little. I know in software I could have move the zero point to correct for this error. I wanted to do all the math slightly faster than the ADC could work and there was no time.

  4. #4
    Join Date
    Mar 2009
    Posts
    653


    Did you find this post helpful? Yes | No

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

    Quote Originally Posted by ronsimpson View Post
    Audio has a large dynamic range. I wanted to get as much range as possible. I needed to “zero” at 512 (10 bit). Resistors at 1% and even 0.1% did not always get me to zero. I also tried resistors to get within 1% of zero and then used the PWM output to move the ˝ voltage point +/- a little. I know in software I could have move the zero point to correct for this error. I wanted to do all the math slightly faster than the ADC could work and there was no time.
    I can live with the 1% (even 2%)....quiescently, I was seeing jitter of just over 1%.(ie readings of 127,127,126,127,17,126, etc)

    The accuracy of your ADC 'zero' point is obviously going to be down to how you approach DC biasing your AC signal feeding into the ADC pin - as a late suggestion, have you tried a DC blocking cap between your AC signal input & your chosen ADC pin? Obviously you then have to rebias the ADC pin - but 2 x 1% tolerance resistors between your PIC VCC & Gnd should ...with the the resistor junction connected to your ADC pin, should get you incredibly close to a reading of 512.

  5. #5
    Join Date
    Oct 2005
    Location
    Loveland CO USA
    Posts
    83


    Did you find this post helpful? Yes | No

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

    127,127,126,127,127,126, etc) APPROX. = 126.67
    If you have a voltage =126.66 in 8 bit mode you will likely get 127 and 126 readings.

    If I use 1% resistors then the error from resistors could be as great as 2%. Typically under 0.5%

    The ADC is not perfect. point 128 may be off a little. Typically it is close but it could be several counts off. I wanted to correct for both resistor and ADC worst case errors.

    Yes I have a DC blocking cap.

    It appears you read in data in 8 bit mode. After rectificaton you have 7 bit data.
    I chose to read in data in 10 bit mode. Rectify to 9 bit data. Loose the LSB to get 8 bit data.
    The math is done in 8 bit mode to keep the speed high.

    In RMS mode I square the 8 bit number to get a 16 bit number that is averaged.

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