Autor Tema: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?  (Leído 3297 veces)

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

Desconectado urielm80

  • PIC10
  • *
  • Mensajes: 30
¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« en: 18 de Febrero de 2014, 02:50:07 »
Hola, buenas tardes, estoy desarrollando un proyecto con un pic18f4550 y necesito conectar un reloj de tiempo real (DS1307) y conectar un modulo de radio frecuencia (nRF24L01), el problema esta en que ambos comparten algunos pines que segun he leido no es posible mover, por ejemplo en el modulo de redio frecuencia el MISO, MOSI, SCK y IRQ nos e pueden mover de los pines RB0, RC7, RB1 y RB2  respectivamente y el reloj en tiempo real necesita utilizar el SDA y SCL en los pines RB0 y RB1 pero dichos pines ya se encuentran ocupados.

¿Que puedo hacer para conectar ambos al pic?
« Última modificación: 18 de Febrero de 2014, 15:31:30 por urielm80 »

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: ¿Como conecto 2 dispositivos SPI en un mismo pic?
« Respuesta #1 en: 18 de Febrero de 2014, 03:47:42 »
No son SPI los dos dispositivos, el nRF24L01 es SPI pero el DS1307 es I2C, en el pic no puedes utilizar los dos modos simultaneamente.

Podrías intentar utilizar otro pin o el mismo pin de enable del nRF24L01 y algunos transistores para inhibir el clock del DS1307 a modo de enable y configurar el MSSP como I2C cuando te quieras comunicar con el DS1307 y configurarlo como SPI cuando quieras comunicarte con el nRF24L01, pero se si alguien lo ha hecho o si se puede hacer. Si se me ocurre algo te digo.

Sino vas a tener que implementar un SPI o un I2C por software, creo que es mas fácil el SPI.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7863
Re: ¿Como conecto 2 dispositivos SPI en un mismo pic?
« Respuesta #2 en: 18 de Febrero de 2014, 08:12:01 »
Puedes hacer el I2C por software, y usar otros pines que no sean los de hardware... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado urielm80

  • PIC10
  • *
  • Mensajes: 30
Re: ¿Como conecto 2 dispositivos SPI en un mismo pic?
« Respuesta #3 en: 18 de Febrero de 2014, 14:58:53 »
Hola, primero que nada gracias por sus respuestas

diguito_69 tienes razon, uno es por i2c y el otro por spi
MGLSOFT, alguna vez has implementado el i2c por software??

navegando un poco me encontre con una implementacion de I2c Virtual, pero aun tengo algunas dudas ya que segun esto tiene 2 i2c y solo 1 es fisico y el otro virtual, mi duda es, para utilizar en otros pines hago esta configuracion pero elimino la que utiliza los pines que destinare al spi??, ademas con solo indicar
#use i2c(MASTER,SDA=PIN_B1,SCL=PIN_B0,STREAM=I2C2)
con eso ya funciona el i2c en ese puerto??

y por ultimo puedo utilizar cualquier puerto o debe ser un puerto analogico? y en cualquier caso como debo configurarlo, como entrada o como salida??

Multiple I2C Virtual
Al igual que el puerto serial se puede utilizar el comando STREAM para definir el nombre de los puertos.
Comúnmente para un solo puerto configuramos el mismo de la siguiente forma:

#use i2c(MASTER,SDA=PIN_C1,SCL=PIN_C0)

De esta forma se define el protocolo, puertos, etc...
Luego se procederá a enviar o recibir el dato por i2c por ejemplo:

i2c_start();
i2c_write(DATO);
i2c_write(DATO);
i2c_write(DATO);
i2c_stop();

Donde iniciamos el protocolo tras la función i2c_start(); y luego escribimos los byte correspondientes según necesite el dispositivo a comandar mediante la función i2c_write(); y luego se procede a cerrar el protocolo con la función i2c_stop();.

Si quisiéramos incluir otro puerto i2c en el microcontrolador deberíamos utilizar el comando STREAM el cuál nos indicara una etiqueta para la configuración del puerto y esta misma será la que utilizamos para diferenciar entre un protocolo o el otro.

#use i2c(MASTER,SDA=PIN_C1,SCL=PIN_C0,STREAM=I2C1)
#use i2c(MASTER,SDA=PIN_B1,SCL=PIN_B0,STREAM=I2C2)

Donde podemos ver que en el primer puerto será STREAM=I2C1 y el segundo puerto será STREAM=I2C2. El comando dentro de las funciones start, write y stop quedara de la siguiente forma.

i2c_start(I2C1);
i2c_write(I2C1,DATO);
i2c_write(I2C1,DATO);
i2c_write(I2C1,DATO);
i2c_stop(I2C1);

i2c_start(I2C2);
i2c_write(I2C2,DATO);
i2c_write(I2C2,DATO);
i2c_write(I2C2,DATO);
i2c_stop(I2C2);

Tener en cuenta que el protocolo I2C del MCU por Hardware será uno solo, esta forma de crear puertos es netamente virtual por ende los tiempos del procesador será más lento, es recomendable para procesadores de gama media alta.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7863
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #4 en: 18 de Febrero de 2014, 15:52:39 »
Usaras un PIC18F4550, por lo que dices en el primer post, asi que no tendras problemas.

Veo que has hecho los deberes y ya encontraste tu respuesta.
Felicitaciones !!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7863
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #5 en: 18 de Febrero de 2014, 15:58:08 »
Cuidado con usar I2C1 e I2C2, son palabras reservadas que marcan justamente dos puertos de hardware I2C

Citar
I2C1
 Instead of SCL= and SDA= this sets the pins to the first module
 
I2C2

 
 Instead of SCL= and SDA= this sets the pins to the second module
 

Mejor usa algo como Port_I2C1 y Port_I2C2...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado urielm80

  • PIC10
  • *
  • Mensajes: 30
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #6 en: 18 de Febrero de 2014, 16:12:06 »
Cuidado con usar I2C1 e I2C2, son palabras reservadas que marcan justamente dos puertos de hardware I2C

Citar
I2C1
 Instead of SCL= and SDA= this sets the pins to the first module
 
I2C2

 
 Instead of SCL= and SDA= this sets the pins to the second module
 

Mejor usa algo como Port_I2C1 y Port_I2C2...
MGLSOFT, gracias por tu comentario, según entiendo para evitar futuros problemas o confusiones recomiendas que cambie #use i2c(MASTER,SDA=PIN_B1,SCL=PIN_B0,STREAM=I2C2) por #use i2c(MASTER,SDA=PIN_B1,SCL=PIN_B0,STREAM=Port1_I2C y hacer lo mismo para el otro puerto , donde Port1_I2C es una etiqueta que yo defina y asi no usar palabras reservadas por el compilador cierto?

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7863
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #7 en: 18 de Febrero de 2014, 17:08:08 »
Asi es... ;-) ;-)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado urielm80

  • PIC10
  • *
  • Mensajes: 30
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #8 en: 18 de Febrero de 2014, 17:46:48 »
Asi es... ;-) ;-)

Muchas gracias por la ayuda, lo probare el fin de semana y les comento que paso

Desconectado urielm80

  • PIC10
  • *
  • Mensajes: 30
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #9 en: 19 de Febrero de 2014, 03:34:30 »
Buenas noches, les comento que hoy alcance a realizar la prueba en proteus y funciono el cambio de maravilla, lo coloque en RA0 y RA1 configurando I2C por software y mi proyecto funciono como si los tuviera en el puerto I2C por hardware, gracias, despues creare un tema con mi proyecto terminado para ocmpartirlo con todo el foro y les pueda servir.

Saludos  :-/ :-/ ((:-))

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7863
Re: ¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #10 en: 19 de Febrero de 2014, 08:14:03 »
Esa es la magia del CCS, que te permite llegar rapido a buen puerto.  ((:-)) ((:-))

Despues tiene otras cosillas que todo el mundo se queja... :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado SEMICONDUCTORMAN

  • PIC10
  • *
  • Mensajes: 1
Re:¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #11 en: 29 de Junio de 2020, 09:16:59 »
Buen dia, ya que se esta tomando el tema de trasladar los puertos i2c, es posible hacerlo tambien con los SPI?, tengo un proyecto que incluye un teclado 4x4 y estoy usando la libreria KBD4x4 en un PIC 18F4550 pero ya se ocupa el puerto B donde estan los SPI y requiero monitorear una termocupla con un MAX 6675,  Quedo atento a sus consejos, gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7741
Re:¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #12 en: 29 de Junio de 2020, 09:31:58 »
Mover los pines de I2C o SPI o cualquier modulo a otro pin que NO es un pin de hardware, implica que tenes que hacerlo por software, es decir un programa que espere el tiempo, lea el bit, etc.

Si es posible, pero tambien depende de tu aplicacion, si podes o no dedicarle ese tiempo.

Lo bueno de CCS es que si elegis pines que no son de hardware, auntomaticamente te incorpora la libreria, en otros compiladores necesitas la libreria.
« Última modificación: 29 de Junio de 2020, 09:38:04 por KILLERJC »

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 188
Re:¿Como conecto 2 dispositivos, un SPI y un I2C en un mismo pic?
« Respuesta #13 en: 29 de Junio de 2020, 16:37:39 »
y porque no usas una libreria de teclado "flexible" que te permita conectarla a cualquier pin del micro....    y si no existe pues la haces,  no es dificil,  aqui te ayudamos.
Y podrias dejar tranquilo esos spi i2c por hardware,  que asi son muy útiles....