View previous topic :: View next topic |
Author |
Message |
pinstrum Guest
|
audio generation using a pic - help is greatly needed..... |
Posted: Wed Feb 23, 2005 10:58 am |
|
|
I'm looking at using a PIC to either produce sounds itself (range approx 60Hz to 1100Hz) or to get a chip with these sounds already in to play. The PIC has to be able to read from a 16 button keypad and also be able to play up to 8 notes in a sequence after input. Anybody got any ideas - i know the PIC should be able to produce the sound but am not sure how to go about it. (There are a total of 60 sounds that need to be able to be picked from, each between 1 - 2 seconds long - in terms of sampling these sounds there's no way a PIC would be able to store that much data (I think) so I would need to interface with an external memory chip - can thsi be done (I have to use the PIC 16 family as its the only chip-type I have a programmer for).
Am really stuck - anybody got any ideas?
Thanks |
|
|
Eric Minbiole
Joined: 10 Jun 2004 Posts: 16 Location: USA
|
|
Posted: Wed Feb 23, 2005 11:23 am |
|
|
You can definitely play simple notes with a PIC. One of the simplest ways is to connect a Piezo speaker to the PWM output of the PIC. You can vary the PWM frequency to get a good range of notes. (Though 60Hz is a fairly low frequency, and may require a largish speaker.) You can use a traditional speaker as well, but you'll need an impedance matching transformer. (1kOhm input, 8 ohm output will work, avail from Radio Shack.)
I recently did a project similar to this: My wife and I made music boxes as our [spam] favors. It used a PIC16F628 connected directly to a piezo speaker. It stored the song (notes) in internal code, and sounded pretty good.
If you want sampled sounds, it is more challenging. I read a very cool article by Roman Black a while ago. He created a simple 1 bit DAC using a resistor and a capacitor, and was able to reproduce some simple sampled audio. I haven't tried it, but it looks very clever / interesting. Here's the link: http://centauri.ezy.net.au/~fastvid/picsound.htm .
Good luck! |
|
|
DragonPIC
Joined: 11 Nov 2003 Posts: 118
|
tone.c |
Posted: Thu Feb 24, 2005 10:45 am |
|
|
Have you checked tone.c that comes with the CCS compiler. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
|
pinstrum Guest
|
|
Posted: Fri Feb 25, 2005 6:12 am |
|
|
Eric - Thanks for the advice. Am looking into using the PWN output of the PIC to generate the frequency, am not completely sure but i think i remember reading somewhere that there's a limit on the lowest frequency that can be generated which is around 244Hz
(using max PR2 available as 255 and max pre-scale as 16 you get
pwn freq = ( 1E06 / (256 * 16)) = 244Hz and that's using a 4MHz clock (4MHz allows 4/4 = 1MHz rate at which can execute instructions i think?)
Any ideas on how to get round this little problem - or if i've messed up somewhere and it's not actually an issue.
Also, have already had a look at Roman Black's algorithm but it's quite memory heavy. Am talking 60 notes of around 1.5secs each so that's about 90s of data. using the routine mentioned by christian donner, you can get 17secs on 32k I2C serial eeprom so i would need around 192k eeprom to do this. Also, I not really familiar with how the eeprom interface works - any idea if it would be possible to store a lot of different sample data under seperate memory addresses and call specific data up using the PIC?
DragonPIC - can't check tone.c as don't have the file but thanks anyway
Mark - had a look at your code, nice work there. Is it okay to attempt modifying it for my project? The sound output aspects are there, i would basically have to interface a 16-key keypad with the PIC to get it to play notes rather than tunes on command.
Plan is - 12 keys represent 12 notes (C -> B), 1 key for play, 1 key for reset, one key to switch the octave of the note just input and 1 key spare (was originally going to be attempted to be used to make the notes play at once but that might be later work after i get the main unit up and running. User can input up to 8 notes in requested octaves and then play back, so would need to store the sequence of notes wanted in memory and recall them at will - any thoughts?
Thanks all for your help so far, the responses i've made are not user specific, it's just so you know what bit of my questions are in reply to who. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Feb 25, 2005 7:02 am |
|
|
Modify it as you wish. I make no claims at all. Sounds like it would be a nice fit for what you want. |
|
|
|