Hola! muy interesante tu proyecto y parece que es algo grande ... yo hice algo similar, debia generar señales senoidales, triangulares, rectangulares, ruido ... todo ajustable, frecuencia, amplitud, fase ... con todos los full extras ... controlador PID, funcion de transferencia, control con matriz de estados, filtros IIR y FIR, sumas, multiplicaciones, etc y pues claro comunicacion con la PC, entradas y salidas tando digitales como analogicas, PWM, encoder, comunicacion I2C y SPI ... y como plus para dejar a futuro proyecto modbus
.... Todo este proyecto fue para un sistemita de adquisicion de datos y control para el laboratorio de control automatico de la universidad.
Ese proyecto fue mi proyecto de fin de carrera, al principio ni siquiera sabia por donde empezar; sin embargo y GRACIAS A DIOS ... tuve un profesor guia bastante sabio que me ayudo bastante. Lo principal de un proyecto son establecer sus bases, ya que si elegiste un camino equivocado resulta una perdida de tiempo y desmoraliza bastante saber que fue el equivocado ...
El me recomendó que usara un RTOS, ni él ni mucho menos yo sabiamos concretamente que era ... pero tuve la corazonada de hacerle caso. Pues investigue bastante y hasta compre un libro ... cree puede que te ayude bastante, Mi primera recomiendacion es:
-
FreeRTOS -
MicroC/OS - IIDonde compre el libro fue en
MicroC/OS - II, MicroC/OS-II de Jean J. Labrosse. Por ahi en internet anda una version ebook un poco mas simplificada.
Un RTOS te va hacer ver el mundo de los microcontroladores desde otro ángulo y te juro que te va a simplificar muchas cosas. Te lo digo, pues tenes un LCD, un teclado, control digital y generacion de señales. Puedes hecharle un ojo, entender como es y para que sirve ... no vas a gastar mucho tiempo, aqui hay una pequeña explicacion del porque un sistema embebido con un RTOS es mejor que sin un RTOS:
http://www.freertos.org/tutorial/index.htmlyo al final utilice MicroC/OS-II es mas sencillo que FreeRTOS.
Como desventaja es que un RTOS te exige un poco mas de procesamiento y memoria; de hecho, los demos de esos RTOS estan montados sobre el dsPIC33FJ256GP710 .. que es quizá el dsPIC mas completo de la familia dsPIC. Si tienes presupuesto, te recomiendo:
- El kit de desarrollo Explorer 16 de Microchip con el ICD2 (o ICD3).
Esas son mis recomendaciones, Ahora contestaré tus preguntas:
¿Las operaciones aritmeticas en el dsPIC debo realizarlas de la forma acostumbrada (el mismo codigo) ?¿o hay una nueva forma de tratar los operandos que sea con intervencion humana?Las podes hacer como tu quieras, usando ASM o el mismo codigo, por ejemplo:
salida = dato1*dato2;
Podes usar punto flotante pero el micro, en sí, no está optimizado para ello. El dsPIC tiene un multiplicador de 16x16 y acumulador de 40bits. Es decir, la forma "optimizada por hardware" de realizar operaciones aritmeticas son en punto fijo. De hecho, C30 utiliza un tipo de dato que se llama FRACTIONAL, y veras que se utiliza mucho en ejemplos, hojas de datos, manuales de referencia ... para ser claro este formato se conoce como Q1.15 o Q15 simplemente.
Q number format Todas las librerias de DSP para dsPIC utilizan este formato. Para hacer multiplicaciones hay que utilizar un poco de ASM, esta es mi rutina de multiplicacion:
_mult15:
MOV W0, W4
MOV W1, W5
MPY W4*W5, A
SAC A, W0
return
y la llamo desde C30 como:
salida = mult15(dato1, dato2);
donde dato1, dato2 y salida son FRACTIONAL.
No he encontrado forma mas sencilla de hacerlo, la verdad desconozco si en las actualizaciones recientes haya mejoras. Como te dije, podes usar punto flotante o punto fijo. Punto flotante te da mucho mayor precision que punto fijo, sin embargo, punto flotante es mas lento y ocupa mas memoria pero es menos complicado.
Con las librerias de DSP, tenes una forma muy rápida de hacer filtros IIR, FIR, hacer FFT y hasta controladores PID. El detalle es que usan FRACTIONAL.
Al inicio los osciladores senoidales los hice con resonadores digitales.
http://www.phon.ucl.ac.uk/courses/spsci/dsp/resoncon.htmly use las librerias DSP, el problema fue que para frecuencias muy pequeñas ... 1Hz y menos, la forma de onda se convertia en triangular en vez de senoidal. El error fue presicion de las operaciones. La solucion fue utilizar la funcion
_Q15sinPI de la libreria de matematicas; esta calcula el seno en formato fractional.
bueno con esto generé señales desde 0.1Hz hasta 500Hz. Te dire que hasta 500Hz pues la aplicacion era estimular sistemas mecánicos y crear reguladores de control en base a ello, de hecho, 500Hz es una alta frecuencia desde el punto de vista de control mecánico.
- El compilador CCS admite dsPIC, ¿Es eficiente en la compilacion? ya que este compilador es muy facil de usar.Si admite dsPIC y es fácil de usar ... como todos los PIC ... sin embargo, parece que PICC de CCS no está del todo optimizado y da muchos fallos de compilacion, el peor de los casos es que compile bien y el proyecto no funcione. Te recomiendo C30 por el momento.
Que otra alternativa al dsPIC podria utilizar para este trabajo?Se mas detallado respecto a los rangos de funcionamiento de tus señales. ¿Cual es la frecuencia maxima? ¿Cual es la tasa de muestreo de los controladores? ... con esos datos te podremos decir si un dsPIC es apto para tu proyecto; si no, hay que pensar en Texas o ARM.
Saludos!