TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: MerLiNz en 21 de Abril de 2014, 15:41:58
-
Bueno pues despues de llevar un tiempo pensandolo he decidido dar el paso a freescale, esto es porque microchip se me quedaba corto para mis proyectos que estan dedicados a la automocion. No es que se me quedase corto de memoria, o que le faltase velocidad, simplemente es que con un pic no tenia los perifericos adecuados para el desarrollo, mientras que freescale incluye perifericos totalmente orientados a la automocion.
El caso es que me he metido en algo grande como es un MCP5634M, he mirado en el foro y lo maximo que he visto es usar mcus de 16bits el caso es que indagando por google he encontrado poca informacion por no decir casi ninguna, lo unico que tengo son las muchas paginas que ha escrito freescale de este MCU pero me estoy viendo que me va a costar, cuando un pic es muy sencillo de iniciar, en este tengo que aprender hasta conectarlo, ya que tiene varios voltajes segun los pines, la programacion es distinta, la estructura tambien es distinta y un largo etc...
Lo primero que me he pillado ha sido el MULTILINK (el normal porque el FX vale 3 veces mas) y una placa de entrenamiento asi puedo practicar sin tener que preocuparme del hardware.
En fin, se que no mucha gente sigue este apartado de freescale, pero espero algun dia poder ayudar lo mismo que lo hago con microchip, que me se muchas cosas de memoria, desearme suerte xD
Una pregunta que queria hacer, un IDE para freescale que no sea codewarrior existe?? Es que esta limitado en su version free, y la de pago vale un ojo de la cara, para microchip hay muchos como ccs, mikroC, mplab... pero para freescale no he encontrado nada, o no he sabido encontrarlo.
-
Hola! No hay alguno de Freescale que tenga como "corazón" un ARM? O buscar de otra firma un ARM con los periféricos que necesitas para automoción? Creo que la mejor inversión es esa, buscar algo con ARM, aprovechando que hay muchas firmas que utilizan esta arquitectura pero con diferentes periféricos, entonces no te restringís en una determinada marca de microcontroladores.
Saludos!
-
Cuales son esos periféricos que tiene uno y no el otro??
-
Opino como Suky, un ARM te garantiza mayor flexibilidad.
-
Si, es cierto que ARM estara mas generalizado y habra mas informacion pero no he encontrado nada parecido con ARM. Freescale usa arm en algunos mcus pero no estan diseñados para automocion ni tampoco ofrecen ni la mitad que los que si estan diseñados.
Los 3 grandes de la automocion son renesas, infineon y freescale, fabrican hardware especifico para automocion lo cual ayuda bastante en el diseño y su facilidad, sin embargo no son muy usados y la unica informacion que hay es la que proporciona el fabricante.
El porque escojo freescale es porque es de lo mas popular frente a infineon y renesas (que hasta hace poco no sabia que existian) y seguro que encontrare algo de mas informacion. Todos estos fabricantes utilizan un core "raro" (freescale el ez200), infineon utiliza un tricore (si, es una MCU con 3 cores) y renesas nose. Tambien esta ST que utiliza el ez200 tambien.
MGLSOFT entre los que destacan el principal que no tiene microchip es el etpu2. Es un sistema complejo de "timers" el cual funciona con un microengine, es decir, es como si tuviesemos 2 microcontroladores en 1, uno se encarga de la tarea normal mientras que otro procesa todas las señales de timer. Es como tener 2 core, uno procesando timers y luego otro procesando el codigo normal. Tambien esta el qADC que a diferencia de microchip puedes utilizarlo con 5V. Aparte de eso tienes eMIOS que son mas timers y luego timers generales.
Sin contar que ofrece mucho mas rendimiento, por ejemplo tienes operaciones en punto flotante por hardware, puedes multiplicar un float en solo una instruccion de micro, es decir float*float en 125ns (las divisiones ocupan mas pero tambien son por hardware). Todo esto te lo digo sin haber leido mucho mas, pero las diferencias son bastante grandes, luego, te puedes meter tambien en las MCU con doble core, pero cuestan una pasta (100$ solo el MCU)
-
Lo unico que me asusta de freescale son este tipo de cosas:
FMPLL.ESYNCR1.B.CLKCFG = 0X7;
SIU.PCR[119].R = 0x0E00;
Es decir, estaba acostumbrado a microchip con un solo sub struct, y ahora veo que freescale utiliza como 4-5 sub structs incluyendo arrays y cosas asi, por lo demas no creo que sea muy complicado.
-
¿Y no hay librerías de más alto nivel para manejar los periféricos?
-
Si las hay nocturno, pero estan limitadas a lo que el creador ha querido orientarlas. Es mas, segun he visto freescale tiene librerias para todo incluso software para configurar esos perifericos (por ejemplo etpu). El caso es que siempre me gusta empezar entendiento la estructura del MCU y luego por rapidez utilizaria las librerias, pero de nada me sirve utilizar librerias si luego no se configurar un pin como output xD
La placa de entrenamiento me llega segun mouser esta semana, pero seguro que es para la proxima ya hare fotos y pruebas, se ve muy interesante.
-
A ver ... A mi me tiene un poco cansado el marketing de ARM, lo micros que se refiere MerLiNz son PowerPC bastantes evolucionados, sino no me equivoco es la serie Qorivva, mira que esto es un peso pesado y por lo que me comentaron este tipo de tecnología ( PowerPC ) es líder en el mercado automotor.
Ahora preparate, programar estos bichos no se parece en nada a programar micros, de 8 de 16 o 32 bits ....
Con respecto al IDE, en sí hablemos de compilador, seguramente GCC lo soportará, pero olvídate de la eficiencia, no se va a comparar con el CodeWarrior u otro compilador pago.
Suerte y saludos !
-
Si richi son los qorivva. De ARM nose como va, supongo que todo dependera del fin al que se lleve el proyecto pero en mi caso ningun fabricante de MCUs para automocion los incluye asi que por algo sera. Es como por ejemplo si decimos que los pics son los mejores, en realidad son los que mas se usan en proyectos caseros y por eso tienen mucha fama pero luego cualquier fabricante tiene MCUs bastante superiores.
Por ahora probare codewarrior hasta llegar a los 128Kb de memoria me sobra
-
Igual para proyectos chicos podes usar cualquiera, PIC, FreeScale, ARM, etc pero para cosas especializadas y de alta perfomance quedan muy pocas opciones ...
-
A ver ... A mi me tiene un poco cansado el marketing de ARM, lo micros que se refiere MerLiNz son PowerPC bastantes evolucionados, sino no me equivoco es la serie Qorivva, mira que esto es un peso pesado y por lo que me comentaron este tipo de tecnología ( PowerPC ) es líder en el mercado automotor.
Marketing o no, es cierto que varias firmas lo utilizan y se puede aprovechar eso al momento de elegir, dado que permite un poco de flexibilidad. Por ahí si era de alta performance utilizaba un cortex R o un Cortex A.
Saludos!
-
Bueno ya me ha llegado la placa de entrenamiento y el programador multilink, me esperaba una placa tipo motherboard de un pc pero resulta que es del tamaño de una mano aun asi se ve muy bien apañada, en cuanto llege del trabajo me pondre a probarla :lol:
-
Despues de 2h dandole vueltas he conseguido configurar un pin como output y encender/apagar un led xDDDD
El tema no es que sea dificil, es que es muy complejo, a diferencia de los pics tienes muchas configuraciones para los pines, entre ello destaca:
-Configuracion del pin: Para un periferico, como input/out
-Configuracion de capacitancia: puedes elegir la capacitancia del pin desde 10pf a 50pf, esto supongo que sera para elegir el tipo de señal (de rapida a lenta).
-Open drain: esto supongo que es igual que en pic
-Input hysteresis ni idea
-Slew rate: para la rampa ascendente al cambiar de pin, se puede configurar de rapida a lenta
-Pullup y pulldown: igual que pic
Se configura asi:
SIU . PCR[ x].x -> configuramos el pin con todos los parametros
SIU . GPDO[ x]=x ->ponemos el pin a 0 o 1
luego esta el SIU . GPDI[ x] que no es mas que el registro en caso de ponerlo como input.
Y ahora hablar del codewarrior, sinceramente por lo poco que lo he usado (unas horas) es "la ostia", entre una cosa destacada que he visto es la vista de registros, puedes ver por ejemplo cualquier registro del mcu, pero esto no es todo, puedes ver QUE SIGNIFICA CADA BIT, es decir, te olvidas del datasheet, simplemente te describe que significa cada bit en cada registro y al cambiarlo te indica que cambio has hecho, por ejemplo si cambio el GPDO a 0 me pone VOL, y si lo cambio a 1 me pone VOH indicando el estado del pin.
(http://s27.postimg.org/43au9tutu/2014_04_24_16_01_07.jpg)
-
Bueno ya he conseguido hacer andar el eTPU, la verdad es que me ha costado porque es bastante complejo, explico lo que he entendido de su funcionamiento:
-El etpu es un sistema independiente a la CPU, corre en paralelo con la CPU y se programa mediante el volcado de datos a su region RAM, es decir, es como si tuviesemos 2 mcus y una se encarga de todos los timers mientras que otra hace el resto pero estan conectadas por el mismo bus de datos.
-Tiene muchos canales (32 en mi caso) y estos canales son como un timer independiente, cada canal le puedes poner su propia funcion y hacer que se ejecute en el microcode del etpu, es como si dijeramos que tenemos una interrupcion para cada canal pero este codigo se ejecuta en el modulo del etpu.
-El etpu tambien contiene RAM para las variables, estas variables son accesibles por la CPU simplemente con un puntero a la memoria absoluta, sin embargo el etpu solo puede ver su propia ram, no puede salir fuera de la direccion de la etpu
-Tiene 2 sources, es decir 2 contadores, puedes seleccionar el que quieras para cada canal, tambien es posible elegir un contador externo el cual se incrementa con los edges elegidos en la señal (mas conocido como angle mode).
Ahora hablemos del eQADC (ADC), no he indagado mucho, simplemente he obtenido una lectura y ya esta, pero por lo que he leido funciona de la siguiente forma:
-Inicias el modulo
-Este modulo funciona mediante el envio de comandos, es como si fuese un modulo al cual se le envian comandos y este los procesa y te manda una respuesta (en caso de ser necesario).
-Para hacer una conversion lo que tenemos que hacer es enviarle el comando de conversion y el modulo te responde con la conversion actual, a pesar de que parezca simple el tema es que tiene muchos sistemas FIFO, por ejemplo tenemos 2 FIFO, por estos 2 enviamos comandos por ejemplo al fifo1 le enviamos que nos mande la conversion AN5 y AN8 y al fifo2 la conversion AN8 y AN10, el sistema procesa el fifo y te responde a otro buffer fifo con las conversiones.
Es un sistema muy curioso, sin contar que tiene muchisimo mas de lo que he contado aqui, pero es lo poco que me he enterado.
Tambien he conseguido hacer andar el programador multilink ya que anteriormente usaba el BDM que trae la placa integrado.
-
Excelente info, yo sinceramente no lo conozco mucho. Gracias por la data !
Exitos !
-
Pondre mis datos a modo de "chuleta" asi le sirve por si a alguien le interesa, aunque creo que este tipo de MCU no le interesa a mucha gente, informacion en español habre encontrado 1 o 2 documentos que solo habla de lo basico.
-
Hola Merlinz, si lo desea le pongo una chichenta a tu Tutorial o projectos,
aunque seguire el tema..
Saludos
-
Si lo hago mas completo le cambiamos el nombre y lo pones chincheta o hacemos otro post mas detallado.
-
perfecto....
-
bueno ya he hecho mi primer codigo para etpu, me ha costado porque no me funcionaba bien hasta que he descubierto porque xD, es simple, un simple pwm de 4khz a 50% era simplemente para probar.
Pongo el codigo:
void FUNC(int24 var) {
if(hsr==FUNC_HSR_INIT) { //HOST pide inicializar
SetPinLow();
SetChannelMode(em_nb_dt); //non blocking + double
SetupMatch_A(tcr1+10000,Mtcr1_Ctcr1_ge,low_high);
SetupMatch_B(erta+5000,Mtcr1_Ctcr1_ge,high_low);
} else if(MatchB) { //interrupcion para el matchB = poner en low
SetupMatch_B(ertb+10000,Mtcr1_Ctcr1_ge,high_low);
Clear(MatchBLatch);
} else if(MatchA) { //interrupcion para el matchA = poner en high
SetupMatch_A(erta+10000,Mtcr1_Ctcr1_ge,low_high);
Clear(MatchALatch);
} else { //por defecto
ClearAllLatches();
}
}
Aunque a simple vista parezca "simple" es mas complejo de lo que aparenta, el etpu trabaja por codificacion en las funciones, si os fijais los "else if" a esto se les indica una serie de registros, cuando esos registros coinciden entonces hace determinada "tarea" lo que esta en los parentesis, el caso es que directamente llega a la parte del codigo necesaria, no se pone a testear, testear y encontrar, simplemente crea una tabla donde los datos estan codificados segun los registros por ejemplo: x01xxx y salta directamente al codigo. Otra cosa a añadir es que como anteriormente decia el etpu va paralelo a la CPU por lo cual aunque yo ponga en pause el debug en la cpu el etpu sigue funcionando, desconozco la forma de debugear el etpu, se que en el codewarrior etpu me deja simularlo pero no he conseguido debugearlo directamente del micro.
Todas las funciones que veis son macros, al final se traducen en unas pocas instrucciones en asm, como por ejemplo:
SetupMatch_A(val/reg,x,attribute);
movei ert_a, <ert_val\reg>
tbs_b.ge.c2.m1
opac_a.<opac_attribute>
erw_a clr mrl_a mtd.ena
Las funciones en asm para microcode no tienen nada que ver con las de la CPU, en este caso las del microcode hacen mas operaciones en una instruccion.
-
Que chulo Merlinz, enhorabuena ((:-))
No conocía lo de la eTPU, que pasada!!!
¿qué placa de desarollo es esa? Yo quiero una para ayer :D
-
la placa es una trk-mpc5634m.
La verdad es que si es una pasada, entre mas leo mas me impresiono, las posibilidades son enormes.
-
Bueno hoy he conseguido imitar la señal del sensor de posicion del cigueñal, cuando usaba el dspic tenia un pic18 que emulaba la señal ya que disponia de un numero limitado de timers, en este caso como "me sobran" lo que he hecho es que el propio mcu emule la señal para asi tenerla "a mano", y lo mejor de todo es que es muy sencillo, no son mas de 30 lineas de codigo, lo unico que hace es sincronizar un canal con otro y envia las señales pertinentes.
(http://s11.postimg.org/mvhdita0x/emu.png)
Aunque no se vea la señal inferior simplemente es una señal constante 50% duty y nada mas, la señal superior indica la posicion de cada cilindro, y la inferior indica cada grado de la posicion del cigueñal.
-
No se ve la imagen, Merlinz!!
-
la placa es una trk-mpc5634m.
La verdad es que si es una pasada, entre mas leo mas me impresiono, las posibilidades son enormes.
¿El chip es muy nuevo?. No veo stock en ningún sitio. :(
¿qué programador utilizas? El que veo en la web de Freescale vale 900$ :shock:
-
No es muy nuevo pero si, es complicado de encontrar, no hay stock en ningun sitio, pero de la placa de entrenamiento si hay stock. Incluso en la web de freescale no lo ponen como sample. El unico sitio con stock:
http://www.aliexpress.com/item/2PCS-LOT-SPC5634MF1MLQ80-SPC5634MF1M-144-LQFP/1836697098.html
El programador que uso es el multilink. De todas formas si te compras la placa de entrenamiento tiene su propio BDM que solo necesitas un cable usb (lo trae includo vamos xD), pero es mas lento que el programador.
MLGSOFT a mi si me sale, te sale la imagen de la placa en los primeros posts?? A ver si es que tu pais ha bloqueado ese servidor o algo xD
-
No sale ninguna imagen de tu hilo... :shock: :( :(
-
a ver si en este servidor te salen:
(http://nsae01.casimages.net/img/2014/05/03/mini_140503013950909673.jpg) (http://www.casimages.es/i/140503013950909673.jpg.html)
-
MGLSOFT: yo también lo veo.
Gracias MerLinz. Veo que en farnell habrá stock en unos meses:
http://es.farnell.com/jsp/displayProduct.jsp?sku=2314658&CMP=GRHB-FINDCHIPS-1000684
Pero como casi todo lo de Farnell está caríiiiisimo.
¿Para que se utiliza este micro en concreto en automoción?. Yo lo estoy mirando porque la cantidad de canales eTPU y canales PWM creo que lo hacen una buena opción para controlar motores DC. La mayoría de DSPs que veo tienen solo 1 o 2 canales para enconders y aún así los venden como "la solución definitiva para controlar steppers" :P, eso esta muy bien pero si tienes una máquina con muchos motores necesitas poner muchos chips y encima sincronizar todo el sistema :(.
Igual me estoy equivocando y existe un chip más adecuado para lo que busco...
Un saludo!
-
Ahora si salen, gracias !! :-/ :-/
-
En digikey te dan plazo para 2 meses y no es tan caro.
Este MCU se utiliza principalmente para el control del motor, es decir, inyeccion, chispa, actuadores y sensores, es por eso que tiene muchos canales etpu (para controlar inyeccion, chispa, sensores y actuadores) una buena cantidad de canales ADC (para controlar los sensores) y etc... Pero la principal cualidad es que le puedes meter directamente la señal del sensor de cigueñal (previamente adaptandola a digital) y asi saber en que posicion se encuentran los pistones.
Para controlar motores DC/AC tambien he visto librerias de etpu, no se si es lo que buscas ya que no estoy muy metido en el tema http://www.freescale.com/files/32bit/doc/app_note/AN2869.pdf?&Parent_nodeId=&Parent_pageType=
El caso es que segun he podido ver todas las MCUs con ETPU son caras, STMicroelectronic tambien fabrica mcus con etpu y es lo mismo, aparte tambien son complicados de que los tengan en stock por su precio y que no son muy usados asi que no tienen grandes stock porque no los suelen vender.
Los hay de mas de 32 canales, digamos que hay otros que llevan 2 modulos etpu y son 32 por modulo (64 en total). Incluso los hay de doble nucleo (2 mcus en 1) pero su precio mejor ni decirlo xD
Simplemente enterate si es lo que necesitas y si es asi te buscas uno con etpu y que se adapte a tus necesidades (frecuencias, pines....) y si eso pues te lanzas.
Tambien comentar que hay DSPs con muchos timers tambien, recuerdo haber visto una en freescale con 12 timers, pero no es etpu. Y de microchip recuerdo el dspic33ep256mu810 que usaba que tenia 15 OC y 9 timers
-
Gracias MerLinz, me informaré,
-
Bueno ya le he pillado el truco al microcode del etpu. Actualmente estoy usando 5 canales y va perfecto. He conseguido una precision/resolucion de 0,1grado, es tan simple como poner un valor de por ejemplo 65 para obtener 6.5grados cosa que facilita mucho la programacion ya que en el pic tenia que calcular los 0.X por porcentajes de valor. Simplemente he dividido cada grado por 10 ticks, programo el valor y salta en ese valor.
Hacer este sistema es bastante sencillo, por un lado tengo un contador que se incrementa con el CLOCK de la CPU, en mi caso la he puesto a 10Mhz (100ns por valor), por otro lado tengo otro contador que se incrementa externamente por el sensor de posicion del cigueñal, este contador se incrementa por rising, falling o rising+falling, en mi caso cada rising = 2º de cigueñal, lo que he hecho ha sido dividir cada rising en 20 valores, todo esto se hace mediante hardware, es decir, programas un contador y se incrementa automaticamente, ahora si yo quiero poner la chispa que ocurra a 20.3º (habria que calcular todo el sistema de BTDC y demas) simplemente pongo el valor que corresponde con este tiempo acabado 203 y ya obtengo ese tiempo mediante un match (equivalente a un timer cuando seleccionas un valor y este llega a este valor).
En fin, resumiendo, muy sencillo manejarlo, lo mejor es que para controlar esos 5 canales simplemente he utilizado 1kb de los 14kb que contiene, seguramente optimizandolo consiguese menos, pero me sobra. Lo mejor de todo esto es que se controla todo con el microengine y la CPU solo inicializa esto y ya no hace nada mas (por ahora) XD
-
Excelente data !!! me agendo tu post.
-
No es muy nuevo pero si, es complicado de encontrar, no hay stock en ningun sitio, pero de la placa de entrenamiento si hay stock. Incluso en la web de freescale no lo ponen como sample. El unico sitio con stock:
http://www.aliexpress.com/item/2PCS-LOT-SPC5634MF1MLQ80-SPC5634MF1M-144-LQFP/1836697098.html
El programador que uso es el multilink. De todas formas si te compras la placa de entrenamiento tiene su propio BDM que solo necesitas un cable usb (lo trae includo vamos xD), pero es mas lento que el programador.
MLGSOFT a mi si me sale, te sale la imagen de la placa en los primeros posts?? A ver si es que tu pais ha bloqueado ese servidor o algo xD
MerLinz,
he vuelto a mirar en Freescale y he visto que se pueden comprar algunos micros directamente a ellos (qfp144) por unos 12$ cada uno: por si es de tu interés.
Sigo evaluando utilizarlos o no. En realidad sería un proyecto en común con otra gente. El problema es que sólo hay comunicación por CAN-bus y SPI por lo que los PID debería hacerlos ese micro y no se si va a dar para controlar varios motores en lazo cerrado...
Un saludo!
-
No comprendo mucho tu proyecto, pero tienes una MCU de 32bits @ 80Mhz (no se cuantos DMIPS daba) sin contar que tienes por otro lado un modulo etpu que corre en paralelo con la CPU asi que es como si tuvieses 2 MCUs. Tambien tiene 2 modulos CAN y 2 modulos SPI, si te explicas un poco mas te podria ayudar, cuantos motores, a que frecuencia irian...
-
Hola MerLinz, MUY BUENO! lo tuyo, mi interes en aprender a programar microcontroladores siempre fue para implementarlos en el control de motores de DC, y actuadores.
En mi caso me decidí directamente por los Freescale, aunque mi nivel es nulo y los agarro en cuanto tengo tiempo, acá en esta sección encontré a personas muy avanzadas siempre dispuestas a tenderme una mano.
La placa evaluadora que estas utilizando trae terrible micro, lastima que por aca, Argentina, el tema de las importaciones esta muy complicado, y debemos conformarnos con mucho menos (en lo que respecta a Freescale), yo utilizo un BDM, de fabricacion nacional que es muy bueno para principiantes como yo, aunque un P&E, me facilitaría mas las cosas.
Implemente un vector para hacer parpadear 8 led, pulsador y led con debunce por software, y ahora estoy tratando de configurar mi primer PWM, en un MC9S08QG8, primero interpretar como configurar los registros coreespondientes, y despues implementar alguna condicion que me desbanezca un led, comparado con lo que muchos han logrado una pabada total, pero por algo hay que empezar, espero poder construir algun dia algo interesante relacionado con motores y Freescale.
Bueno esto no ayudo a nadie, solo lo quería comentar, un saludo y a practicar se ha dicho. :-)
-
Es bueno saber que hay gente con freescale, porque realmente he visto muy poco por ahi, la mayoria la he tenido que sacar del datasheet y de los limitados ejemplos que pone el fabricante, cuando digo limitados lo digo porque son muy pocos y son ejemplos muy complejos a diferencia de un "hello world" de toda la vida, es mucho codigo y es dificil comprenderlo pero nos apañamos.
El caso es que se me esta haciendo bastante sencillo, recuerdo cuando me tire varios dias buscado la manera de meter el codigo a la etpu, ahora me resulta tan simple como encender un led xD
-
Es bueno saber que hay gente con freescale, porque realmente he visto muy poco por ahi, la mayoria la he tenido que sacar del datasheet y de los limitados ejemplos que pone el fabricante, cuando digo limitados lo digo porque son muy pocos y son ejemplos muy complejos a diferencia de un "hello world" de toda la vida, es mucho codigo y es dificil comprenderlo pero nos apañamos.
El caso es que se me esta haciendo bastante sencillo, recuerdo cuando me tire varios dias buscado la manera de meter el codigo a la etpu, ahora me resulta tan simple como encender un led xD
+1
-
Bueno ya me ha quedado bastante claro todo el etpu2, ya he conseguido hacer todo el sistema de encendido e inyeccion y me ha resultado bastante sencillo, ademas en muy poco codigo, simplemente quedaria afinarlo un poco y ya no quedaria mucho mas que hacer. Este seria el resultado:
(http://sia1.subirimagenes.net/img/2014/05/12/140512113832676546.png)
Me faltarian 2 señales mas de los inyectores, pero el analizador logico solo tiene 8 canales xD
Serian los 2 primeros las señales del cigueñal/arbol de levas, los 4 siguientes el encendido (chispa) y los 2 siguientes la inyeccion (en total he usado 10 canales).
Tambien otra novedad es que he pedido 5 samples de estas MCU, no se porque en el apartado samples no me aparecia, pero si pongo el numero directamente si me aparecen los samples
Otra cosa a añadir es que los canales pueden compartir funciones, en mi caso solo existe una funcion de encendido y una de fuel, estas funciones estan compartidas por 4 canales distintos pero a la hora de la verdad seria como tener una funcion replicada por canal, existe la posibilidad tambien de poder compartir las variables o bien que cada canal tenga sus variables propias, en mi caso el fuel cada canal tiene sus variables y el spark como no lo necesito todos los canales utilizan la misma RAM.
Todo esto lo he hecho en muy poco tiempo, es cierto que en mi cabeza ya tenia la teoria de como hacerlo y era cuestion de ponerlo en practica, sin embargo hacerlo con un pic era bastante mas complejo, seria lo equivalente a clavar un clavo con un martillo y con una piedra, en ambos casos se puede clavar, pero con el martillo es mas facil y efectivo, voy a poner unas ventajas e inconvenientes que he visto al cambio con el dspic33 que usaba:
Ventajas:
-ETPU2 (facil diseño, rapidez y efectividad)
-Puedes alimentar el MCU con varias tensiones y tienes un ADC de 5V, con varias tensiones quiero decir por ejemplo ponerle al spi 3.3v, al GPIO 5V... pero esta limitado, es decir, tienes varios perifericos unidos a cada voltaje, por ejemplo el SPI A y B solo tienen un voltaje y no le puedes poner distintos a cada uno.
-El MCU funciona a 1.2V y unicamente requiere un transistor NPN conectado a varios pin del MCU para regular esa tension de 5V a 1.2V
-Tiene bastantes mas perifericos que el pic: muchos timers (sin contar etpu2), CAN, LIN.
-Seleccionable caracteristicas de los PIN GPIO, por ejemplo capacitancia, rising time....
Inconvenientes:
-No trae USB
-La seleccion de perifericos por puertos la echo de menos, en el dspic podias asignar la mayoria de perifericos al PIN que tu deseabas, en freescale cada PIN tiene sus funciones que se pueden elegir, suele ser 3 perifericos por PIN pero esos pines se repiten, por ejemplo la mayoria de pines analogicos solo sirven para eso, no los puedes usar como GPIO por ejemplo.
-
Felicitaciones por enésima vez !!!, perdón por la indiscreción pero este trabajo es para Argentina u otro país ?
Saludos !
-
Por ahora seria para España, sin embargo al final seria internacional ya que iria orientado al mundo del automovil y seguramente tendria mas exito fuera que aqui.
-
((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))MUY BUENO, MIS FELICITACIONES. Y AGUANTE FREESCALE!.
Salu2.
-
Bueno, hoy he conseguido hacer funcionar las interrupciones, pense que iba a ser mas complejo pero codewarrior tiene unas funciones que hace que sea "supersencillo", hasta que las encontre me he tirado 2 dias buscando informacion ya que como repito, es muy limitada, apenas hay informacion de usuarios asi que la mayoria de veces te tienes que buscar la vida.
Pongo un pequeño ejemplo:
INTC_InitINTCInterrupts(); //INICIALIZAMOS INTC (funcion creada por codewarrior)
INTC_InstallINTCInterruptHandler(ISR_ETPU_CH27,VECTOR_ETPU_CH27,10); //Asignamos la ISR_ETPU_CH27 al VECTOR 95 (los vectores estan en el reference manual del mcu); PRIORIDAD 10; 0->15
INTC_InstallINTCInterruptHandler(ISR_ETPU_CH29,VECTOR_ETPU_CH29,10);
ETPU_InitInterrupts(); //Iniciamos los FLAGS IE=1 de los correspondientes canales
INTC.CPR.B.PRI = 0; //Ponemos la prioridad mas baja en 0, si se pusiera por encima de 10 no saltarian las interrupciones, en los pics es similar
asm(" wrteei 1"); //interrupciones ENABLE, parecido al GIE de los pics
void ISR_ETPU_CH27(void) { //FUNCION interrupcion, se salva/restaura todo automaticamente
eTPU->CISR_A.B.CIS27=1; //clear flag (un write = 1 equivale a CLEAR, sin embargo el registro se lee como 0 en caso de estar clear)
*cFUEL_TIME=2000;
}
-
Aqui otra novedad:
Sistema de PEAK&HOLD en inyeccion mediante etpu+emios
(http://sia1.subirimagenes.net/img/2014/05/15/140515101456693831.png)
Se trata de un sistema para usar inyectores de baja impedancia, 1ms de pico (configurable) +-4A para que la aguja se abra con la maxima rapidez posible (dead time) y luego un PWM con un duty configurable para que la corriente quede sobre 1A y evitamos el calentamiento del inyector. En el anterior proyecto con dspic tambien lo hice, pero era 3 veces mas codigo y complicado, con esto simplemente ha sido agregar unas cuantas lineas y se acabo :-/
-
Excelente !!!
-
Bueno, al fin he conseguido otro progreso, despues de estar 2 dias dando vueltas he conseguido hacer funcionar el eDMA junto con el eQADC.
Se trata de conseguir hacer que se autoescanee una entrada analogica y que el valor se actualice en una variable en la RAM. Es algo bastante util que usaba en el pic y he conseguido hacerlo funcionar en freescale. Imaginaos tener el valor del ADC en una variable sin tener que hacer nada, se actualiza el valor automaticamente, pues eso es lo que he conseguido (aunque por ahora solo la mitad).
Pongo un resumen para los curiosos:
-Cada canal DMA contiene su propio periferico, por ejemplo el canal 1 esta dedicado a la lectura del ADC fifo0, el canal 0 a la escritura del adc fifo0
-Se configura el ADC y el DMA, es algo complejo porque a diferencia del pic tiene el triple de registros y configuraciones.
-Se activa el canal DMA correspondiente y se acabo.
-
El viernes, en Expotrónica, la empresa DTA de Córdoba, presento un desarrollo hecho por ellos, que van a comercializar en Argentina, y por lo que entendi, esta hecho sobre este micro de Freescale que presenta Merlinz.
Voy a seguirlo al proyecto, porque sera interesante poder jugar con un bicho de estos...!!
-
De que se trata el proyecto de DTA??
Yo os animo a que si lo necesitais os metais, porque al principio choca, pero poco a poco es como un pic cualquiera.
-
La empresa DTA (http://dta-sa.com/index.html) es una empresa Argentina dedicada al tema aeroespacial.
En conjunto con universidades y empresas sin fines de lucro, desarrollaron esta placa que digo, para ser utilizada en el ámbito industrial.
No asistí , lamentablemente, a toda la charla, pero me imagino, por lo que si pude escuchar, que tiene muchos de los módulos que estas utilizando y que nos deleitas con tu relato.
En cuanto tenga mas información, se las pasare.
-
Al fin un empujón a emprendedores con Freescale, en gral, pero en particular a los que estamos en en Argentina, ya que son poco a los que nos interesan estos micros, bien ahí! (parafraceando a RICHI777).
((:-))
-
Bueno, vengo con mas novedades, hoy me ha tocado investigar el DSPI (spi) y esta bastante interesante, para empezar he visto que los CS (chipselect) son automaticos!! Es decir, tu envias un dato al FIFO junto con los CS que quieres activar y se activan automaticamente sin necesidad de ponerte tu a poner el estado del pin en 0 o 1
-
Bueno, hoy le toco al DSPI, he estado mirandolo a fondo y haciendolo funcionar, al final lo he conseguido.
Este SPI funciona como el eqadc y la mayoria de modulos, mediante comandos, es un buffer fifo le vas enviando comandos (de transferencias por ejemplo) y este las transmite incluyendo las configuraciones para esas transferencias.
He conseguido enviar 32bits en 2 transferencias (16+16) haciendo que el CS se active al principio y se desactive en la 2ª transferencia, con esto se podra enviar todos los bytes que se quiera de un golpe, la utilidad que queria hacer es enviar datos a una memoria SPI todo junto, en el dspic33e lo hice funcionar mediante DMA, primero se enviaba la ADDR y demas datos (WREN) y luego se volcaba todos los bytes necesarios, esto resultaba bastante comodo ya que si querias escribir 20bytes de una configuracion enviabas primero los datos (wren, address) y luego activabas la DMA para volcar todos los bytes.
En el caso de freescale me va a resultar mas simple ya que no tengo que controlar el pin CS, la idea es crear un array de comandos y enviarlos todos por DMA seria algo asi:
->Comando WREN (CS activo y desactivo)
->Comando WRITE TO ADDRESS (CS activo)
->Comando volcado de todos los bytes.... (por ejemplo 20bytes)
->Comando ultimo byte (se desactiva CS).
Todos estos comandos los escribo en un array y mediante DMA se envia todo sin tener que hacer nada mas. La diferencia entre el dspic33e y este es simplemente que tenia que enviar los bytes de wren y write to address manualmente y luego hacer el volcado de todos los bytes seguido por desactivar el CS cuando acababa la transferencia.
(http://sia1.subirimagenes.net/img/2014/06/12/140612104218434480.png)
Otra cosa importante y util que se me olvidaba poner, el numero de bits por transferencias se puede modificar, es decir, puedes enviar un minimo de 3bits hasta 16bits por transferencia, si por ejemplo quieres enviar 8 bits pues lo haces mediante 2 transferencias de 4bits o bien 1 de 8 bits.
-
Me uno al hilo.
-
Bueno, ya he conseguido hacer el algoritmo para escribir una memoria por spi (en mi caso nvram) que son parecidas a las flash pero no es necesario borrarlas ni escribir por sectores.
(http://sia1.subirimagenes.net/img/2014/06/15/140615034731703933.png)
Todo se hace mediante DMA+SPI, se activa el DMA y no es necesario hacer nada mas, se encarga de todo.
En este caso seria
8bits para el WREN
16bits WRITE+ADDR( 8bits)
16bits ADDR( 8 )+ADDR( 8 ) (seria un total de 24bits de ADDR)
escrituras a SPI de 16bits de los datos (en este caso son 20bytes, un total de 10 escrituras).
En la ultima escritura se pone el CS->HIGH para poner fin a la escritura.
-
He pensado en hacer un video-tutorial en youtube pero no se si tendria mucho exito, son mcus que nadie quiere usar jeje. Vosotros que opinais??
-
He pensado en hacer un video-tutorial en youtube pero no se si tendria mucho exito, son mcus que nadie quiere usar jeje. Vosotros que opinais??
Y porque no hacerlo?? :D :D
-
Estaría muy bueno aprender de ese micro.
saludos.
-
Hare algo, si va bien pues seguire, sino pues siempre puedo dejarlo jeje
-
He probado una caracteristica que vi los primeros dias, se trata del slew rate, se puede configurar que una salida tenga una subida de flanco mas rapida o mas lenta (por defecto), pensaba que se notaria solo un poco, pero no es asi, se nota bastante, estoy trabajando con el eSCI (usart) a 2.5Mhz y aqui teneis la diferencia:
slow:
(http://sia1.subirimagenes.net/img/2014/06/22/140622023500699689.png)
fast:
(http://sia1.subirimagenes.net/img/2014/06/22/140622023459879439.png)
Como se puede observar una es mas cuadrada que la otra
Existen tambien otros puertos denominados "fast" que son mas rapidos aun.
-
Bueno, he encontrado una gran funcion!!
Se trata de poder usar la RAM para el codigo, en principio no tiene ninguna ventaja, excepto en la de debugear, aparte de poder cambiar el codigo sin tener que reiniciar el programa (modificando la RAM) la ejecucion del debugger son 5s, ya no tengo que esperar a que se grabe la flash, el propio programador sube el codigo a la ram y lo ejecuta. En realidad usar la ram o flash para la ejecucion del codigo es identico, excepto que la flash se utiliza en la addr 0x0 mientras que la ram empieza en 0x40000000.
Creo recordar que en los pic32 tambien se podia hacer algo parecido, pero desconozco si se puede ejecutar el codigo completo en la ram solo cambiando el proyecto de FLASH a RAM.
-
Otra importante novedad.
Ojeando el eQADC he descubierto que se le puede añadir un timestamp!! Es decir, automaticamente en cada captura te captura un registro interno (basado en el tcy/divisor) y te lo añade en el FIFO (en mi caso todo mediante DMA). Osea podemos añadir a cada captura un tiempo para asi poder un control, esto es interesante por ejemplo para una captura donde necesitemos saber en que tiempo se ha realizado.
(http://www.subeimagenes.com/img/timestamp-1054604.png)
En mi caso se hacen cada 6272 TCY (cada 78.4us).