TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: isfan en 09 de Noviembre de 2014, 19:26:20
-
Hola buenas. Tengo que comunicar 2 microcontroladores entre ellos, en una única dirección(uno envía y otro recibe datos) y se me abrern 3 dudas.
1.cual protocolo de comunicaciónme recomendáis para la comunicación? SPI, UART o I2C
2. En este proyecto también incluye una EEPROM externa y un modulo bluetooth (hc06), que también tengo que comunicarlo x algún protocolo hacia el pic, esto significa que me quedare sin las lineas de comunicación para abastecer a todos los elementos externos? Cual solución seria?
3.algún tipo de incompatilidad en comunicaciones con diferentes familias tanto, 8, 16 o 32 bits
Muchas gracias x la atencion.
-
1- Depende de la distancia entre micros, si estan en una misma placa o en un rango corto mi decisión personal seria la de usar SPI. Pero tambien podes usar I2C todo depende de la cantidad y velocidad de datos. Lo digo por que algunos micros soportan I2C como maximo de 400Khz, y algunos otros hasta 1Mhz con algunas consideraciones.
2- No deberias, por ejemplo el modulo bluetooth usa UART, y la EEPROM depende de que bus use (algunos micros PIC16F tienen 2 SPI,2 USART, 2 I2C ) puede ser una con I2C si no te restringe mucho la velocidad, es necesario una EEPROM externa o un micro con EEPROM bastaria? ( Acordate que con I2C podes colgar varios dispositivos de los mismos hilos, con un I2C podes manejar varios modulos externos )
3- Los protocolos son esos, por lo cual no van a cambiar de 8 a 16 o 32 bits y mas si usas de la misma empresa, lo que si puede variar la velocidad de ambos dispositivos, con lo cual la velocidad mas lenta va a predominar.
-
Muchas gracias KILLERJC.
Mirando la especificaciones con el micro que voy a trabajar el PIC24FJ64GB002 veo que dispone de 2 módulo SPI, la cual no logro averiguar cual corresponde estos pines, que estan mutiplexado en la mayoria de ellos con diferentes funciones. Haber si alguien me podria decir con que 4 pinouts trabaja el SPI del 24FJ64GB002
Pense que eran los pines como TDI,TCO, TDO y TMS pero en la descripción de la hoja de datos pone que es para Jtag.
Hoja de datos del 24Fj64GB002/4 -> http://www.microchip.com.tw/Data_CD/Datasheet/16-Bits/39940C.pdf
En otros esquemas salia perfectamente identificado con otros modelos de PIC
Tambien otra cuestión he visto en varios Esquemas una resistencia de varios Ko en la Linea TX y en otros no.
Sabe para que se usa esta resistencia? y si es opcional?
Creo que es por si un Micro esta trabajando a 5V, y va a conectar con otro devices que trabaje a 3.3V necesita esta resistencia en la LInea TX? o solo con aislar la alimentacion VCC sobra?
Un saludo.
-
No puedo abrir el link que me pasaste pero busque el datasheet de esa familia y:
The SPI serial interface consists of four pins:
• SDIx: Serial Data Input
• SDOx: Serial Data Output
• SCKx: Shift Clock Input or Output
• SSx: Active-Low Slave Select or Frame
Synchronization I/O Pulse
Tiene en este caso que microchip le llama pines mapeables.
Cuando tiene esa clase de mapeo, directamente los resumen en RPn a esos pines. En la seccion de I/O vas a ver tanto las entradas como las salidas
-
OK, no sabia que usaban ese nombre generico.
He estado investigando un poco sobre hacer una conexion SPI con 2 dispositivo con diferentes voltajes (uno de 3.3V y otro de 5V)
La conclución es directamente conectar los dispositivos entre sí se sobrecargue el dispositivo de 3.3V y eventualmente conducir a fallo del dispositivo.
Para solucionar esto hay 2 opciones:
1º Opcion metodo mas sencillo poner una resistencia en Serie (Se pondra una resistencia de 10Kohm Siempre que la comunicación sea 5V --->3.3V No debería ser necesario ningún circuito entre estas líneas para conectar con el dispositivo de 5V)
2º Opcion metodo Diodo
Este método se considera una solución "más seguro" que la resistencia de línea. Este método funcionará independientemente de si el dispositivo de 3.3V ha de sujeción diodos o no.
PD: la linea CS (Chip Select va siempre directamente sin resistencias para evitar conflictos)
-
Mas que por diferentes voltajes esas resistencias estan para limitar la corriente, y de donde lo sacaste presupone que tiene unos diodos clamping el dispositivo de 3.3V
O usas pines con tolerancia a 5V xD
-
Bueno la cuestión es que Mi dispositivo Master (24fj64gb002) trabaja a 3.3V y lo voy a conectar via SPI a Slave (PIC18f14k50) este trabaja a 5v.
Queda claro que hace falta una proteción para las lineas que trasmitan los niveles logicos de 5v -> 3.3V (Diodo shottky o resistencia en serie para no sobrecargar al slave)
Pero mi proyecto esta invertido, es decir, el dispositivo maestro trabaja a 3.3V y el esclavo a 5v y es unidirecional (La linea de envio de datos del slave del spi hacia el master, estara desconectada)
Mi duda es si la Linea SDI del pic18f14k50 se tragara los 3.3v como un nivel logico de un 1, o de lo contrario hay que subir la tensión con algún transistor mosfet? o algún otro metodo.
Atento a la respuesta... un saludo.
-
conectar dos micro via SPI necesitaria un convertidor para acoplar las señales.
ha leido las hojas de TIP--and Trick de Microchip?
http://ww1.microchip.com/downloads/en/DeviceDoc/chapter%208.pdf
pues de ahi te va a sacar de dudas, no lo he leido completo porque no trabajo con pic, pero para cualquier micro usando SPI y diferente voltage es los mismo.
Saludos
-
Bueno la cuestión es que Mi dispositivo Master (24fj64gb002) trabaja a 3.3V y lo voy a conectar via SPI a Slave (PIC18f14k50) este trabaja a 5v.
Queda claro que hace falta una proteción para las lineas que trasmitan los niveles logicos de 5v -> 3.3V (Diodo shottky o resistencia en serie para no sobrecargar al slave)
No creo que necesitaras nada. Salvo los puertos conectados al ADC, todos los demás pines son 5v tolerantes, aunque el PIC vaya alimentado a 3v3.
Pero mi proyecto esta invertido, es decir, el dispositivo maestro trabaja a 3.3V y el esclavo a 5v y es unidirecional (La linea de envio de datos del slave del spi hacia el master, estara desconectada)
Mi duda es si la Linea SDI del pic18f14k50 se tragara los 3.3v como un nivel logico de un 1, o de lo contrario hay que subir la tensión con algún transistor mosfet? o algún otro metodo.
Eso lo tienes en el datasheet, características eléctricas, en concreto el parámetro VIH, desde 0.8v se considera nivel lógico alto, excepto para TTL que sería desde 2v, osea que sin problemas.
-
Muchas gracias por las respuestas ya o comentare...
-
Ademas recordando los pines, si tu maestro es el de 3.3V
• SDIx: Serial Data Input
• SDOx: Serial Data Output
• SCKx: Shift Clock Input or Output
• SSx: Active-Low Slave Select or Frame
solamente deberias preocupate por el pin SDIx de tu maestro.. ya que el maestro maneja los 3 restantes (SDOx, SCKx, SSx). Es decir el pin SDI deberia ser tolerante a 5V en el maestro. Los demas son entradas para el esclavo, y salidas para el maestro.