Autor Tema: SPI Maestro Esclavo  (Leído 1796 veces)

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

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
SPI Maestro Esclavo
« en: 06 de Febrero de 2012, 22:25:56 »
Hola todos.
Tengo un PIC 16F690 conectado a un cirrus CS5463. El pic es el SPI master y el cirrus el slave.
El pic envia un dato de 8bits y luego 3 veces FF. El cirrus  al mismo momento que mando FF me manda 1 byte de informacion.
Estoy teniendo problemas para leer ese byte que me manda el esclavo.
Visto en el osciloscopio los datos vienen bien pero en el pic yo solo agarro ceros.

mi rutina de es la  escrita en hitech

char SPI_writeRead(char data){
        //char TempVar = SSPBUF;    
        SSPBUF = 0xFF;           // Se carga dato a enviar
        while (!BF);    // Se espera que envie y a la vez se recibe
      return ( SSPBUF );             // se retorna lectura                 
}
CONFIGURACION DEL PUERTO SPI
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Retorno:           int ;  Devuelve 1 si pudo configurar
//Parametro:      void
//Descripcion:      Configura el puerto SPI como maestro para trabajar con CKE = 1 y el CKP = 0
//                     
//               SSPCON   b7     b6     b5    b4      b3      b2     b1      b0
//                     |WCOL | SSPOV | SSPEN | CKP | SSPM3 | SSPM2 | SSPM1 | SSPM0 |
//                     |  0  |   X   |   1   |  0  |   0   |   0   |   0   |   0   |      
//               SSPSTAT  b7      b6      b5   b4   b3   b2 b1 b0
//                      | SMP | CKE | D/A | P | S | R/W | UA | BF |
//                     |  1  |  1  |  0  | 0 | 0 |  0  | 0  | 0  |
 
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void configuracionSPI(void){
   
   //---------SSPCON: SYNC SERIAL PORT CONTROL REGISTER--------------
   SSPCON = 0b00100010;
   //---------SSPSTAT: SYNC SERIAL PORT STATUS REGISTER--------
   SSPSTAT = 0b11000000;
   SSPEN = 1;

}
Desde ya muchas gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: SPI Maestro Esclavo
« Respuesta #1 en: 07 de Febrero de 2012, 10:23:00 »
  No sé si lo habrás tenido en cuenta pero tanto el pin SDO como SCK tienen que estar explícitamente configurados como salida.

Código: C
  1. TRISC7 = 0;
  2. TRISB6 = 0;

  También habría que ver sin al pin que se utiliza para SDI no hay que configurarlo como entrada digital, ya que también puede ser configurado como entrada analógica.
  Para asegurarte que el puerto funciona como entrada digital tienes que hacer 0 el bit 2 del registro ANSELH. Se puede hacer con lo siguiente

Código: C
  1. ANS10 = 0;
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas