Heya, I have tried my best, but I cannot interface the SID on my own, so I call you for help: Is there someone who has done this before? I would REALLY appreciate schematics and or code, because this doesn't seem to work (or it's just the hardware...)
Code:
Hardware:
Arduino connected to an 8bit shiftregister which is connected to the data input of the SID. The adress input of the SID is connected to the analog pins of the arduino (I use them as regular I/O) The 1Mhz clock signal is generated by the arduino (I hope)
Code:
//Define pin names
#define ad4 A0
#define ad3 A1
#define ad2 A2
#define ad1 A3
#define ad0 A4
#define CS A5
#define D 4
#define Mhz 9
#define CP 6
#define RES 7
//optional input
#define Dcalc 2
#define Ccalc 3
void setup(){
pinMode(ad0,OUTPUT);
pinMode(ad1,OUTPUT);
pinMode(ad2,OUTPUT);
pinMode(ad3,OUTPUT);
pinMode(ad4,OUTPUT);
pinMode(CS,OUTPUT);//inverted
pinMode(D,OUTPUT);
pinMode(CP,OUTPUT);
pinMode(RES,OUTPUT);//inverted
pinMode(Dcalc,INPUT);
pinMode(Ccalc,INPUT);
DDRB = _BV(DDB1); //set OC1A/PB1 as output (Arduino pin D9, DIP pin 15)
TCCR1A = _BV(COM1A0); //toggle OC1A on compare match
OCR1A = 7; //top value for counter
TCCR1B = _BV(WGM12) | _BV(CS10); //CTC mode, prescaler clock/1
delay(5);
//Set all inverted pins
digitalWrite(CS,HIGH);
digitalWrite(RES,HIGH);
//Clear the SID's registers
digitalWrite(RES,LOW);
delay(2);//Make sure they're empty
digitalWrite(RES,HIGH);
Serial.begin(9600);
//Default Preset
regWrite(0x00,0xC7);//Test tone C3 (Least-significant)
regWrite(0x01,0x84);// (Most-significant)
regWrite(0x02,0x50);//Pulsewidth (Least-significant)
regWrite(0x03,0x01);// (Most-significant)
regWrite(0x04,B01000001);//Gate,Square
regWrite(0x05,0xA8);//Attack,Decay
regWrite(0x06,0xA9);//Sustain,Release
}
void loop(){
regWrite(0x04,B01000001);//Gate,Square
delay(500);
regWrite(0x04,B00100000);//Gate=0,Saw
delay(500);
}
void regWrite(int address, int data){
digitalWrite(ad0,bitRead(address,0));
digitalWrite(ad1,bitRead(address,1));
digitalWrite(ad2,bitRead(address,2));
digitalWrite(ad3,bitRead(address,3));
digitalWrite(ad4,bitRead(address,4));
for(int i=0;i<=7;i+=1){
digitalWrite(D,bitRead(address,i));
digitalWrite(CP,HIGH);
delayMicroseconds(10);
digitalWrite(CP,LOW);
delayMicroseconds(10);
}
digitalWrite(CS,LOW);//CS is inverted
delayMicroseconds(10);
digitalWrite(CS,HIGH);
}
Hardware:
Arduino connected to an 8bit shiftregister which is connected to the data input of the SID. The adress input of the SID is connected to the analog pins of the arduino (I use them as regular I/O) The 1Mhz clock signal is generated by the arduino (I hope)