desktop

Modo master en comunicacion SPI

Necesito saber si al micro 16F876 lo utilizo como master en modo SPI, se puede usar el pin RA5 (chip select) como de proposito general (I/O)???.Gracias.- 8)
 
Hola, estube dandole una checada a la hoja de datos y para el modo master no dice nada de ese pin, asi que lo mas probable es que si puedas utilizarlo para otra aplicacion, tendrias que hacer pruebas.
 
lacth dijo:
Necesito saber si al micro 16F876 lo utilizo como master en modo SPI, se puede usar el pin RA5 (chip select) como de proposito general (I/O)???.Gracias.- 8)

Es un tema viejo pero para dejarlo como 'historial' en el foro.

Si utilizas el modo SPI del MASTER, el pin RA5 pasa a ser de propósito general. Lo puedes usar como entrada/salida.

Si utilizas el SPI SLAVE mode, entonces, ese pin hará que tu pic 'reciba/transmita' datos cuando el pin esté en bajo y deje de recibir al ponerse en alto.

Estando en modo master, si el pin RA5 está como entrada no afectará que esté en BAJO o ALTO, el pic transmitirá de acuerdo a lo que el software le vaya diciendo .
 
hola que tal estoy haciendo un programa en assembler donde comunico dos esclavos con un pic master, quien sabe como configurar los bit sspcon<3:0> para cada pic
 
todos son pic 16f877 ya termine el programa pero de un master a un esclavo , ahora quiero enviar información distinta 2 los 2 eclavos no se como configurar el chip/select para seleccinar un esclavo a la vez
 
Bien. Para mandar información desde el pic maestro hasta los esclavos lo más sencillo es usar las entradas SS (slave select, selección de esclavo) de los pics esclavos.

Estoy pensando en una conexión física como la que adjunto en la imagen.

El pic maestro puede usar dos salidas cualesquiera para activar (*) las líneas de esclavo.
Entonces para mandar(recibir) un byte a(de) unos de los esclavos se activa la línea de esclavo correspondiente, se carga el dato en SSPBUF y al cargarlo se transmite automáticamente (si el módulo habilitado claro: SSPEN=1).

Por el lado del esclavo, tiene que tener el módulo habilitado y configurado en modo esclavo (con el control por el pin SS habilitado). Uno no tiene que hacer nada en especial para recibir, ni bien el maestro manda el dato automáticamente guarda los datos en SSPBUF a la par que envía al maestro el contenido previamente cargado en ese registro. No está muy claro, ¿no?.

A ver si lo puedo explicar mejor...
Antes de que el maestro inicie la transmisión el esclavo debe tener escrito en SSPBUF (llamemoslo SSPBUF_e la e por esclavo) el valor a enviar. Por ejemplo supongamos que enviamos un valor 0xF0.
Luego el maestro inicio la transmisión escribiendo en su propio SSPBUF (SSPBUF_m), digamos que escribe 0X1A.
Entonces al final de la transmisión será SSPBUF_e=0x1A y SSPBUF_m = 0xF0.

Luego de la transferencia el maestro debe leer el valor que recibió en SSPBUF y copiarlo a la memoria ram (en una variable cualquiera) para no destruir el valor que recibió.
Idénticamente para el esclavo.

Ambos PIC's pueden darse cuenta de que finalizó la transmisión testeando el bit SSPIF (o se puede hacer automáticamente usando interrupciones).

Bueno, entonces volviendo a tu pregunta, se pueden usar dos salidas cualesquiera del pic maestro para manejar las lineas de esclavo de los dos esclavos.

Saludos.
-----------------------------------------------
(*): con activar me refiero a poner en 0 la salida del maestro. Cuidado!, nunca poner 0 en ambas salidas de selección de esclavo a la vez, sino los dos esclavos van a intentar usar la línea de transmisión hacia el maestro al mismo tiempo y se puede hacer un corto.
 

Adjuntos

  • spi_1_maestro_2_esclavos_121.gif
    spi_1_maestro_2_esclavos_121.gif
    65.2 KB · Visitas: 217
ok gracias por responder, lo estoy haciendo de esta manera , estoy testeando un bit donde esta conectado un pulsador cuando hay 1 envio al esclavo 1 y cuando hay o envio al esclavo 2....las subrutinas de envios para cada esclavo comienzan colocando a cero la linea que va conectanda al pin ra5 del esclavo que va a recibir y a uno la otra ...osea es algo asi
bsf ptox,x y el esclavo que va a recibir es bcf ptox,x pero no me esta funcionando
 
Si el esclavo tiene habilitado el control por la línea SS, en el esclavo no es necesario ejecutar ninguna instrucción para empezar a recibir (siempre que el módulo spi esté habilitado y configurado correctamente).
¿Como configuraste los esclavos? (valores de los registros correspondientes)
 
Conviene que no enciendas el módulo hasta que lo tengas configurado, es decir, hacer primero

movlw b'00010100'; todavía no enciendo el módulo (SPEN=0)
movwf sspcon
movlw b'00000000'
movwf sspstat
bsf SSPCON, SPEN; ahora sí que está todo configurado enciendo el módulo

Otro motivo por el cual puede fallar es que no tengas los registros TRIS bien configurados:
  • pata SDI como entrada
  • pata SDO como salida
  • pata de reloj como entrada si es esclavo, y como salida si es maestro
  • pata SS como entrada si es esclavo, cuidado también hay que ver los registros del CAD para que este trabajando como pata digital y no analógica
A ver como te va...
 
que tal ardogan gracias a dios ya me dio la comunicacion spi . tus respuestas fueron de mucha ayuda ,ahora tengo que hacer lo mismo pero via i2c ...tengo algunas dudas de como guardar la direccion de cada esclavo esta tiene que ser de 7bits con que me puedes ayudar sera que tienes algunas subrutinas por ahi
 
Ja, ahi vas muerto porque nunca trabaje con i2c.
Igualmente, en tu lugar lo primero que haría sería ver que librerías hay disponibles (hay para asm, para C, no deberías tener problemas) y ver algún ejemplo de uso.
Saludos
 
que tal ardogan, una pregunta con respecto a spi ...necesito hacer un circuito que me permita seleccionar un esclavo a la vez con que me puedes ayudar...gracias
 
estoy pensando colocar un pic 16f84 que envia por un pin el 0 para el esclavo seleccionado y un 1 para los demas que me dices .. si tienes otra cosa mejor
te lo agradeceria
 
La selección de esclavos si o sí la debe manejar el maestro spi.

Pueden ser una línea del pic maestro para cada esclavo (sería el esquema que puse arriba). Es lo más fácil, hay que tener cuidado en el programa del PIC de poner a 0 solo una salida de selección de esclavo a la vez.

Con una sola línea de maestro por cada dos esclavos: (si en el circuito hay una compuerta inversora libre) usar una compuerta not, o nand, o nor. Si no hay un chip con compuertas lógicas para ocupar menos espacio se puede usar un transistor y un par de resistencias. Incluso se puede hacer el negador con un operacional en modo comparador con histéresis, o con un comparador analógico.

Con n líneas de maestro para 2^n esclavos: usar un demultiplexor, o un decodificador.

En fin, formas hay las que quieras. Dependerá de cuantos esclavos haya, que patas disponibles tenga el maestro, y que componentes se usan en el resto del circuito (por si quedan recursos sin usar se pueden utilizar para esto).
 
Atrás
Arriba