Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // http://supertechman.blogspot.com.au/2010/09/new-sine-test-wave-for-vs1053-shield-on.html
- #include <SPI.h>
- int CS_pin = 9;
- int DREQ_pin = 3;
- void setup() {
- Serial.begin(9600);
- pinMode(CS_pin, OUTPUT);
- pinMode(DREQ_pin, INPUT);
- SPI.begin();
- SPI.setBitOrder(MSBFIRST);
- //CPOL = 0, CPHA = 1
- //see http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Mode_Numbers
- //and decoder chip datasheet
- SPI.setDataMode(SPI_MODE1);
- //max SDI clock freq = CLKI/7 and (datasheet) CLKI = 36.864, hence max clock = 5MHz
- //SPI clock arduino = 16MHz. 16/ 4 = 4MHz -- ok!
- SPI.setClockDivider(SPI_CLOCK_DIV4);
- initialize();
- }
- void loop(){
- Serial.println("starting sine test");
- digitalWrite(CS_pin, HIGH);
- chip_write(0x00, 0x0c20); // sets sci_mode register, SM_SDINEW, SM_SDISHARE
- // SM_TESTS. pg 25, 26
- chip_sineTest(0xAA); // test tone frequency (pg 35)
- Serial.println("end of loop");
- }
- void chip_write (unsigned int address, word data){
- byte aux;
- digitalWrite(CS_pin, LOW);
- delay(1);
- SPI.transfer(0x02); //write command
- SPI.transfer(address); //SDI_MODE register
- //extract and send higher byte of data
- aux = data >> 8;
- SPI.transfer(aux);
- //extract and send lower byte of data
- aux = data & 0b11111111;
- SPI.transfer(aux);
- //wait for the chip to finish executing command
- //while (!digitalRead(DREQ_pin)){};
- digitalWrite(CS_pin, HIGH);
- delay(1);
- }
- void chip_sineTest(int pitch){
- digitalWrite(CS_pin, HIGH);
- delay(1);
- SPI.transfer(0x53);
- SPI.transfer(0xEF);
- SPI.transfer(0x6E);
- SPI.transfer(pitch);
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- SPI.transfer(0);
- digitalWrite(CS_pin, LOW);
- delay(1);
- }
- void initialize(){
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement