Autor Tema: SPI Y MCP23S08 CON 18  (Leído 2476 veces)

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

Desconectado raquena

  • PIC12
  • **
  • Mensajes: 56
SPI Y MCP23S08 CON 18
« en: 27 de Marzo de 2013, 10:08:44 »
Hola a todos

Estoy empezando con el bus SPI, así que decidi comenzar comunicando un integrado MCP23S08 con un 18f4550.
Se supone que debería ser un ejemplo muy sencillo para comenzar a familiarizarme con el bus SPI, el caso es que mi ejemplo no funciona en absoluto.
Le he dado varias vueltas y he realizado diferentes pruebas y no consigo comunicación.
Utilizo el SPI hardware con la librería SPI.h, realizando las siguientes conexiones:

18f4550.SDO -> MCP23S08.SI
18f4550.SDA -> MCP23S08.SO
18f4550.SCK -> MCP23S08.SCK
18f4550.CS -> MCP23S08.RB2


Adjunto código:


# include<p18f4550.h>

# include<delays.h>
# include<spi.h>


//# pragma config FOSC = INTOSCIO_EC
# pragma config MCLRE = OFF
# pragma config WDT = OFF
# pragma config LVP = OFF

// ZONA DE LOS DEFINES ///////////////////////////////////////////////////

# define MCP23S08_W_ADRESS 0X40
# define MCP23S08_R_ADRESS 0X41


# define SPI_CS PORTBbits.RB2
# define TRIS_SPI_CS TRISBbits.TRISB2


# define CS_MCP23S08 TRISCbits.RC7


//////////////////////////////////////////////////////////////////////////


// VARIABLES GLOBALES ////////////////////////////////////////////////////

unsigned char var;

char dataSend;          // datos a enviar por SPI
char dataReceive;       // datos a recibir por SPI

//////////////////////////////////////////////////////////////////////////


void main(){

    // INICIALIZACIÓN DE VARIABLES ///////////////////////////////////////

    dataSend = 25;
    dataReceive = 0;

    //////////////////////////////////////////////////////////////////////

    // CONFIGURACIÓN DE I/O //////////////////////////////////////////////

    ADCON1 = 0X0F;          // Configuramos todos los puertos como I/O digitales
    TRIS_SPI_CS = 0;        // El pin correspondiente al chip select del SPI, queda como salida
    TRISB = 0;              // El PORTB0, controla el Slave Input del bus SPI
   
    //////////////////////////////////////////////////////////////////////

    // CONFIGURACIÓN SPI /////////////////////////////////////////////////

    //CloseSPI();
    SPI_CS = 0;
    OpenSPI(SPI_FOSC_4, MODE_11, SMPMID);

    //////////////////////////////////////////////////////////////////////

    while(1){

        SPI_CS = 0;
        WriteSPI(MCP23S08_W_ADRESS);        // Indicamos al MCP23S08 que vamos a realizar una escritura
        Nop();
        WriteSPI(0x00);                     // Indicamos que escribiremos en la dirección de memoria del TRIS del MCP
        Nop();
        WriteSPI(0x00);                     // Todo el tris pasa a ser SALIDAS.
        Nop();
        SPI_CS = 1;

        SPI_CS = 0;
        WriteSPI(MCP23S08_W_ADRESS);        // Indicamos al MCP23S08 que vamos a realizar una escritura
        Nop();
        WriteSPI(0x09);                     // Indicamos que escribiremos en la dirección de memoria del TRIS del MCP
        Nop();
        SPI_CS = 0;
        WriteSPI(0xF0);                     // MEDIO PUERTO ON, MEDIO PUERTO OFF
        Nop();
        SPI_CS = 1;


    }

    CloseSPI();     // termina la comunicación serie.

}


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: SPI Y MCP23S08 CON 18
« Respuesta #1 en: 27 de Marzo de 2013, 20:43:26 »
Hola! Simulaste en proteus como para ver que estas haciendo? O sea, si se configuro el puerto SPI, velocidad, datos, etc..


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado raquena

  • PIC12
  • **
  • Mensajes: 56
Re: SPI Y MCP23S08 CON 18
« Respuesta #2 en: 28 de Marzo de 2013, 08:00:27 »
Se supone que el SPI funciona (correctamente o no, esa es otra historia).
He aquí la foto de la simulación con la sonda SPI conectada:


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: SPI Y MCP23S08 CON 18
« Respuesta #3 en: 28 de Marzo de 2013, 19:59:27 »
El reset esta a GND, esta desactivado  :roll:
No contesto mensajes privados, las consultas en el foro

Desconectado raquena

  • PIC12
  • **
  • Mensajes: 56
Re: SPI Y MCP23S08 CON 18
« Respuesta #4 en: 04 de Abril de 2013, 19:01:32 »
Estoy tonto... Se nota que necesitaba unas vacaciones.

Desconectado raquena

  • PIC12
  • **
  • Mensajes: 56
Re: SPI Y MCP23S08 CON 18
« Respuesta #5 en: 04 de Abril de 2013, 19:29:48 »
Bueno... Sigo con algunos problemillas, ahora la escritura de datos funciona correctamente, pero parece que la lectura sigue sin funcionar...
CUelgo el código nuevo:



Este es el MCP23S08.h

#ifndef MCP23S08_H
#define   MCP23S08_H

# define MCP23S08_W_ADRESS 0X40
# define MCP23S08_R_ADRESS 0X41

// PIN DEL MICRO AL QUE ESTARÁ CONECTADO EL CHIP SELECT DEL MCP

# define MCP23S08_CS PORTBbits.RB2
# define MCP23S08_CS_TRIS TRISBbits.TRISB2


void WriteMCP23S08(char address, char data);
char ReadMCP23S08(char adress);



Este el MCP23S08.c

void WriteMCP23S08(char address, char data){

    MCP23S08_CS = 0;
    WriteSPI(MCP23S08_W_ADRESS);        // Indicamos al MCP23S08 que vamos a realizar una ESCRITURA
    WriteSPI(address);                  // Indicamos el registro que vamos a escribir
    WriteSPI(data);                     // Todo el tris pasa a ser SALIDAS.
    MCP23S08_CS = 1;

}
char ReadMCP23S08(char address){

    char data = 0;

    MCP23S08_CS = 0;
    WriteSPI(MCP23S08_R_ADRESS);        // Indicamos al MCP23S08 que vamos a realizar una LECTURA
    WriteSPI(address);                  // Indicamos el registro que vamos a leer
    data = ReadSPI();                   // Obtenemos el valor del registro seleccionado
    MCP23S08_CS = 1;

    return(data);

}



Y esto todo lo que ha quedado del main:


    WriteMCP23S08(0x00,0x00);               // Todos los pines del MCP como salidas

    while(1){

        char i;

        for(i = 0; i <= 0x0A; i++){
            WriteMCP23S08(0x09,i);
            rcv = ReadMCP23S08(0x09);
        }
       

    }

    CloseSPI();     // termina la comunicación serie.



Seguro que es algo tan ridículo como lo de antes...


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: SPI Y MCP23S08 CON 18
« Respuesta #6 en: 04 de Abril de 2013, 20:49:05 »
Porque dices que no funciona? Cual es el error?
No contesto mensajes privados, las consultas en el foro

Desconectado raquena

  • PIC12
  • **
  • Mensajes: 56
Re: SPI Y MCP23S08 CON 18
« Respuesta #7 en: 05 de Abril de 2013, 07:47:59 »
Conforme está escrito el programa, el dato leído debería ir variando entre 0 y 10, el caso es que la escritura se produce correctamente porque se encienden los pines correctos del MCP, pero luego cuando quiero leer los datos del MCP, siempre recibo el caracter 'o' en lugar del valor correspondiente.


 

anything