500 hz is the first harmonic negative of 1 Khz. some Pi filters might help or lower the input gain
500 hz is the first harmonic negative of 1 Khz. some Pi filters might help or lower the input gain
Last edited by Archangel; - 7th June 2012 at 16:33.
If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
.
Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
.
There simply is no "Happy Spam" If you do it you will disappear from this forum.
I don't think that's the issue, here's a scope screenshot of what the PIC's internal comparator is seeing internally...
The white parameters window to the right is my scope's take on the waveform it is displaying (1khz)
The green text on the left is the PIC spitting out the TMR1 counts it's counted between comparator2 interrupts serially to my PC com port.
Last edited by HankMcSpank; - 7th June 2012 at 16:51.
Hank,, how bout toggling a pin in your ISR to show when the PIC thinks it should start and stop counting.
EDIT : OK I see youo have done that already DOH!!
The numbers should be linear IMHO. so 330 HZ is about half of 600, but your numbers are *4. 330 = 7300 and 600 = 1800. Now between 600 and 650, we have a difference of 600. So that would say the count shoud be 600 per 50hz. so to get to 100hz, we would expect the count to be 10*600=6000 difference. or 7800 (ish). but you are at 49,000 for 82.4. either I am way off on my linear assumption (most likely) or something is really amiss.
Last edited by cncmachineguy; - 7th June 2012 at 17:00.
-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!
No...I hadn't so put a toggle in my ISR (top tip - tks!)
I've scoped the ISR 'toggled' pin & I'm seeing 250hz on there?!! (therefore 2 x 250hz = an interrupt rate of 500Hz ....this for a 1kHz audio signal?!)
I confirmed my input to the comparator was 1Khz...and also the output from the PIC comparator is definitely 1khz (since I've brought it out on a PIC external pin & scoped it).
So it looks like my comparator interrupt isn't working properly and my interrupt is only happening at half the rate it should???
Any ideas?!!
Last edited by HankMcSpank; - 7th June 2012 at 17:13.
Ok, so I took the HSEROUT command out of the ISR ...... & then my ISR 'toggle pin' frequency scoped correct up to around 900hz audio input ....however, above that 900Hz audio input, even with just a basic 'toggle pin' in the ISR, the toggle pin frequency as seen on a scope starts going awry again....so the conclusion here ...it seems that DT's interrupts are taking a bit too long to get in & out for anything above 800hz comparator interrupt rate (this is with a 16Mhz oscillator).
Anyone know of another way of approaching this? (I'd like to be able to to detect up to 1.5Khz)
Last edited by HankMcSpank; - 7th June 2012 at 18:16.
Here I go out on a limb that has been broken already, change the type to ASM instead of PBP. The only thig I see in your ISR using PBP is HSEROUT and TMR=0 since you removed the hser, now its only TMR=0 Now keep in mind - YOU ARE NOT SUPPOSED to do this, but for the simple setting of TMR I think you can get away with it. Add BSR=0 as your first line in the ISR. That will stop all the system variables from getting saved and restored everytime you enter the ISR. Sound familiar?
This may be enough to make it happen just as you want. The next approach I can think of is to use the comparitor as the gate for the timer, but that may be how you are doing it now
Also, does the CMP fire an int twice or 4 times per cycle? or just 1 time?
Last edited by cncmachineguy; - 7th June 2012 at 18:25.
-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!
Thanks for the input Bert, I changed the interrupt to ASM...
and modified my ISR...Code:ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler CMP2_INT, _CMP2_Interrupt, ASM, YES endm INT_CREATE ; Creates the interrupt processor ENDASM
but I still can't my audio input above 900Hz, without the ISR toggle pin scoping wrong :-(Code:CMP2_Interrupt: ' COMPARATOR2 INTERRUPT. BSR=0 toggle portc.7 TMR1=0 @ INT_RETURN
Hank do the numbers below 900 seem to make sense? We should be able to predict the TMR output based on some simple math. You are running 4MIPS (16Mhz OSC). so that would be .25uS per instruction. If the timer is running from Fosc, a 1 K signal would have a count of 4000? 1/1000 = 1mS. 1mS/.25uS=4000. Assuming the ISR fires 1 time per cycle. Likewise we would expect a count of around 8000 for a 500Hz signal. But either you don't have it set up as I assume, or something is wrong that will require seeing more of your code.
BTW, using my assumptions, 82.4Hz is 48,543.
330Hz = 12,121
600Hz = 6666
650Hz = 6153
I can't decide if that looks linear, but it should.
Also try clearing the TMR1 high byte and low byte seperatly in the ISR. I don't think this should help, but it can't hurt
Last edited by cncmachineguy; - 7th June 2012 at 20:36.
-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!
Bookmarks