Autor Tema: Problema con spi_write(var)  (Leído 4920 veces)

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

Desconectado mparra

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con spi_write(var)
« Respuesta #15 en: 09 de Septiembre de 2010, 16:49:20 »
Hola to recientemente he tenido varios problemas con la comunicación SPI, hasta el punto de hacer por codigo la transmisión SPI. Estoy programando en C18, y tnego el ICD3. No se exactamente que circuito estas usando, pero todos los chips con protocolo SPI, tienen una frecuencia de funcionamiento máxima, y unos tiempos mínimos para todas las señales de reloj, datos y chip select/load. Cuanto tu mandas los 8 primeros bits, se queda a la espero de los siguientes 8 bit, para completar el total de 16 bit de direccion y de dato, con lo que es en este momento en que se tiene que poner a 1 el chip select, o la carga en este caso, aqui es donde necesita un retraso mínimo desde el envio del bit 0 hasta que se pone a 1 el CS. Lo que pasa que en mi caso estamos hablando de 50 ns. No se si el simulador necesita ese retardo, aunque en al realidad sea imposible de que se produzca. El pic que utilice era el 18F4550 a 48 MHz, con lo que el ciclo por instruccion es 83 ns, y segun el data sheet el tiempo máximo en las transiciones de de 50 ns, con lo que seria imposible que diese error en el proceso de carga.
No se si esto te servirá para algo, pero yo he estado dos semanas perdiendo el tiempo con el SPI, y finalmente el componente que era un driver de 4 dígitos de 7 segmentos estaba roto. Y para colmo en vez de darme los displays en cátodo comun me los suministraron en anodo comun.

Un saludo

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Problema con spi_write(var)
« Respuesta #16 en: 10 de Septiembre de 2010, 00:21:59 »
Epale rugs20!
Mira si le quitas el retardo de 2ms que coloque en mi programa veras que funciona igualmente bien  :mrgreen:
Si el circuito que estas probando es en proteus, como el que te hice, puede ser que no haga falta ese retardo. Ahora bien, en la realidad podria no funcionar, sin colocar un retardo  :? a que se debe eso, a que debes considerar que los circuitos no son ideales es decir que no responden de manera instantanea a cualquier señal de alli que el retardo que se coloca; para darle chance de que el periferico que quieres controlar pueda procesar los datos que tu le envias  :mrgreen:

Espero haberte aclarado un poco mas tus dudas.

Saludos

Desconectado rugs20

  • PIC10
  • *
  • Mensajes: 18
Re: Problema con spi_write(var)
« Respuesta #17 en: 10 de Septiembre de 2010, 11:56:49 »
Hola!!!

A mparra: Segun la hoja de datos del circuito, ese tiempo es de 10ns, pero ese no es el error, todavia no estoy utilizando el circuito, sino simulando en proteus con un spi debugger, ya que es la primera vez que hago esto :oops:

A RALF2: He probado quitando los retardos y funcina perfectamente con tu PIC18. Yo estoy utilizando un pic16f88, he adaptado tu código para este micro y también el circuito de proteus y no funciona. ¿Es al cambiar de micro cuando se produce el error?.... Te dejo el código y el DSN por si quieres verlo....

Código: [Seleccionar]
#include <16f88.h>
#device adc= 10
#use delay (clock= 4000000)
#fuses XT,PUT,NOWDT,NOLVP



void main()
{
   int i;
   
   SETUP_SPI(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
   output_low(pin_B5);
 
   while(true)
   {
      for(i=0;i<16;i++)
      {
          spi_write(i);
          //delay_ms(2);              //Quitando este delay, deja de funcionar con el 16f88
          output_high(pin_B5);
          output_low(pin_B5);
          delay_ms(600);
      }       
   }
}
Gracias


Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Problema con spi_write(var)
« Respuesta #18 en: 10 de Septiembre de 2010, 18:06:44 »
Epale rugs20!
Si tal como indicas da fallas pero eso no es un mal de morirse, recuerda que estas simulando y podria haber un bug por el tipo de pic, pero, deberias probar en fisico a ver que tal funciona  :mrgreen:
En un circuito real debes colocar retardos porque si el micro envia los datos mas rapido de lo que el circuito que se quiere puede responder pues tendras problemas  :P

Saludos

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con spi_write(var)
« Respuesta #19 en: 10 de Septiembre de 2010, 18:19:15 »
  Sí, por tal motivo siempre es conveniente leer el datasheet del periférico que se va a utilizar y así saber que tipos de retardo necesita.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado rugs20

  • PIC10
  • *
  • Mensajes: 18
Re: Problema con spi_write(var)
« Respuesta #20 en: 11 de Septiembre de 2010, 10:38:26 »
hola!

OK, cuando pruebe en en circuito real comentare los resultados a ver que tal.

gracias!!