CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Question on tone generation among interrupts

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

Question on tone generation among interrupts
PostPosted: Thu Jan 16, 2020 1:06 pm     Reply with quote

Hi all,
I am working in integrating code for a PIC18F45K20 with another developer where I am using his radio library object files so basically I have a set of defined functions from that library that I have to use for my application.

One of the things that his library has is a periodic interrupt function that gets called every 6 mS and it is using timer2 of the PIC the only thing I do during that interrupt is to call some of his radio synchronization routines. I am developing part of an interface that does all the non-radio things and one of the things that I have to do is generate audible tones ~2KHz and take care of a bunch of other visual indicators. Normally this would be a very simple thing to do as far as generating any audio tones I would tend to just use the PWM module which can run freely on its own without being bothered by other interrupts. Unfortunately, on this PIC the PWM module requires the timer2 module which is not available to me. So I am generating tones in one of two ways either programmatically in a for or while loop and using a interrupt from another timer where the tone is generated within the interrupt of that timer in my case I am using timer1 with an interrupt of 250uS to generate a 2KHz tone. The problem I am having is that whenever I generate a tone with a duration between 100 to 200 mS is that the tone sounds garbled because the periodic high priority 6mS interrupt is taking place, so the 2KHz audio is getting chopped at a 166.7Hz (6mS) so no one likes the way this tone sounds. Unfortunately I cannot shut down the timer2 interrupt nor can I use an external device to generate a tone and I cannot change the selected PIC for this design. I was thinking of perhaps using timer2 that is running the 6mS interrupt and whenever I am generating a tone that I could do it inside a while loop where I read the timer2 counter to a value, toggle the IO pin that drives the speaker ON then when the timer2 counter equals the desired period value of my tone I then toggle the IO pin back to OFF. As far as I know there is no latency influence on the timer2 interrupt when you read the counter registers. I have tried this and it appears not to work too well.

FYI this is the way the timer2 is been setup:
The PIC is running from an external oscillator at a frequency of 9.0000MHz
setup_timer_2(4, 224, 15); // 6mS interrupt

I am wondering if anyone in this forum full of some very smart people have some kind of creative idea or solution Rolling Eyes Rolling Eyes
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Jan 16, 2020 2:02 pm     Reply with quote

Use a second, 50 cent PIC as a 'gated 2KHz tone generator'. An I/O pin from the 'master' PIC tells it to 'beep or not'.
OK, so it costs a wee bit of money BUT far less than the R&D coding time !

Sure it's 'fun' to get one PIC to do everything IF you're retired and have nothing else to do but for a real project, the above is a real solution.
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Thu Jan 16, 2020 2:19 pm     Reply with quote

Thanks for the hint, actually that was my first solution, using a SOT23-5 pin PIC but unfortunately they don't want to add any more parts into the design and I am running out of ideas.
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Jan 16, 2020 2:45 pm     Reply with quote

So they'd rather pay you hundreds if not thousands of dolllars to TRY to get a possible one PIC solution ?
If so they're not looking at the 'big picture' or 'bottom line'.
I see this with my 'proof of concept' projects, clients wanting a low cost product not understanding the high cost of R&D. I added a 'daughter' board to solve a nasty timing problem,needed xtal,caps,3 chips. Yes, they complained BUT it was a cost effective solution. 1 day R&D AFTER I'd spent a WEEK trying to do it 'their' way.
Perhaps there's another PIC, more powerful, more money. That probably will involve several days of R&D, rework PCB, testing,coding, $$$$$
Maybe, there's some clever coding you can do, but again , time IS money, and who says it WILL work ?
If, IF, this product is say 10,000 units then I can see it might be better for a 1 PIC solution. At ,100 units, it's $50 for the 2nd PIC, so 1/2 hr of my R&D time.Done....
I'll wager you've spent a LOT more time chasing this ....
and then there's the pots of coffee to consider ! Very Happy

Jay
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Thu Jan 16, 2020 2:52 pm     Reply with quote

This is going into a high volume consumer product that is quite small and they already have a molded enclosure, so they don't want extra parts at all. This is what I call a simple complicated product, sounds like an oxymoron!

You right I have had quite a few cups of coffee so far.
Ttelmah



Joined: 11 Mar 2010
Posts: 19520

View user's profile Send private message

PostPosted: Fri Jan 17, 2020 1:58 am     Reply with quote

As a question, why is Timer 2 'not available'?.

OK it's being used here for the 6mSec, but assuming there is another
timer available, it should be pretty simple to just use one of these for
the 6KHz event, then giving you Timer 2 for the PWM.
So the interrupt handler would just need to be moved to this other
timer, and it's routine would have to increment it's counter (since
timer 2 is the only timer that 'self resets' at a count). But a total of
perhaps three lines of code, and then you have the PWM available to
generate the tone....
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Fri Jan 17, 2020 7:53 am     Reply with quote

Unfortunately for me, life is not so simple. I am working with another developer (something I will avoid in the future) and he is "hell-bent" in only using timer2 for his library application. I had originally suggested he use any other timer available for his library interrupt so I could use timer2 for PWM....but NO GO.
So timer2 is not existent for me. I am beginning to believe that there is no real way to fix this other than adding additional circuitry external to this PIC.
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Jan 17, 2020 9:31 am     Reply with quote

sigh, I feel for you, caught between rock and hard case......
I hate to think what the REAL cost of this is......$$$$
Ttelmah



Joined: 11 Mar 2010
Posts: 19520

View user's profile Send private message

PostPosted: Fri Jan 17, 2020 9:31 am     Reply with quote

Aaargh!....

Another option, change PIC.
May of the slightly later chips have more than one timer selectable for
the PWM.
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Jan 17, 2020 9:59 am     Reply with quote

yeah, that's not an option, I rechecked the OP....sigh. PCBs probably made, no coins to R+R the PIC....
Ttelmah



Joined: 11 Mar 2010
Posts: 19520

View user's profile Send private message

PostPosted: Fri Jan 17, 2020 10:01 am     Reply with quote

A real pity, since the PIC18F45K22, is pin compatible, and gives three
timers that can be used for the PWM. Only change needed in the code
would be that #PIN SELECT is needed to route the peripherals.
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Fri Jan 17, 2020 11:27 am     Reply with quote

Unfortunately, I was brought into this project when the hardware design was already developed by someone else. Normally I like to take the project and design both the hardware and firmware which makes my life easier. As the old proverb goes; "too many cooks spoil the broth"
I thank you all for your kind advice, over the years I have had great advice and gained some wisdom from the many talented people in this forum.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group