Autor Tema: (Solucionado) Ayuda con SPI y CS5463  (Leído 22461 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #30 en: 30 de Diciembre de 2011, 13:44:29 »
Bueno, si se ignora como funciona el microcontrolador y además se ignora como trabaja el compilador es un poco complicado  :tongue: Yo como se trabaja en Hi-tech ni idea, pero por ejemplo en C18 se puede implementar:

Código: C
  1. UINT8 ReadDevice(void){
  2.       UINT8 TempVar;
  3.    
  4.       TempVar = SSPBUF;      
  5.       SSPBUF = 0xFF;          
  6.       while (!SSPSTATbits.BF);
  7.       return ( SSPBUF );                
  8. }
No contesto mensajes privados, las consultas en el foro

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #31 en: 30 de Diciembre de 2011, 16:11:53 »
Bueno, si se ignora como funciona el microcontrolador y además se ignora como trabaja el compilador es un poco complicado  :tongue: Yo como se trabaja en Hi-tech ni idea, pero por ejemplo en C18 se puede implementar:

Código: C
  1. UINT8 ReadDevice(void){
  2.       UINT8 TempVar;
  3.    
  4.       TempVar = SSPBUF;      
  5.       SSPBUF = 0xFF;          
  6.       while (!SSPSTATbits.BF);
  7.       return ( SSPBUF );                
  8. }

Una acusacion fuerte. Yo conozco como funciona el micro, lo que no conozco y la hoja de datos no me lo dice no lo puedo saber. Si te fijas en la hoja del cirrus no hay ejemplos de leer y escribir al mismo tiempo. El codigo SPI lo tengo implementado, el tema es que la hoja de datos del CS5463 no dice que modo SPI tiene. Te agradezco el codigo de ejemplo.
Vos aca estas mandando 0xFF primero y después leyendo? Tu primera instruccion TempVar = SSPBUF;   es una lectura dummy?
Gracias por las respuestas.

« Última modificación: 30 de Diciembre de 2011, 16:21:08 por medidort »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #32 en: 30 de Diciembre de 2011, 17:12:37 »
Ejemplo no creo que encuentres en un datasheet, pero por ejemplo para el CS5461A, en su datasheet encuentras el siguiente esquema:



 :roll: Bastante claro me parece...
No contesto mensajes privados, las consultas en el foro

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #33 en: 30 de Diciembre de 2011, 18:21:30 »
Ejemplo no creo que encuentres en un datasheet, pero por ejemplo para el CS5461A, en su datasheet encuentras el siguiente esquema:



 :roll: Bastante claro me parece...

Vi esto en la hoja, el tema que el SSPBUF es el mismo para enviar y recibir, segun pienso yo es imposible mandar en el "mismo" SCK, por lo cual o leo o mando, eso entiendo yo. Si yo estoy leyendo en el SSPBUF y al mismo tiempo quiero mandar estaria pisando el dato que estoy recibiendo. Esta mal lo que te estoy diciendo?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #34 en: 30 de Diciembre de 2011, 20:04:52 »
No, no se pisa, sino sería un mal diseño  :mrgreen: Es un registro de desplazamiento, por un "lado" ingresa un bit y por otro sale. Por eso comento que veo poco conocimiento del funcionamiento del microcontrolador.




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

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #35 en: 02 de Enero de 2012, 09:01:11 »
No, no se pisa, sino sería un mal diseño  :mrgreen: Es un registro de desplazamiento, por un "lado" ingresa un bit y por otro sale. Por eso comento que veo poco conocimiento del funcionamiento del microcontrolador.




Saludos!

Lo lei y tambien lei en la hoja de datos que se puede pisar un dato con el otro.  Como no me quedo claro te lo preguntaba, mal yo por preguntar...

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #36 en: 02 de Enero de 2012, 09:25:16 »
Por favor ambos deberían bajar el tono de la conversación, uno que ayuda y otro que es ayudado, ya que de ese modo no avanzaran un solo paso y ambos perderán su propio tiempo... 
Feliz año 2012 !! :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #37 en: 02 de Enero de 2012, 10:29:47 »
No, no se pisa, sino sería un mal diseño  :mrgreen: Es un registro de desplazamiento, por un "lado" ingresa un bit y por otro sale. Por eso comento que veo poco conocimiento del funcionamiento del microcontrolador.

Saludos!

Lo lei y tambien lei en la hoja de datos que se puede pisar un dato con el otro.  Como no me quedo claro te lo preguntaba, mal yo por preguntar...


Se pisa si llega un segundo dato sin leer el anterior, no se pisa el dato que vas a enviar con el que llega... Una mezcla!  :shock:  :D

No contesto mensajes privados, las consultas en el foro

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #38 en: 02 de Enero de 2012, 10:52:06 »
Ok. Vos decis que si mando y recibo el SSPBUF no se pisa.
Voy a probarlo. Gracias por la info. Eso no fue lo que entendi de la hoja de datos.
Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #39 en: 02 de Enero de 2012, 11:57:11 »
La hoja de datos no suele ser tan detallista, es más que nada sentido común. O sea, si SPI es full-duplex no se puede pensar que se pisan los bit que envías con los que recibes  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #40 en: 02 de Enero de 2012, 16:23:31 »
Hola. Yo le agradezco a SUKY la ayuda que me dio y me esta dando.  Estoy acostumbrado a leer la hoja de datos y de ahí codificar. Como no lo pude resolver escribí en el foro.
Me sigue sin quedar muy claro como es que si yo escribo al mismo registro del que recibo como ese dato no se pisa. Según la hoja el dato lo recibe el SSPSR y cuando esta listo va al SSPBUF marcando la FLAG BF. La hoja de datos no dice nada de la transmisión y como funciona.
Yo deduje que si escribo al mismo SSPBUF en el cual recibo, el registro se pisa.
Me sigue sin quedar claro como cumplir con el diagrama de tiempos del CS5463.  yo tengo dos funciones implementadas y probadas SPI_write(char) y SPI_read().
Si quisiera pedirle al CS5463 voltaje yo tendria que mandar el comando 0x18 haciendo SPI_write(0x18) cuando termine esto que debo hacer? El tema es que si hago SPI_read y luego SPI_write no las hago al mismo tiempo. Hasta que no termino una función no llamo a la otra. Como es que tengo que hacer para poder cumplir con los diagramas de tiempo.
Gracias
Adrian

Estas son mis funciones de lee y escribir SPI.

void SPI_write(char data){

   char dummy=0x00;
                         
   SSPIF =0; 
   dummy=SSPBUF;                   
        SSPBUF = data;   
   while(SSPIF == 0){}     
         
}


char SPI_read(void){
   char data;

    while(!BF){};
      data = SSPBUF;
   return data;
}

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #41 en: 02 de Enero de 2012, 16:44:44 »
Si bien el SPI es full duplex, esto solo indica que no debe esperar que se desocupe la linea de transmisión para poder enviar un dato, porque son independientes una de otra.
lo que si va a esperar el integrado del otro lado es que le digas que dato enviar, para poder enviarlo.
para cuando el esclavo transmite su dato vos ya enviaste lo que necesitas recibir, por lo cual sspbuf ya estará vacío o al menos libre para recibir un dato.
Como tu escribes que hace el maestro, tu mismo originas como se produce ese flujo de ida y vuelta, sin encontronazos, por lo tanto no te hagas problemas.

En algunos casos, como conversores AD y otros casos que podria ser el tuyo, hay un comando que se envía por única vez y luego el esclavo transmite con una cadencia determinada el mismo dato continuamente, sin necesidad de volver a pedirlo, luego hay un comando que detiene ese envío, y por supuesto hay que esperar a enviarlo cuando recién termina de recibirse un dato desde el esclavo.
Tampoco en este caso se podrían superponer los datos en tu buffer...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #42 en: 02 de Enero de 2012, 16:57:54 »
El tema es que al escribir en el registro SSPBUF se genera clock para enviar el dato y al mismo tiempo se recibe. Podes verlo como un registro de desplazamiento, por un lado ingresa el bit y por el otro sale.

Por ahí quieres hilar muy fino sin ser necesario, si realizas lo que pide el CD5461 aplicando el concepto de la comunicación SPI, con hacer esto basta:

Código: C
  1. char SPI_read(char DataOut){
  2.       char TempVar = SSPBUF;  
  3.    
  4.       SSPBUF = DataOut;           // Se carga dato a enviar
  5.       while (!SSPSTATbits.BF);    // Se espera que envie y a la vez se recibe
  6.       return ( SSPBUF );             // se retorna lectura
  7. }


Código: C
  1. ValueIRMS.HB= SPI_read(0xFF);
  2.         ValueIRMS.MB= SPI_read(0xFF);
  3.         ValueIRMS.LB= SPI_read(0xFF);


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

Desconectado medidort

  • PIC10
  • *
  • Mensajes: 17
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #43 en: 02 de Enero de 2012, 17:44:50 »
Ok. entonces supongo que como MASTER yo mando utilizando el SSPBUF antes de que el esclavo me mande su dato que ingresa al SSPSR y luego pasa al SSPBUF, es asi?
Gracias a ambos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: (Solucionado) Ayuda con SPI y CS5463
« Respuesta #44 en: 02 de Enero de 2012, 19:48:44 »

1. Se carga valor de salida a SSPBUF.
2. Ese dato se carga en SSPSR.
3. Se generan 8 Clocks, donde se envía dato y se recibe a la vez.
4. El dato recibido se mueve a SSPBUF para ser accedido por el usuario.


Es mas o menos así, para hacer funcionar la comunicación no es necesario tratar de entender esto a fondo, necesitas tener más estudio de electrónica.


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


 

anything