TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: IngRandall en 26 de Octubre de 2015, 13:27:21
-
Hola amigos del foro, tenemos una duda y es saber si hay posibilidad de aumentar la memoria de programa de un microcontrolador. Gracias.
-
Antes que me ponga sarcastico voy a contestar con seriedad.
Depende del microcontrolador. Asi general tu pregunta es un SI y un NO, deberia reunir ciertas condiciones:
Primero debe poseer un bus externo (paralelo normalmente),
Y segundo debe permitir la ejecucion desde ese bus.
Si es un PIC, uno de esos es este:
http://ww1.microchip.com/downloads/en/DeviceDoc/39646c.pdf
The External Memory Bus (EMB) allows the device to access external memory devices (such as Flash, EPROM, SRAM, etc.) as program or data memory.
Solo hacerte notar que necesitas 3 puertos y medio ( de 8 pines cada uno ) para poder hacer la interfaz.
Si es un ARM, depende de como lo haga el fabricante, el fabricante puede decidir si el bus externo permitir la ejecucion, o directamente bloquearlo y que unicamente sirva para datos. Lo cual no creo que lo haga, pero nuevamente te vas a enfrentar a un gran uso de pines para ese fin, y tal ves convenga mas un micro mejor. Ya que el costo de un mejor micro con respecto a micro + flash + espacio PCB + routear todas las lineas tal ves termine siendo mas prohibitivo. Eso lo vas a tener que analizar con el tema de costos y el tamaño de memoria.
Una cosa mas, normalmente la ejecucion se hace mucho mas lenta desde una memoria externa.
¿ Es posible sin tener un bus externo ? , ¿Como un SPI, I2C ?
SI, algunos micros permiten poder ejecutar codigo desde la RAM, asi que podrias usar una buena seccion de la RAM, junto con DMA y un SPI por ejemplo para cargar el codigo y luego ejecutarlo, esta mas que claro que vas a tener algo mucho mas lento de esta forma. Y es mas que obvio que debe sobrarte la RAM., No tenes DMA? hacelo a mano
No tengo bus externo, no puede ejecutar desde la RAM y tengo solo SPI, ¿ puedo hacerlo ?
Casi todo se puede en la vida, tendrias que emular tu PIC en el PIC , es decir un codigo que emule tu PIC, lo cual leerias "datos" y de acuerdo al dato procesarlo como si fuera una instruccion, separando los opcode 1 por uno y ejecutando la instruccion debida. No creo que lleve mucho hacerlo pero, mas que un CALL + 1 instruccion cada una + RETURN + guardar y salver un registro con un STATUS/W de la emulacion no veo otra :P, suponiendo que sean PIC16, un PIC18 es un poco mas complejo ya.
En fin todo depende del micro, y lo que estes haciendo, etc.
-
Muy interesante y educativa tu respuesta amigo Killerjc :mrgreen:
-
Muy interesante y educativa tu respuesta amigo Killerjc :mrgreen:
Yo pense que era de publico conocimiento lo que dije :?
Despues estuve pensando en otro metodo. Aunque lo veo bastante complejo.
Requiere bastante conocimientos de programacion
Conocimientos de RF y Lineas de transmision
Un poco bastante de pulso y tacto
Y el resultado se puede ver a simple vista:
Aca un dsPIC con 32Kb a 1032Kb con una flash externa montada. Dejo imagen:
https://www.dropbox.com/s/wjhq8stbp7w29fx/100_3458.JPG?dl=0
PD: dije que me iba a poner sarcastico xD jeje, nomas que me gano el sueño y no logre subirlo antes :P
-
Aca un dsPIC con 32Kb a 1032Kb con una flash externa montada. Dejo imagen:
joder pues a mi nunca me ha funcionado eso :( :( no se por que, y eso que he probado con distintos pegamentos, pero nada sigue con la misma memoria :D
por cierto, por quad spi tampoco esta mal poner la memoria, así mejoras velocidad tambien.
pero lo mejor siempre sera paralelo, y para eso tienes que irte a micros gordos con muchos pines o procesadores directamente , dependiendo de la cantidad que quieras para el direccionamiento.
por poner un ejemplo si le pones una memoria externa de 24 bit de direcciones a un ST439 te quedas sin USB, sin Ethernet, Sin I2C etc etc.
-
Muchas gracias KILLERJC, muy buena explicacion.
-
Hola, mas que las posibles soluciones que te dio Killer busca un micro con mas memoria o directamente cambia de micro.
Saludos !
-
Por ejemplo actualmente tengo el PIC32MX795F512L, y ya se esta quedando corto de memoria, y pues alguien nos comento que este tipo de soluciones existían y que el había visto algo asi en un LPC4350 de NXP, por eso quería saber que tan viable es hacerlo.
Por lo que veo si se implementa, tocaría usar extensores de puertos y ver que los pines que se utilicen no sean tan críticos, como el Ethernet, USB, SPI.
-
Tambien va a depender del compilador, que tan bueno sea para optimizar el codigo. O que tan bueno sean los programadores, ya que vi algunos programas que dan calambre y si vas a un proyecto grande es obvio que van a llenar, la flash y la RAM con cosas.
Si todavia no invertiste en el producto entonces podrias cambiar, por 0.50 mas de dolar tendrias uno mejor, y tambien depende de lo que necesites.
Es mucho mas barato que comprar una flash, yo lo dije antes y RICHI ahi lo volvio a remarcar. Nuevamente queda a tu decision, si seguis con PIC32MX te tenes que ir a PIC32MZ, si te vas a otro mundo que seria un ARM, tenes de multiples compañias a precios bastante parejos, creo que sin ir muy lejos del precio de tu PIC32 tendrias un micro mucho mejor, me refiero a mas velocidad, doble memoria, doble RAM, mayor cantidad de perifericos, mejores perifericos etc. Hasta capaces de manejar punto flotante y no punto fijo como hace el PIC32MX. Nuevamente esta en vos.
-
Claro, para nuestro próximo proyecto vamos a basarnos en este ARM:
http://www.atmel.com/tools/SAM4E-EK.aspx
Solo queríamos ver si se puede y que tan rentable de todo punto de vista es.
-
hagas lo que hagas nunca te vayas a un MZ
el micro de atmel es muy bueno, pero estos son mejores por si deseas echarles un vistazo:
http://www.freescale.com/products/arm-processors/kinetis-cortex-m/k-series:KINETIS_K_SERIES?cof=0&am=0
tienen para aumentar memoria ram, Flexcan, adc16, dac12... los he visto correr un kernel de linux.
las documentaciones de atmel y de freescale son de las mejores.
un saludo.
-
Por que no un MZ... claro estuvimos mirando las opciones y entre esas Freescale pero al final nos decidimos por ATMEL.
-
Por eso mismo no queria dar marcas ni decirle que usar.
- Usa el micro de la marca que mas te guste.
- Vas a tener que ver el compilador que poseen, (pago, gratuito, soporte del mismo, si esta desbloqueado para los kit de evaluacion, etc)
- Herramientas de desarrollo, kit de evaluacon (costo, poseen programador, debugger, es posible usarlo en una placa externa?),
- Programadores en caso de que no lo posea el kit de evaluacion.
- Finalmente y recien ahi pensas en el micro y sus perifericos, no te guies unicamente por la "frecuencia del micro" mira lo de los perifericos tambien, Me parece que de nada sirve tener un micro de 100Mhz si los puertos van a 50Mhz.
-
Por que no un MZ... claro estuvimos mirando las opciones y entre esas Freescale pero al final nos decidimos por ATMEL.
pues por que MZ se ha enzarzado con en una lucha con ST absurda, donde están perdiendo los dos.
microchip saco sus MZ antes que nadie con 200 Mhz sin coma flotante (fija), que no pasa nada, si no fuera por que tiene mas bug que un renault laguna del 2002, no le funciona el reloj externo tienes que hacerlo funcionar obligatoriamente con el interno o añadir circuiteria externa para hacerlo funcionar, y rezar por que sea la revisión del silicio en la que funciona esa "chapuza", el ADC tampoco funciona, he visto empresas que han tenido que montar un ADC externo, por que les salia mas barato que rehacer el proyecto, para que cuando se arregle dejar la huella vacía. y mil bugs mas, puedes repasarlos en su web en las erratas.
y dicho por microchip, no van a arreglarlo van a esperar a la siguiente generacion de MZ que ya traeran como flotante, por que sale muy caro diseñar la oblea. o sea, que han hecho una chapuza muy grande para competir con ST.
ST a cambio a sacado su CORTEX M7 tambien muy rapido a 200 Mhz para competir con los MZ y si lo observas es un STM32F439, exactamente igual con 20Mhz más, todos los periféricos identicos y ya eran malos de por si, ni siquiera le han incluido algun PHY, nisiquiera el de USB 2.0, (cosa que si ha hecho microchip con los MZ, y que no vale para nada si no tiene el cristal externo),hasta son compatibles pin a pin, y su CORTEX M7 esta muy muy por detrás que los que estan sacando las demas empresas como freescale y atmel.
es lo que pasa por hacer las cosas con prisas.
un saludo.
por cierto tampoco te recomiendo los PIC32MX serie 1 ni 2 demasiados bugs tambien.
-
Yo he tenido las mismas dudas que tu y me me voy a migrar a atmel o freescale y va a ser freescale por que dan soporte para linux a parte de que sus procesadores y perifericos son algo mejores (muy poco) en comparación con respecto a los de atmel.
y de atmel me llama que sus herramientas de programacion la atmel-ice es propia de la marca, y sirve de jtag para los procesadores ARM9 y A5
las documentaciones son muy buenas las dos.
por cierto librerias de microchip 32 y ST basura, te hacen perder tiempo, cosa contraria para lo que existe una libreria
-
Yo tengo un PIC32MX795F512L, como se yo que serie es?
-
Yo tengo un PIC32MX795F512L, como se yo que serie es?
ese es un serie 7
PIC32MX"serie" ese esta mucho mas probado, y comprobado ese no te va a dar problemas, lo que si ha hecho microchip con sus compiladores gratuitos es que cada vez son peores para obligarte a pagar y comprarte el "Pro", eso si que es descarado, lo digo por experiencia propia.
pero un PIC32MX795F512L es un gran micro con ese no debes tener muchos problemas, yo diría que la serie 7 es lo mejorcito que tiene microchip.
un saludo
-
Claro es pic es muy bueno, la verdad no me quejo de el.
-
Solo decirte que no entiendo a que te referis que eso es serie 7.. nunca vi eso en algun pdf, incluso la flia de ese micro es 5xx/6xx/7xx Y no por eso el 7xx tiene menos errores que el 5xx
Seria lo mismo que decir que un PIC32MZ2048ECM144 , es serie 2, cuando el 2048 es lo que indica la cantidad de flash
Ese PIC es unos de los primeros que saco Microchip, me acuerdo por que lo tengo en casa (de adorno), por que cuando salio el furor de que habia lanzado sus PIC32 habia comprado ese mismo micro. Y de revisado/mejorado no tiene nada, va por la revision 5 de silicio y solo arreglaron 2 problemas en las 5 revisiones....
http://ww1.microchip.com/downloads/en/DeviceDoc/80000480N.pdf
Y eso es lo que nunca entendi, pasaron 3 revisiones del silicio y no se arreglo nada?. Ni uno siquiera?.. tal ves era muy caro hacerlo de nuevo imagino. Creo que quedara la respuesta dentro de la empresa
-
Solo decirte que no entiendo a que te referis que eso es serie 7.. nunca vi eso en algun pdf, incluso la flia de ese micro es 5xx/6xx/7xx Y no por eso el 7xx tiene menos errores que el 5xx
Seria lo mismo que decir que un PIC32MZ2048ECM144 , es serie 2, cuando el 2048 es lo que indica la cantidad de flash
Ese PIC es unos de los primeros que saco Microchip, me acuerdo por que lo tengo en casa (de adorno), por que cuando salio el furor de que habia lanzado sus PIC32 habia comprado ese mismo micro. Y de revisado/mejorado no tiene nada, va por la revision 5 de silicio y solo arreglaron 2 problemas en las 5 revisiones....
http://ww1.microchip.com/downloads/en/DeviceDoc/80000480N.pdf
Y eso es lo que nunca entendi, pasaron 3 revisiones del silicio y no se arreglo nada?. Ni uno siquiera?.. tal ves era muy caro hacerlo de nuevo imagino. Creo que quedara la respuesta dentro de la empresa
la serie en PIC32MX es simplemente el modelo como un bmw tiene su serie 1, 3, 7 etc.
no tiene nada que ver con las versiones, las versiones del silicion se denominan con la A1, A2 etc.
al igual que el bmw serie 1 va teniendo sus reviones independientemente de el 3 o el 7.
y lo de las series, lo llaman los propios de microchip cuando te los venden, cuando comprabamos en mi exempresa los pediamos por series.
-
Hola amigos del foro, tenemos una duda y es saber si hay posibilidad de aumentar la memoria de programa de un microcontrolador. Gracias.
Con el PIC32 pues ejecutar código en RAM. En el foro de MCHP leí que un tipo cargó varias funciones en una memoria flash externa (creo que SPI) y cada vez que necesitaba una función leía dicha función desde la memoria externa, la cargaba en la RAM y la ejecutaba. Me parece que es una manera de "aumentar la memoria de programa", por decirlo así.
Me parece que el hilo del tema está aquí:
http://www.microchip.com/forums/m575216.aspx (http://www.microchip.com/forums/m575216.aspx)
-
Se pueden hacer muchas cosas raras ese no es el punto. Normalmente los firmwares van evolucionado y necesitan mas espacio, con lo cual la mejor alternativa es cambiar de micro.
Saludos !