8051 interfaz ADXL SPI

0

Estoy intentando conectar una interfaz ADXL345 a 8051 - AT89C51RC2 a través de la interfaz SPI.

He usado el siguiente código tomado de aquí :

 include "Init.h"

 define SS_ADXL P1_0;

 void SPI_interr_routine(void);

 char serial_data;

 char data_example;

 char data_save;

 char transmit_completed;


void main(void)
{

    // Insert code
    Hardware_init();
    transmit_completed = 0;
    data_example=0x55;
    data_save = 0;
    printf("\n\r1111111111111");
    SPCON |= 0x10; /* Master mode */
    P1_1=1; /* enable master */
    SPCON |= 0x82; /* Fclk Periph/128 */
    SPCON &= ~0x08; /* CPOL=0; transmit mode example */
    SPCON |= 0x04; /* CPHA=1; transmit mode example */
    IEN1 |= 0x04; /* enable spi interrupt */
    SPCON |= 0x40; /* run spi */
    P1_1 = 0;
    EA=1; /* enable interrupts */
    //while(1) /* endless */
    //{
        SS_ADXL = 0;
        SPDAT= (0x32 | 0x80); /* send an example data */ //
        while(!transmit_completed);/* wait end of transmition */
        transmit_completed = 0; /* clear software transfert flag */

        SPDAT=0x00; /* data is send to generate SCK signal */
        while(!transmit_completed);/* wait end of transmition */
        transmit_completed = 0; /* clear software transfert flag */
        data_save = serial_data; /* save receive data */
        SS_ADXL = 1;
    //}

    printf("\n\r%c data_save = " , data_save);
}


void it_SPI(void) __interrupt (9) 
{

   SPI_interr_routine();

   return;

}

void SPI_interr_routine(void)
{

    if((SPSTA & 0x80) == 1)
    {
        serial_data = SPDAT;
        transmit_completed=1;
    }

    return;
}

Conexiones de hardware:

He usado este convertidor de nivel lógico para conectar el 8051 a ADXL345.

El pin P1.1 (SS) de 8051 no está conectado y lo habilito en el software al configurar P1.1 a 1.

El pin CS del ADXL345 está conectado a un GPIO de 8051 y estoy seleccionando el esclavo (ADXL345) configurando el pin GPIO a bajo antes de escribir / leer y luego configurarlo en alto. Estoy usando el módulo SPI incorporado en 8051.

Cuando ejecuto el código anterior, el bit SPIF no se establece.

déjeme saber si hay algún problema con la conexión del hardware o el código.

Gracias

    
pregunta priti

1 respuesta

1

La Hoja de datos ADXL345 Rev E página 15 indica que "el esquema de temporización sigue la polaridad del reloj (CPOL) = 1 y la fase del reloj (CPHA) = 1". Asegúrese de absolutamente seguro que no se infringe ninguna de las limitaciones de tiempo. Este chip en particular debe seguir los tiempos mínimos y máximos que se muestran en la página 17. Un osciloscopio de almacenamiento digital (preferido) o un analizador lógico puede ser muy útil para la solución de problemas.

    
respondido por el rdtsc

Lea otras preguntas en las etiquetas