Autor Tema: Duda con SPI maestro  (Leído 2150 veces)

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

Desconectado lolos123

  • PIC12
  • **
  • Mensajes: 53
Duda con SPI maestro
« en: 22 de Febrero de 2006, 12:51:00 »
Hola como va eso.

Tengo una duda al trabajar con el SPI en modo maestro con un 16f876.Estoy trabajando en ensamblador.

Creo que tengo todo configurado, salidas, frecuencia reloj, flanco,etc..

Quiero sacar varios Bytes, uno después de otro por la salida SD0, ¿como se cuando ha terminado de enviar un Byte para escribirle el siguiente en el SSPBUF?
debo saberlo además porque tengo que activar otras salidas.

¿Puedo calcularlo según la frecuencia de reloj seleccionada en el SSPCON, poniendo un numero determinado de  NOP para esperara que termine y escribir el siguiente Byte?

Bueno no se si ha quedado claro pero en fin, agradezco cualquier comentario.

Gracias por vuestro tiempo.

Desconectado kuauhtemok

  • PIC16
  • ***
  • Mensajes: 116
RE: Duda con SPI maestro
« Respuesta #1 en: 22 de Febrero de 2006, 15:38:00 »

Mira eso es muy facil...
debes vigilar la señal PIR1 del byte SSPIF

Aqui te dejo una subrutina de salida de datos del PIC en SPI maestro.


TRANSMITIR    
   MOVWF SSPBUF             ;COLOCA DATO EN EL BUFFER DE SALIDA
BUCLE
   BTFSS PIR1,SSPIF          ;VERIFICA SI LA TRANSMISION ESTA COMPLETA
   GOTO BUCLE
   BCF PIR1, SSPIF                          ;REGRESO EL PIR1 A SU ESTADO NORMAL
   RETURN
La felicidad no es mas q la ausencia momentanea del dolor

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Duda con SPI maestro
« Respuesta #2 en: 23 de Febrero de 2006, 05:27:00 »
Escrito originalmente por lolos123
Hola como va eso.

Tengo una duda al trabajar con el SPI en modo maestro con un 16f876.Estoy trabajando en ensamblador.

Creo que tengo todo configurado, salidas, frecuencia reloj, flanco,etc..

Quiero sacar varios Bytes, uno después de otro por la salida SD0, ¿como se cuando ha terminado de enviar un Byte para escribirle el siguiente en el SSPBUF?
debo saberlo además porque tengo que activar otras salidas.

¿Puedo calcularlo según la frecuencia de reloj seleccionada en el SSPCON, poniendo un numero determinado de  NOP para esperara que termine y escribir el siguiente Byte?

Bueno no se si ha quedado claro pero en fin, agradezco cualquier comentario.

Gracias por vuestro tiempo.




Todo depende de lo que quieras hacer.
Si tu pretendes "leer" algo del dispositivo SPI, entonces debes hacer como te dijo nuestro amigo kuauhtemok.  El SSPIF indica cuando el master terminó de recibir los 8 bits de respuesta del dispositivo esclavo.  Por supuesto todo esto tiene sentido si tu envias y recibes.

Hay casos en que solo quieres enviar y no te interesa recibir, incluso no conectas dicha pata del PIC.  En estos casos puedes chequear si el buffer de transmisión sigue lleno, para eso te paso un código para los PIC16F.

Codigo:

   movlw   0xAA      ;sacara el dato 0xAA por el SPI
   movwf   SSPBUF
   bsf   STATUS,RP0
   btfss   SSPSTAT,BF   ;registro esta en RamBank1
   goto   $-1
   bcf   STATUS,RP0
   movlw   0xBB      ;sacara el dato 0xBB por el SPI
   movwf   SSPBUF
   bsf   STATUS,RP0
   btfss   SSPSTAT,BF   ;registro esta en RamBank1
   goto   $-1



Con esto enviarás datos sin que haya error de sobreescritura pero sin verificar lo que ingresa por el SSPBUF porque no tienes conectada la recepción.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado lolos123

  • PIC12
  • **
  • Mensajes: 53
RE: Duda con SPI maestro
« Respuesta #3 en: 23 de Febrero de 2006, 16:30:00 »
Muchas gracias por responder.

Efectivamente sólo quiero enviar Bytes, no voy a recibir nada.
maunix ¿que es eso de goto $-1?

Voy a probar ese código a ver que pasa.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Duda con SPI maestro
« Respuesta #4 en: 23 de Febrero de 2006, 20:08:00 »
Escrito originalmente por lolos123
Muchas gracias por responder.

Efectivamente sólo quiero enviar Bytes, no voy a recibir nada.
maunix ¿que es eso de goto $-1?

Voy a probar ese código a ver que pasa.


El goto $-n o $+n  hace un goto n líneas mas arriba o n lineas mas abajo.

Hacer goto $-1 es algo muy comodo cuando quieres chequear un bit flag solo en un momento y no llamaras a dicha rutina desde otro lado.

Por ejemplo
Codigo:

RUTINA:
          btfss   PIR1,RCIF
          goto   RUTINA


es equivalente a
Codigo:

          btfss   PIR1,RCIF
          goto   $-1



ves? me ahorre escribir el label RUTINA.  Es muy util cuando tenes muchos btfss o sentencias similares de bucle y no queres que tengan un nombre de LABEL para no confundir tu software.

Si por ejemplo tuviera

Codigo:

          clrwdt
          btfss   PIR1,RCIF
          goto   $-2



El código iria a la instruccion clrwdt (clear watch dog timer) con lo cual podría estar esperando mucho tiempo la interrupción pero el pic no se resetearía por tiemout del watchdog si es que lo tengo habilitado.

En fin,  es solo un ejemplo espero lo hayas entendido, sino vuelveme a preguntar.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado lolos123

  • PIC12
  • **
  • Mensajes: 53
RE: Duda con SPI maestro
« Respuesta #5 en: 24 de Febrero de 2006, 13:16:00 »
Genial maunix, da gusto ver que hay gente super agradable que se molesta en enseñar a los que no tenemos mucha idea.

Fantástica explicación. Voy a ver si consigo sacar esos Bytes que quiero.

Gracias por tu tiempo.Giño

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Duda con SPI maestro
« Respuesta #6 en: 25 de Febrero de 2006, 07:20:00 »
Escrito originalmente por lolos123
Genial maunix, da gusto ver que hay gente super agradable que se molesta en enseñar a los que no tenemos mucha idea.

Fantástica explicación. Voy a ver si consigo sacar esos Bytes que quiero.

Gracias por tu tiempo.Giño


Gracias y me alegro que hayas entendido.   A veces releo mis posts para revisar si realmente fueron claros o si solo yo me entiendo jeje.  No porque los temas sean complicados sino que a veces es dificil "explicarlos" de manera fácil para quien recien empieza.

Esto no es cosa de genios , simplemente tal vez sabemos "antes" que vos, nada mas.  En tu paso por el foro verás que hay muchos buenos muchachos dispuestos a echar una mano a quien la necesita.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kely

  • PIC10
  • *
  • Mensajes: 1
Re: Duda con SPI maestro
« Respuesta #7 en: 27 de Junio de 2006, 17:37:02 »
hola:
Saludos, yo tambien soy nueva y aprovechando lo que mencionan a mi me interesa sacar la informacion de un dip switch por un display de mi maestro y al mismo tiempo por un display de mi esclavo. Como puedo hacer esto? :-)
Compartir el conocimiento es una forma de ser inmortal.


 

anything