TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: rage78 en 13 de Marzo de 2010, 08:00:26
-
Hola compañeros.
Estoy intentando descifrar un poco como establecer una comunicación SPI entre mi microcontrolador (PIC18F6622) y un chip de RFID.
Os expongo mis dudas respeto a la funcionalidad de determinados bits de registro, para ver si alguien puede prender luz a mis penumbras.
REGISTRO SSPxSTAT
Bit7: SMP
SMP=1: Los datos se muestran al final del tiempo de salida
SMP=0: Los datos se muestran a la mitad del tiempo de salida
Pregunta: ¿Que diferencia a nivel pràctico existe entre una u otra opción?
Bit6: CKE
Entiendo que en combinación del bit CKP (registro SSPxCON1) conseguimos 4 modos de funcionamiento. Lo que no tengo muy claro es cual de esos 4 modos
es el que más me beneficia.
Debo decir que el chip con el que me comunico tiene como condición de inicialización para que pueda escribir en él, que:
- Se produzca una transición LOW_to_HIGH en la línea DIN(entrada de datos) del chip mientras la senyal SCLK(reloj) está a nivel HIGH
Nota: LOW=0 HIGH=1
- Mirando el cronograma (modo master) creo que el modo 00 es el que necesito, donde se transmite en el flanco de subida del clock, siendo nivel idle=0.
Esto veo que también va relacionado con el bit SMP (concepto que aún no entiendo su función).
Pregunta: ¿Estoy equivocado en lo expuesto?
REGISTRO SSPxCON1
Bit7: WC
Sirve para indicar si se intenta escribir sobre el buffer cuando este aún está transmitiendo el byte anterior
Pregunta1: ¿Debo entenden que mi función debe controlar dicho bit, antes de transmitir cualquier dato?
Pregunta2: ¿Que funcionalidad puede tener el hecho de poder borrar dicho bit?
Bit3-0: SSPM
Teniendo claro que quiero usar el modo Master y que he escogido un cristal de 16 MHz para el PIC.
Pregunta: ¿De los modos posibles, en que me fijo para decantarme por uno u otro modo? Está claro que cuanto menor sea T mayor tasa de información, pero
me gustaría saber que influencias negativas me pueden reportar.
- TMR2 output/2
- Fosc/64 --> 4us
- Fosc/16 --> 1us
- Fosc/4 --> 250ns
Muchas gracias por todo.
Saludos!
-
Hola ,
SMP permite seleccionar la modalidad de muestra de tu modulo SPI hay aparatos que transmiten con muestra central sincronizados con el medio periodo y otros sincronizados con el inicio del periodo
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=29846.0;attach=11441)
CKE por lo mismo de que hay diferente tipos de hardware puedes alinear tu transmisión con la descrita da el fabricante del modulo con que quieres comunicarte
esto no influye en las prestaciones de tu comunicación
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=29846.0;attach=11439)
el WC es otra cosa jejej
ya se a que te refieres WC o bit de colisión sirve porque para evitar sobrescribir datos en el buffer, como el mismo datasheet de dice borras los datos en el buffer antes de escribir otro o limpiar después de escribir lo dos métodos son validos
aqui un ejemplo de escritura
//8bits method with flush buffer
#define writeXSFHSPI(x) \
FLASH_SSPBUF = x; \ //pones el dato en el buffer
while(!FLASH_SPI_IF); \ //esperas que acabe
DummyMaster = FLASH_SSPBUF; \ //limpias el buffer
FLASH_SPI_IF = 0; //limpias el flag
por lo de la frequencia deberias ver en el datasheet de tu modulo haber que velocidad suporta y tu te adeguas a ella el hecho que tu eres master
no quiere decir que todo el hardware que conectes puede ir a tu velocidad hay unos limites dectados del tipo de hardware CMOS , TTL ,74LS ,etc.
saludos.
-
Gracias micronoob.
Hoy he estado mirando información sobre el chip que tengo que controlar y en un foro en concreto he visto que no se controla con una comunicación serie específica como es la SPI.
Al tener las siguientes líneas pensé que se podía hacer con SPI
SCLK Clock
DIN Data Input
DOUT Data Output
Pero por lo visto, debo controlar yo mismo las comunicaciones pues no utiliza un estandard de comunicaciones serie
Link donde encontré la información (http://www.edaboard.com/viewtopic.php?p=1248257#1248257)
Por lo que he leído en el datasheet del chip, tengo que sincronizar el clock del oscilador, con el envio de datos.
¿Esto puedo hacerlo con alguna de las opciones disponibles en el PIC? Entiendo que la idea sería enviar tramas de bits, justo en el momento en que el clock está a nivel alto.
Te paso la información del datasheet, por si te puede servir de referencia.
The communication between the HTRC110 and the microcontroller is done via a three wire digital
interface. The interface is operated by the following signals:
SCLK Clock
DIN Data Input
DOUT
Data Output
SCLK and DIN are realized as Schmitt-Trigger inputs. DOUT is an open drain output with internal
pullup resistor.
Every communication between HTRC110 and microcontroller begins with an initialization of the
serial interface. The interface initialization condition is a low-to-high transition of the signal DIN
while SCLK is high.
(http://www.imaxenes.com/mini/crono1xo63pb.jpg) (http://www.imaxenes.com/imagen/crono1xo63pb.jpg.html)
-
Creo que tendrás que escribirte una librería propia
De todos modos mira a ver cómo fucniona la UART de un PIC en modo sincrónico (no el modo para implementar RS232 sino el otro). Es posible que te sirva, lástima que tendrías que sacrificar la UART para eso. Yo que tú me escribo mi librería y listo, total no es un protocolo complicado.
Saludos
Reinier
-
Creo que tendrás que escribirte una librería propia
De todos modos mira a ver cómo fucniona la UART de un PIC en modo sincrónico (no el modo para implementar RS232 sino el otro). Es posible que te sirva, lástima que tendrías que sacrificar la UART para eso. Yo que tú me escribo mi librería y listo, total no es un protocolo complicado.
Saludos
Reinier
Voy a mirarme lo que me has comentado a ver que tal sale.
Muchas gracias por la ayuda Reinier.
Saludos
-
Una consulta aparte: Es posible utilizar en simultáneo la USART y la SPI en un pic 16f877a?
Qué pic puede funcionar con las dos?
Desde ya muchas gracias
horval
-
Hola horval, si los dos perifericos pueden trabajar juntos en el PIC16F877A, a excepcion de los PICs con USB com el PIC18F4550 creo que todos los que tienen SPI y USART pueden hacerlos funcionar al mismo tiempo.
Saludos
-
Efectivamente, mientras las señales TX/RX y SCK/SDO/SDI no se pisen se pueden usar a la vez.