The music plays just fine on Channel A but Channel B does nothing (and there is no code for Channel C).
I am reading over the data sheet for the AY-3-8912 (http://map.grauw.nl/resources/sound/generalinstrument_ay-3-8910.pdf) but I'm just not understanding how the control registers work. I know I have a lot to learn on that chip but I was wondering if anyone had any idea why channel B doesn't work?
When I try to play the music like:
for(int i=0;i< 47;i++){
set_chB(song[i][0]); // set_chA(song[i][0]); works. B does not.
delay(song[i][1]);
}
I get nothing. And I've confirmed that I am connecting all three channels to the same speaker. Channel A works.
Any guidance on what I'm doing wrong (or simpler explanation of the AY) would be greatly appreciated.
I have been reading and rereading the manual for the chip, and I still can't get my chip to make any noise. However, I have read it enough to have some ideas about why your channel B might not be working.
Have you enabled channel B in the Mixer address? You would have to send the following binary 0b111101 to disable A and enable B.
Then, you would probably have to give channel B volume in the Amplitude address.
So, if you are using the tutorial code, you would change your setup to look like this...
void setup()
{
//init pins
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(pinBC1, OUTPUT);
pinMode(pinBCDIR, OUTPUT);
// Initialize the mixer of the AY
write_data(0x06, 0x00);
write_data(0x07, 0x3d); //<--enable channel B
write_data(0x09, 0x0f);//<--give volume to channel B
}
...just keep in mind my chip doesn't work at all. XD