Autor Tema: Micro para implementar SPI en diferentes patillas  (Leído 7922 veces)

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

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Micro para implementar SPI en diferentes patillas
« en: 29 de Junio de 2017, 13:31:56 »
hola

No sabia muy bien donde poner este post, asi que lo he puesto aqui.

a pesar que llevo tiempo dedicandome a reparar (mas bien soy un cambia placas, que la electronica analogica se me atasca mucho...), me va a tocar proximamente diseñar un pequeño hardware. En mi trabajo descubri que algunas placas que reparamos muy a menudo, al meterles señales por SPI nos devuelve algunos datos que ayudan a repararlas y en otros casos las repara al configurarle datos; y otras otras señales distintas (bus de datos paralelo), pues bien, me han mandado que vaya pensando en hacer unos pcbs para implementar esto (no se si quieren venderlo o enviarlos a los distintos mantenimientos para reparar en la misma ubicacion) y aqui viene el problema  :5]. Hasta ahora cogia cables y los soldaba en la pcb con un arduino, pero claro ahora no va a ser viable esa opcion, entonces tendre que conectar via conector tipo conector IDE (discos duros, que no se como se llaman) con un cable plano, pero aqui viene el problema...

Las placas con mas pines de este conector son 40 pines, pero las distintas señales las tienen en distintas patillas, por ejemplo unas tienen la señal SCK en el pin 10 y otras en el 20; y asi con todas... Podria hacer que los cables planos cambien el cableado pero es un lio, entonces, me vino a la cabeza una charla que mantuve hace un tiempo con un amigo sobre algo parecido, de poder reconfigurar los pines segun la necesidad, con un pequeño CPLD (ni idea de como hacer esto, lo preguntaria a mi amigo que me lo haga o intentaria aprender a hacerlo yo). Asi que pensaba que ya estaba solucionado, pero al mirar precios he visto que sale cada CPLD 10€ y el micro (ATMEGA328) unos 2€, en total 12€. Mirando costes he visto que el compañero planeta9999 usa un ATMEL SAM S70 y ST32, que tienen un precio mas bajo que el conjunto de los dos (la mitad) y tienen mas pines que necesito (unos 36 aprox) y el ATMEGA no me da para eso.

Pero claro, aqui viene el problema, nunca he tocado esos micros y tampoco se si se puede implementar SPI por software para poder cambiar los pines de las distintas señales, asi como a nivel de hardware hace falta ponerle algo a los distintos pines, que por ejemplo al reconfigurar el pin como otra señal pueda verse afectada (vamos, que le ponga alguna resistencia limitadora o pullup que al configurar ahi SCK pueda afectarle).

La diferencia es que muchos de estos micros traen el USB que me permite ahorrarme tambien el micro que pasa de serie a usb (aun mas ahorro), el CPLD para expandir I/O y no me limita a 20Mhz como el ATMEGA que para alguna de las otras señales (no SPI), puedo subir a 40Mhz y meter datos mas rapido. Necesito minimo 20Mhz de operacion y tampoco necesito 300Mhz, pero si por la mitad de precio tengo mejos caracteristicas...

¿Como lo veis? Se puede implementar SPI a nivel software para poder trabajar con cualquier pin y asi solo es pinchar el cable plano y via software PC decirle, este pin es esta señal, esta otra, etc. Llevo toda la mañana con esto y no me ha quedado muy claro, ademas me da miedo programar un bicho de estos...  :g) Igual es intentar matar moscas a cañonazos, porque es un diseño muy sencillo. Un software en el PC (que programe en visual basic), se conecta por USB y le manda comunicacion via serie al micro, que este unas veces mediante SPI lee datos y otras escribe, otras veces se comunica via bus de datos datos para hacer algo similar al SPI; solo que ahora hay que "enrutar" estas señales en un conector de 40 pines  :D

Como se nota que no tengo ni puñetera idea de todo esto, porque algo tan sencillo comparado con otros proyectos de FPGA y micros, me esta dando dolores de cabeza  :D

Gracias

Saludos

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #1 en: 29 de Junio de 2017, 13:40:39 »
Juer, he estado mirando los STM32 y tienen un precio increible (sobre los dos euros), al menos los de 48Mhz y menos de 50 pines....

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #2 en: 29 de Junio de 2017, 14:42:45 »
Ojo que el SPI (Hardware) no tiene la misma frecuencia que el reloj de entrada. Si hay precios muy bajos, y la verdad es que si conviene comprar un micro con USB directamente.
Un SPI por software es mucho mas lento.

Y finalmente necesitarias de un micro que:

- Tenga al menos 40 GPIO
- Tenga USB, lo cual agregaria 2 pines mas
- Si insertas algun led para algun estado, deberias contar los pines de esos leds.
- Como configurar el micro para saber que pines son los adecuados?, lo haces via USB? Si lo haces por USB entonces no tenes nada que preocuparte, si queres que sea independiente de la PC entonces deberias tener algun LCD y botones seguramente.
- El nivel de voltaje que viene de la placa vas a tener que tener cuidado de que no sea superior a lo que los pines aceptan.
- Ojo con alimentar el dispositivo con el USB,Y tener cuidado de no generar algun corto, ya que si te pones a pensar que si no lo aislas, tednrias que conectar los GND de cada uno.

Eso o intentas multiplexar las entradas y salidas, recordando tener tri-state en las salidas.

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #3 en: 29 de Junio de 2017, 18:29:07 »
Gracias por responder !

Si, eso he visto, he encontrado librerias por software que funcionan a 20Khz.... Muy lento comparado con el hardware... Por lo que veo que al final tendre que poner algun CPLD (menudo marron me he metido yo solo) o algun bus expansor como los mcp de microchip, a ver si asi se puede hacer algo. Sigo investigando.

Muchas gracias de nuevo

saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #4 en: 29 de Junio de 2017, 19:14:48 »
El problema no es el costo del CPLD, sino el costo del programador del CPLD, sino buscaria algun micro que permita remapear a cualquier pin el SPI.
Y ya que esta dependiendo que pensas hacer, porque no buscar un CPLD mas grande y meterle USB o un FPGA directamente.

Realmente no se si los PSoC permiten esto en runtime, se que se puede en el momento de grabacion pero no se si runtime. Igual los PSoC no son nada baratos.
« Última modificación: 29 de Junio de 2017, 19:18:43 por KILLERJC »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #5 en: 29 de Junio de 2017, 21:42:13 »
¿Cuantas posibles combinaciones tienes?

Por ejemplo, si agarras una de esas tarjetas de desarrollo baratas con el stm32f103c8t6 (37 I/O). Tiene dos SPI, los cuales son mapeados a los siguientes pines

SPI1
SCLK, MISO, MOSI
PA5,PA6,PA7
PB3,PB4,PB5

SPI2
PB13, PB14, PB15

SCLK puede ir en PA5 o PB3, MISO en PA6 o PB4 y MOSI en PA7 o PB5, por lo que puedes tener varias combinaciones como:
PA5,PA6,PA7
PA5,PA6,PB5
PA5,PB4,PA7
PA5,PB4, PB5
PB3,PA6,PA7
PB3,PA6,PB5
PB3,PB4,PA7
PB3,PB4,PB5

más SPI2 en PB13, PB14 y PB15, por lo que si acomodas bien los pines podrías ver cuantas de esas combinaciones podrías aprovechar realmente(estoy hablando con un desconocimiento de como se presentan los pines en los sistemas que reparas)

Después garras un dip switch y cuanto inicies el sistema este va a leer la combinación para seleccionar cual interfaz activar.

Ahora con el stm32f407vgt6

SPI1
PA5, PA6, PA7
PB3, PB4, PB5
SPI2
PB10, PC2, PC3
PB13,PB14,PB15
SPI3:
PC10, PC11, PC12
PB3, PB4, PB5

Recuerda que sólo vas a estar usando una sola combinación del SPI por vez, por lo que todos los demás pines quedan libres para que puedas hacer con ellos lo que quieras.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #6 en: 29 de Junio de 2017, 22:18:37 »
.

Si he entendido bien, lo que quieres hacer es seleccionar entre varios dispositivos SPI externos, para comunicar con un microcontrolador que utilizaría siempre el mismo puerto SPI.

Yo lo haría con buffers triestado externos, por ejemplo el 74HCT244, que tiene 8 buffers triestado agrupados en 2 grupos de 4 entradas, y 4 señales son las que tiene cada puerto SPI (DI, DO, SCK, CS). Con cada 74HCT244 podrías conmutar dos dispositivos externos SPI. Las dos patillas de control de cada 74HCT244 las llevas al microcontrolador, y por software activas el dispositivo SPI con el que quieras comunicar. Cada dos dispositivos SPI que quieras conmutar, necesitará un 74HCT244.

Otra opción sería utilizar conmutadores electrónicos CD4066, pero no se como se comportarán con señales de alta frecuencia.

Yo no implementaría SPI por software, hazlo por hardware. Y si lo vinculas a DMA, mucho mejor, es más rápido y te libera la CPU para otras tareas.


74HCT244, Octal buffer/line driver; 3-state.

« Última modificación: 29 de Junio de 2017, 22:21:46 por planeta9999 »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #7 en: 29 de Junio de 2017, 23:47:37 »
.

Si he entendido bien, lo que quieres hacer es seleccionar entre varios dispositivos SPI externos, para comunicar con un microcontrolador que utilizaría siempre el mismo puerto SPI.

Yo lo haría con buffers triestado externos, por ejemplo el 74HCT244, que tiene 8 buffers triestado agrupados en 2 grupos de 4 entradas, y 4 señales son las que tiene cada puerto SPI (DI, DO, SCK, CS). Con cada 74HCT244 podrías conmutar dos dispositivos externos SPI. Las dos patillas de control de cada 74HCT244 las llevas al microcontrolador, y por software activas el dispositivo SPI con el que quieras comunicar. Cada dos dispositivos SPI que quieras conmutar, necesitará un 74HCT244.

Otra opción sería utilizar conmutadores electrónicos CD4066, pero no se como se comportarán con señales de alta frecuencia.

Yo no implementaría SPI por software, hazlo por hardware. Y si lo vinculas a DMA, mucho mejor, es más rápido y te libera la CPU para otras tareas.


74HCT244, Octal buffer/line driver; 3-state.



Menciona que necesita al menos 36 I/O, porque a su parecer SCLK y las otras señales puede caer en cualquiera de los pines del conector, por lo que no creo que este circuito sea lo más adecuado.

Arriba mencionaron los PSoC, nunca los he usado, pero ve la siguiente tarjeta de desarrollo de bajo costo.
http://www.cypress.com/documentation/development-kitsboards/cy8ckit-059-psoc-5lp-prototyping-kit-onboard-programmer-and

Le veo bastantes pines, por lo que probablemente pudiera resolver el proyecto, por que es algo relativamente sencillo, desde el punto de vista de la lógica digital. Sin contar el manejo del tercer estado y otros detalles, me imagino que se podría hacer de la siguiente forma



Bueno, si es que el PSoC lo permite.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #8 en: 30 de Junio de 2017, 00:05:22 »
Menciona que necesita al menos 36 I/O, porque a su parecer SCLK y las otras señales puede caer en cualquiera de los pines del conector, por lo que no creo que este circuito sea lo más adecuado.

No indica cuantas combinaciones va a usar de esos 36 puertos (a 4 hilos para cada SPI), ni que las señales puedan caer en cualquiera de esos 36 hilos.

Si, por ejemplo, tiene 10 placas distintas a reparar y cada una se comunica por SPI usando pines distintos, con tan solo 5 chips 74HCT244 y un microcontrolador, lo tendría resuelto para conmutar desde el PC.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #9 en: 30 de Junio de 2017, 00:19:13 »
Citar
con tan solo 5 chips 74HCT244 y un microcontrolador

No te sirve eso, porque las demas salidas no estan en alta impedancia, necesitarias un control individual de las salidas.
Y son solo 5 de esos ( si tuviera control de tri-state ) para solo la salida de datos.

Luego necestias 5 de estos:

https://www.onsemi.com/pub/Collateral/MC74HC251A-D.PDF

Por cada entrada.

Suponiendo que no tenes el CS, y que consiguieras un De-multiplexor (8-a-1) necesitarias 15 integrados, aunque lo mas feo imagino que va a ser el routeado de la misma, y no va a ser nada practico llevar una placa la cual tienen que entrar esos 15 integrados, o 20 con el CS.

Todo va a depender de cuales son los objetivos de la persona, si no le importa tener una placa grande entonces que siga este camino y va a tener la placa configurable al maximo.
O si quiere ahorrar espacio va a tener que ir a una FPGA imagino, asi posee USB, crear multiplexacion dentro como mas le guste, siempre y cuando le den los bloques para realizarlo dentro, asi que esto va a definir el costo final que tenga, cuantos bloques le son necesarios para crear el SPI y todos esos multiplexores.
« Última modificación: 30 de Junio de 2017, 00:22:32 por KILLERJC »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #10 en: 30 de Junio de 2017, 00:49:34 »

No indica cuantas combinaciones va a usar de esos 36 puertos (a 4 hilos para cada SPI), ni que las señales puedan caer en cualquiera de esos 36 hilos.

Si, por ejemplo, tiene 10 placas distintas a reparar y cada una se comunica por SPI usando pines distintos, con tan solo 5 chips 74HCT244 y un microcontrolador, lo tendría resuelto para conmutar desde el PC.


Citar
¿Como lo veis? Se puede implementar SPI a nivel software para poder trabajar con cualquier pin y asi solo es pinchar el cable plano y via software PC decirle, este pin es esta señal, esta otra, etc. Llevo toda la mañana con esto y no me ha quedado muy claro, ademas me da miedo programar un bicho de estos...  :g) Igual es intentar matar moscas a cañonazos, porque es un diseño muy sencillo. Un software en el PC (que programe en visual basic), se conecta por USB y le manda comunicacion via serie al micro, que este unas veces mediante SPI lee datos y otras escribe, otras veces se comunica via bus de datos datos para hacer algo similar al SPI; solo que ahora hay que "enrutar" estas señales en un conector de 40 pines  :D

Quiere enrutar las señales SPI en un conector de 40 pines y decirle por ejemplo:

Pin 1: SCLK
Pin 5: MISO
Pin 10: MOSI
Pin 7: CS

o

Pin 20: SCLK
Pin 7: MISO
Pin 10: MOSI
Pin 3: CS

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #11 en: 30 de Junio de 2017, 13:32:09 »
El problema no es el costo del CPLD, sino el costo del programador del CPLD, sino buscaria algun micro que permita remapear a cualquier pin el SPI.
Y ya que esta dependiendo que pensas hacer, porque no buscar un CPLD mas grande y meterle USB o un FPGA directamente.

Realmente no se si los PSoC permiten esto en runtime, se que se puede en el momento de grabacion pero no se si runtime. Igual los PSoC no son nada baratos.
Nunca he hecho la reconfiguración de los pines en runtime, pero me parece que si es posible, los PSoC5LP tienen USB, también los PSoC4L, pero estos últimos tienen menos lógica re-programable (la lógica es parecida a un CPLD).

.

Si he entendido bien, lo que quieres hacer es seleccionar entre varios dispositivos SPI externos, para comunicar con un microcontrolador que utilizaría siempre el mismo puerto SPI.

Yo lo haría con buffers triestado externos, por ejemplo el 74HCT244, que tiene 8 buffers triestado agrupados en 2 grupos de 4 entradas, y 4 señales son las que tiene cada puerto SPI (DI, DO, SCK, CS). Con cada 74HCT244 podrías conmutar dos dispositivos externos SPI. Las dos patillas de control de cada 74HCT244 las llevas al microcontrolador, y por software activas el dispositivo SPI con el que quieras comunicar. Cada dos dispositivos SPI que quieras conmutar, necesitará un 74HCT244.

Otra opción sería utilizar conmutadores electrónicos CD4066, pero no se como se comportarán con señales de alta frecuencia.

Yo no implementaría SPI por software, hazlo por hardware. Y si lo vinculas a DMA, mucho mejor, es más rápido y te libera la CPU para otras tareas.


74HCT244, Octal buffer/line driver; 3-state.



Menciona que necesita al menos 36 I/O, porque a su parecer SCLK y las otras señales puede caer en cualquiera de los pines del conector, por lo que no creo que este circuito sea lo más adecuado.

Arriba mencionaron los PSoC, nunca los he usado, pero ve la siguiente tarjeta de desarrollo de bajo costo.
http://www.cypress.com/documentation/development-kitsboards/cy8ckit-059-psoc-5lp-prototyping-kit-onboard-programmer-and

Le veo bastantes pines, por lo que probablemente pudiera resolver el proyecto, por que es algo relativamente sencillo, desde el punto de vista de la lógica digital. Sin contar el manejo del tercer estado y otros detalles, me imagino que se podría hacer de la siguiente forma



Bueno, si es que el PSoC lo permite.
La tarjeta que mencionas es barata (cuesta menos que el propio PSoC5LP) y el control de los MUX y DEMUX lo puedes hacer con un bloque que se llama Control Register (este lo puedes controlar con el CPU) o una LUT.

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #12 en: 01 de Julio de 2017, 16:23:05 »
Hola

Muchas gracias a todos por responder, de verdad que se agradece mucho, luego me paro mas a leer detenidamente las respuestas.

Ya me supuse que no puse muy claro el mensaje de lo que queria hacer, es lo que pasa cuando duermes poco (tengo que tomarme la vida con mas tranquilidad) y andar un pongo estresado, que me voy por los cerros de ubeda  :D

Basicamente son unas placas que muchas las tengo identificadas el puerto SPI en que pines caen las correspondientes señales, pero otras aun toca hacer pruebas para detectarlas y otras nuevas que estan entrando que a saber en que pines estan, son un hardware cerrado de electronica industrial que ni esquemas electronicos me han proporcionado para reparar... y he visto que son como una memoria que si la lees y le grabas de otra, muchas se reparan  :-)

Entonces como no se en que pines caen (las que faltan por indentificar y las que en un futuro entren), por eso dije de utilizar todas las combinaciones posibles y creia que se podria hacer SPI por soft, pero como comento el compañero KILLERJC y vi por ahi, tienen velocidades muy lentas, asi que tendre que poner algo externo que "enrute" las señales de SPI por hardware a los distintos pines del conector. He estado mirando por internet sobre cpld y vi temas de io expander y multiplexadores, pero no tengo ni idea de esto, llegado el caso le diria a un amigo que controla que me eche una manita, pero la verdad que anda un poco desanimado porque tuvo que cerrar sus negocios (como puse en otro post) por tanto no quiero molestarle mucho y aparte que capaz que me lo haga entero y yo no aprenda nada  :5], mas que nada por eso he pedido ayuda, tampoco que se me de hecho.

Voy a revisar todo lo que me habeis comentado aunque creo que ira con cpld/fpga o alguno tipo de integrado que haga de switch o multiplexe, mas que nada por no encarecer el desarrollo, ya sabeis, lo quieren completo y muy barato... (supongo que cuanto menos gasten, mas tienen para el nuevo mercedes  :D). Quizas se podria haber hecho con un monton de pines con jumper (bueno, segun las combinaciones seria inmenso, ni una centarl nuclear), pero creo que van a ir a parar a los tecnicos de mantenimientos que estan en las instalaciones in-situ y como los deben considerar como tontos lo quieren sencillo, aunque a mi tambien me deben considerar lo mismo, pero lo mio es con razon  :D

Reviso todo y os voy comentando, muchas gracias de nuevo por el favor.

Saludos

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #13 en: 01 de Julio de 2017, 16:48:46 »
¿Que tan barato es barato?

https://www.aliexpress.com/item/Spartan6-Mojo-V3-FPGA-Development-Board-kits-Module-Spartan-6-XC6SLX9-for-Arduino-DIY/32798926767.html

Cuenta con un FPGA y un ATMEGA32U4 y no requieres comprar un programador tanto para programar el FPGA como el ATMEGA, además es compatible con Arduino.

Puedes ver más info aquí

https://embeddedmicro.com/tutorials
https://embeddedmicro.com/tutorials/mojo-fpga-beginners-guide
https://embeddedmicro.com/tutorials/mojo-software-and-updates/arduino-ide

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Re:Micro para implementar SPI en diferentes patillas
« Respuesta #14 en: 02 de Julio de 2017, 12:51:33 »
Hola

Barato para estos debe ser menos de 10€... por lo que me han dejado caer, que yo no me dedico a diseñar nada y como di con eso para facilitarme el trabajo de reparacion, pues ahora quieren que haga eso... En que hora hice nada... Pero bueno, es lo que toca. Mañana ya comentare que no se va a hacer de un dia para otro (voy a "intentar" hacerlo con STM32 y tengo que aprender a hacer algo con eso) y ya lo otro... a ver si doy con la formula de como hacerlo.

Son cosas que uno no entiende, para unas cosas escatiman dinero y para otra gastan en chorradas o en proveedores que tienen el material 10 veces mas caros que otros, cosas que nunca entendere...

Seguire peleandome y os voy comentando al final que hago, si es que no me despiden antes  :-/ ¡ al menos descansaria la mente !

gracias

P.D: La placa esta muy buena, tiene buena pinta aunque yo ni idea. Tengo aqui al lago una de CPLD y otra de FPGA de xilinx oficiales y una de otra marca, que me las dejo mi amigo hace ya un tiempo para que practicara y ahi estan cogiendo polvo... Voy a ver si comprarla o que

Saludos