Hola a todos, estoy usando 2 dspic, el maestro 30f2010 y el esclavo 30f4012, intento enviar una cadena de datos, básicamente un texto(stringtx[]="ENVIANDO"

, he puesto leds en el maestro y esclavo para indicar la tx y rx respectivamente, pero sucede que el led de rx no se prende, este led debe prender si el primer elemento del arreglo es igual a 'E'(stringrx[0] == 'E'), aparentemente el buffer de recepción del esclavo tiene datos, pero por alguna razón no enciende el led indicador. He usado el código de ejemplo para la recepción de cadenas encontrado en el documento "16 bits language tools libraries", interpretando el código, se usa un puntero para apuntar a la dirección del primer elemento del arreglo de recepción 'stringrx' e ir almacenando los datos recibidos en ese arreglo...asi lo entiendo, pero leo también que lo que retorna la función SlavegetsI2C es el NUMERO de bytes y no que los almacena...

...como dato adicional, también implemente tx y rx de un byte, con la misma lógica y en ese caso si tuve éxito, pongo esto para descartar errores de inicialización del i2c, el problema es la interpretación de la función SlavegetsI2C(rdptr, i2c_data_wait) y/o la programación, pongo el código del esclavo para mas detalles, si alguien me puede ayudar a entender esto ya que en la red no hay información sobre recepción de cadenas usando dspic con c30 y mplabx
#include <p30F4012.h>
//#include <stdbool.h>
#include <libpic30.h>
#include <i2c.h>
#define SYS_FREQ 40000000
#define FCY SYS_FREQ/4 //10 MIPS
#define ms_1000 (24*FCY/15)+1
#define ms_100 (24*FCY/150)+1
#define ms_500 (12*FCY/15)+1
#define ms_50 (24*FCY/300)+1
#define LED_RCV _LATB0
#define LED_TRS _LATB1
#define LED_STR _LATE0
unsigned int config1, config2;
char comando;
void main(void)
{
unsigned char stringrx[10];
unsigned char *rdptr;
unsigned int i2c_data_wait;//esto según veo es para darle tiempo al modulo i2c para retomar la lectura
rdptr = stringrx;
i2c_data_wait = 0x11;//he colocado lo que sugiere el ejemplo del documento
TRISBbits.TRISB0 = 0; //RB0 salida
TRISBbits.TRISB1 = 0; //RB1 salida
TRISEbits.TRISE0 = 0; //RE0 salida
I2CADD = 0x08; //direccion del esclavo
//void recibecadena(void);
config2 = 90; // baud = {[(1/Fscl)-PGD].Fcy}-1; valor característico de PGD = 250ns, Para Fcy = 10MHz, Fscl = 100kHz
// --> config2 = baud = 90
config1 =( I2C_ON & I2C_IDLE_CON & I2C_CLK_HLD & I2C_IPMI_DIS & I2C_7BIT_ADD & I2C_SLW_DIS &
I2C_SM_DIS & I2C_GCALL_DIS & I2C_STR_DIS & I2C_NACK & I2C_ACK_DIS & I2C_RCV_DIS &
I2C_STOP_DIS & I2C_RESTART_DIS & I2C_START_DIS);
CloseI2C();
OpenI2C(config1,config2);
while(1)
{
if(DataRdyI2C())
{
SlavegetsI2C(rdptr, i2c_data_wait);
LED_STR = 1;
__delay32(ms_500);
LED_STR = 0;
}
if(stringrx[0] == 'E' )
{
LED_STR = 1;
__delay32(ms_500);
LED_STR = 0;
string[10]=0;
}
}
}