ISD1760 voice playback module

Hie, I’m looking for ideas, I have a voice module an ISD1760 driven by arduino uno. My problem is that I would like to trigger a specific message (among 5 messages previously recorded manually on the ISD) via a specific event of the arduino

Ex: if x < 4
( play a specific message)

Someone can enlighten me because I am pretty weak in prog syntax to access and read messages that are somewhere !!! in the memory of the ISD1760 .

Have you had a chance to look through the chip datasheet or used Google to search for example Arduino code?

I have the datasheet and i have been going through it, you need to specify the set_record start and end address for you to be able to set_play from that address, but im very new to this im not sure how to go about that

There is code to play from current pointer on this forum but it doesn’t specify how to then play from a specific memory location

D2476222809.pdf (99.6 KB)

Please edit your post to add code tags.

Need to invoke set_play so i direct playback to a specific memory address on the chip

Done

Nope.

The code should look like this
//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   
 SPCR = B01111111; //data lsb
 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 
 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); 
   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;                  
 while (!(SPSR & (1<<SPIF)))    
 {
 };
 return SPDR;                    
}