Autor Tema: Ejemplo Simulación del módulo spi  (Leído 62292 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ejemplo Simulación del módulo spi
« Respuesta #30 en: 08 de Septiembre de 2011, 20:18:06 »
Gracias por las respuestas, me esta sirviendo muchisimo.
Finalmente voy a ir probando en el micro ya que no puedo
simularlo.
Para conectarlo fisicamente, a que pines del pic 16F877A
debo conectar cada uno de estos pines de mi dispositivo?

DOUT
SCLK
CS
DIN
IRQ

CS e IRQ son negados.

Saludos !!



DOUT (dispositivo)  -------------- SDI (pic)
DIN    (dispositivo) --------------- SDO (pic)
SCLK  (dispositivo) --------------- SCK (pic)

  Para CS podés usar cualquier pin que te quede cómodo..

  Por lo que leí del datasheet del dispositivo, IRQ es una salida que se activa cuando ocurren ciertos procesos. Sí querés hacer uso de esa funcionalidad podrías conectarla al pin B0, ya que este es el de interrupción externa. Si no te interesa tener esa funcionalidad, podrías obviar el conexionado.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #31 en: 08 de Septiembre de 2011, 21:46:54 »
Gracias por la info !!
La semana que viene me voy a poner de cabeza con todo esto
y les cuento como me fue

Saludos a todos y gracias nuevamente por sus aportes
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #32 en: 17 de Octubre de 2011, 20:25:16 »
Gente, para los que probaron.. Tengo algunas preguntas..
Que tiempo debe esperar el integrado desde que envía un spi_write
hasta que realiza un spi_read ??

Que tiempo debe pasar desde que lee un dato hasta que pide otro dato
de otro registro ??

Estoy haciendo las pruebas y por el momento no leo demasiado...

A proposito, el pin CS e IRQ no lo estoy utilizando.. Debería usarlo ?

Saludos a todos !!
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ejemplo Simulación del módulo spi
« Respuesta #33 en: 17 de Octubre de 2011, 20:28:44 »
El pin CS sí, porque sino ¿Cómo haces para indicarle al dispositivo el comienzo y/o fin de la secuencia de lectura/escritura?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #34 en: 17 de Octubre de 2011, 20:52:44 »
Eso no estaba entendiendo del todo como hacerlo..
Supuestamente, el pin CS debo ponerlo en "0" cuando leo,
cuando escribo, o siempre ??

A lo que tengo entendido, apenas comienzo el programa del micro
debe estar en "1", para que unos instantes antes de hacer el spi_write
debo bajar el CS a "0". Luego de hacer el spi_read vuelvo el CS a "1".
Y asi cada vez que quiera leer un dato.

Esta bien el análisis que estoy haciendo, o lo estoy mal interpretando ??

Saludos y gracias a todos por su ayuda
« Última modificación: 17 de Octubre de 2011, 21:26:42 por Simon21 »
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ejemplo Simulación del módulo spi
« Respuesta #35 en: 17 de Octubre de 2011, 22:03:17 »
  Tiene que permanecer normalmente en 1. Cuando querés trabajar con el bus spi tiene que bajar a 0 y una vez terminado de trabajar volver a 1. Eso es válido tanto para operaciones de escritura como para operaciones de lectura.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #36 en: 17 de Octubre de 2011, 22:07:25 »
Tal cual, pero a lo que voy..
Por ejemplo..
Necesito leer el dato de 2 registros distintos
sigo los siguientes pasos

- Arranco con el CS en 1
- Delay
- CS= 0
- Delay
- spi_write (valor del registro que voy a leer)
- Delay
- variable= spi_read ()
- CS=1
- Delay
- CS=0
- delay
- spi_write (valor del registro que voy a leer)
- delay
- variable2= spi_read ()
..........
........
........
.......

¿¿ Es correcto este análisis ??
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ejemplo Simulación del módulo spi
« Respuesta #37 en: 17 de Octubre de 2011, 22:16:57 »
Tal cual, pero a lo que voy..
Por ejemplo..
Necesito leer el dato de 2 registros distintos
sigo los siguientes pasos

- Arranco con el CS en 1
- Delay
- CS= 0
- Delay
- spi_write (valor del registro que voy a leer)
- Delay
- variable= spi_read ()
- CS=1
- Delay
- CS=0
- delay
- spi_write (valor del registro que voy a leer)
- delay
- variable2= spi_read ()
..........
........
........
.......

¿¿ Es correcto este análisis ??

  A simple vista la forma puede llegar a ser correcta... pero para eso tenés que ver bien el datasheet del dispositivo que quieras manejar.  Los delay no creo que sean necesarios pero como dije, hay que ver bien el datasheet del dispositivo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Ejemplo Simulación del módulo spi
« Respuesta #38 en: 18 de Octubre de 2011, 12:36:57 »
Saludos

Lo que se tiene que tener en cuenta no es tanto los retardos, si no el tiempo que demora en responder el dispositivo conectado al bus SPI (afirmátivamente o en caso contrario un error), por lo tanto, el dispositivo puede responder en cualquier momento (en el intervalo) y es deber del programador detectar las respuesta del dispositivo. Si te fijas en el ejemplo de la microsd hay una parte del la función que realiza este procedimiento.  
Un saludo desde Pereira - Colombia

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #39 en: 18 de Octubre de 2011, 15:15:19 »
Gracias Chenao por tu ayuda..
Podrias explicar un poco mejor esto ??
Seguramente por ahi debe venir mi error ya
que el micro lee cualquier valor del dispositivo.

Saludos
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Ejemplo Simulación del módulo spi
« Respuesta #40 en: 19 de Octubre de 2011, 13:05:36 »
Hola Simon21

Claro que sí, esa es la idea del foro 8). Mira el siguiente código el cual pertenece a parte de algoritmo para inicializar una microsd.

Código: [Seleccionar]
do
      {
        SPI_WRITE(0x41);         // Envia comando hasta que de la respuesta y hasta que se cumpla el tiempo
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);            // Secuencia del comando CMD1
        i= i + 1;
      }
    while((i<250) && (mmc_respuesta(0x00)==0x01));
    if(i>=250)
      {
        return 1;                // si se supera el tiempo de respuesta no se ha inicializado bien la targeta
      }

Nota como el micro envia el comando y espera a que la memoria responda, si responde en el intervalo con 0 la memoria responde acertadatamente, en caso contrario si el tiempo de respuesta es muy prolongado hubo un error y por lo tanto retorna un 1. Fijate como el programa pregunta una y otra vez (durante 250 veces) si la memoria respondio acertadamente.
Un saludo desde Pereira - Colombia

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #41 en: 20 de Octubre de 2011, 19:06:02 »
Paso a comentarles lo que estuve haciendo..
La idea en este caso es escribir el valor en un registro y luego leer dicho valor..
Como verán en la imagen adjunta, el primer bit indica si voy a escribir o si voy a leer.
y a continuación leo o escribo.

Mi problema es que no estoy leyendo nada..

Agradecería si alguien pudiera darme una mano ya que seguramente es una pavada
y no me estoy dando cuenta.

El código que pongo a continuación es bastante simple, le envío al registro de lectura/escritura
el valor de count y luego intento leerlo. Una vez leído lo imprimo en el lcd.

El problema es que no estoy leyendo nada.. Ya que si leyera algo, debería mostrar el mismo
valor ambas lineas en el lcd.

Saludos y gracias por su ayuda

------------------------------------------------------------------------------------------------------

void main()
{
  lcd_init();
  delay_ms(100);
  lcd_putc('\f');
 
  int test, cont=0;
 
  set_tris_c(16);                                                         // Configuración del puerto C para trabajar el spi
  setup_spi(spi_master | spi_l_to_h | spi_clk_div_16);   
   
  do
   {
       
     cont++;
     
     spi_write(0x9D); // 1001 1101 Escribo a la direccion 1D (El primer 1 indica que se va a escribir)
     delay_us(10);
     spi_write(cont);
     delay_us(20);
     

     spi_write(0x1D); // 0001 1101 Escribo a la direccion 1D (El primer 0 indica que se va a leer)
     delay_us(10);
     test = spi_read();  // Leo el valor del registro
     
     lcd_gotoxy(1,1);
     printf(lcd_putc, "Contador: %d", cont);   // Imprimo el valor de count

     lcd_gotoxy(1,3);
     printf(lcd_putc, "Test contador: %d", test); // Imprimo el valor del registro

     delay_ms(500);       // Espero 500 ms para poder visualizar

     lcd_putc('\f');           // Limpio la pantalla
     
   }
  while(true);
}
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplo Simulación del módulo spi
« Respuesta #42 en: 20 de Octubre de 2011, 19:09:26 »
Consulta, que modo SPI es el dispositivo y que modo estas configurando?
No contesto mensajes privados, las consultas en el foro

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Ejemplo Simulación del módulo spi
« Respuesta #43 en: 20 de Octubre de 2011, 19:10:36 »
Estoy trabajando con el ADE7758 http://www.analog.com/static/imported-files/data_sheets/ADE7758.pdf
el mismo trabaja en modo ESCLAVO, por lo que el micro es el MASTER.

Saludos
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplo Simulación del módulo spi
« Respuesta #44 en: 20 de Octubre de 2011, 19:12:22 »
No me refiero a eso, sino Modo 00, 01, 10 o 11. En cualquier dispositivo SPI primero hay que establecer eso, luego la frecuencia máxima que acepta, etc...
No contesto mensajes privados, las consultas en el foro


 

anything