Autor Tema: Recepción de string por esclavo usando i2c  (Leído 2598 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Recepción de string por esclavo usando i2c
« en: 25 de Junio de 2014, 14:26:32 »
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  :shock:

Código: [Seleccionar]
#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;
        }               
    }
}

 

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re: Recepción de string por esclavo usando i2c
« Respuesta #1 en: 25 de Junio de 2014, 15:07:34 »
Yo mismo me respondo jeje  :lol: , y bueno para alguien que le interese trabajar con este módulo y dspic, tal y como dice el documento que mencioné en mi primer post la función SlavegetsI2C devuelve la cantidad de bytes, configuré en el slave para leer la cantidad y prender un led, al mandar desde el maestro, el esclavo lee el string y prende el led  :mrgreen: , yo suponia que se podia enviar una trama y leerla completa con el i2c y manejar los bytes a antojo  :5] pero no hace eso


 

anything