פורסם 2015 בינואר 1910 שנים היי אני עובד עם ארדואינו מגה 2560 ומודול כרטיס קול isd1760 אני משתמש בקוד הבא: //define pins #define DATAOUT 11 //mosi #define DATAIN 12 //miso #define SPICLOCK 13 //sck #define SLAVESELECT 10 //ss //opcodes #define PU 0x01 #define STOP 0x02 #define RESET 0x03 #define CLR_INT 0x04 #define RD_STATUS 0x05 #define RD_PLAY_PTR 0x06 #define PD 0x07 #define RD_REC_PTR 0x08 #define DEVID 0x09 #define PLAY 0x40 #define REC 0x41 #define ERASE 0x42 #define G_ERASE 0x43 #define RD_APC 0x44 #define WR_APC1 0x45 #define WR_APC2 0x65 #define WR_NVCFG 0x46 #define LD_NVCFG 0x47 #define FWD 0x48 #define CHK_MEM 0x49 #define EXTCLK 0x4A #define SET_PLAY 0x49 #define SET_REC 0x81 #define SET_ERASE 0x82 void setup() { byte clr; pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK,OUTPUT); pinMode(SLAVESELECT,OUTPUT); digitalWrite(SLAVESELECT,HIGH); //disable device SPCR = B01111111; //data lsb, clock high when idle, samples on falling clr=SPSR; clr=SPDR; delay(10); //start serial //Serial.begin(57600); digitalWrite(SLAVESELECT,LOW); spi_transfer(PU); // power up spi_transfer(0x00); // data byte digitalWrite(SLAVESELECT,HIGH); delay(100); digitalWrite(SLAVESELECT,LOW); spi_transfer(CLR_INT); // clear interupt and eom bit spi_transfer(0x00); // data byte digitalWrite(SLAVESELECT,HIGH); delay(100); } void loop() { digitalWrite(SLAVESELECT,LOW); spi_transfer(PLAY); // clear interupt and eom bit spi_transfer(0x00); // data byte digitalWrite(SLAVESELECT,HIGH); ready_wait(); digitalWrite(SLAVESELECT,LOW); spi_transfer(FWD); // clear interupt and eom bit spi_transfer(0x00); // data byte digitalWrite(SLAVESELECT,HIGH); } void ready_wait(){ byte byte1; byte byte2; byte byte3; while(byte3<<7 != 128){ digitalWrite(SLAVESELECT,LOW); byte1 = spi_transfer(RD_STATUS); // clear interupt and eom bit byte2 = spi_transfer(0x00); // data byte byte3 = spi_transfer(0x00); // data byte digitalWrite(SLAVESELECT,HIGH); } delay(100); } char spi_transfer(volatile char data) { SPDR = data; // Start the transmission while (!(SPSR & (1<<SPIF))) // Wait for the end of the transmission { }; return SPDR; // return the received byte } זה עבד לי בארדואינו UNO אבל כשניסיתי להעביר למגה אז זה לא עובד ראיתי באתר של ארדואינו על המגה שהכניסות מתחלפות לכניסות 50-53 בארדואינו מגה אבל זה עדיין לא עבד לי תודה לעוזרים
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.