SID mos6581 interfacing with arduino


heya, have tried best, cannot interface sid on own, call help: there has done before? appreciate schematics , or code, because doesn't seem work (or it's hardware...)
code: [select]
//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 output (arduino pin d9, dip pin 15)
    tccr1a = _bv(com1a0);              //toggle oc1a on compare match
    ocr1a = 7;                         //top value counter
    tccr1b = _bv(wgm12) | _bv(cs10);   //ctc mode, prescaler clock/1
delay(5);
//set inverted pins
digitalwrite(cs,high);
digitalwrite(res,high);

//clear 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 inverted
   delaymicroseconds(10);
   digitalwrite(cs,high);
}

did last year , working quite : http://fullmaj.rd-h.fr/wiki/doku.php?id=sidaster



Arduino Forum > Using Arduino > Project Guidance > SID mos6581 interfacing with arduino


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial