Calculadora Cientifica-Gráfica con PIC

<< < (69/79) > >>

BrunoF:
Hola gente!

Publico acá lo que había publicado ya en otro foro, para mostrar los avances de la calculadora...

El proyecto nace en el foro de aitopes hace un tiempo. Ingreso al proyecto para crear el parseador de ecuaciones, necesario para pasar de notacion infija a posfija. Esto me conlleva luego a crear también el evaluador de la notacion posfija. Sólo faltaba un pasito mas para lograr ingresar fórmulas y graficarlas, asi que lo hice. Lamentablemente el hardware fisico no existe, sólo en el simulador pude utilizarlo. Espero poder en algun momento tener los componentes necesarios para poder verlo en la realidad.


Características actuales:

Parseador:

Reconocimiento de hasta 3 incógnitas distintas: x y y z;Reconocimiento de números decimales o enteros de longitud variable;Reconocimiento de las operaciones básicas: + - * / % ^;Reconocimiento de las funciones trigonométricas, trigonométricas inversas, trigonométricas hiperbólicas y trigonométricas hiperbólicas inversas;Reconocimiento de las operaciones adicionales log() ln() abs() rnd() sqrt() y sgn();Reconocimiento de paréntesis anidados y su jerarquía;Reconocimiento de multiplicaciones implícitas(ej. 3x, (2*3)(6/2));Reconocimiento de los números especiales PI y e;Optimización de utilización de memoria RAM para poder compartirla con otras funciones de la calculadora;Menos de 50ms @12 MIPS en convertir ecuaciónes semi-complejas a notación postfija;Insensitive case. Reconoce indistintamente ente mayúsculas y minúsculas;Algoritmo de precodificación de operadores(ej. "sin(" a 's', "cos(" a 'c') para optimización posterior de pasaje a notación postfija;Flexible y fácilmente adaptable a nuevas funciones,variables,constantes,etc.
Evaluador:

Evaluación de las funciones básicas + - * / ^;Evaluación de ciertas funciones trigonométricas, trigonométricas inversas y trigonométricas hiperbólicas;Evaluación de las operaciones adicionales log() ln() abs() y sqrt();Evaluación de variables;Evaluación de constantes(PI y e);Capacidad de compartir memoria con otras funciones, para ahorro de RAM. Utilización mínima de memoria;Velocidad de procesado aún no calculada(son bienvenidas las pruebas de ustedes para averiguarlo);Flexible y fácilmente adaptable a nuevas funciones,variables,constantes,etc.
Graficador:
Grafica ecuaciones en el espacio(3D) con proyección isométrica para dar sensación de 3D y profundidad;Grafica ecuaciones en el plano(2D),pero actualmente está deshabilitado;Permite mirar en una zona específica de la función;Flexible y fácilmente adaptable a nuevos tipos de graficación.
Cosas por hacer(ToDo List):
Interfaz y menúes en pantalla para la calculadora/graficadora;Agregado de otros tipos de cálculo, como matrices, derivadas,integrales,etc;...

Requerimientos:
Proteus 7.0 o superior para poder simularlo;Compilador PICC para poder recompilar el codigo si quieren modificarlo;
Consumos actuales:
PIC:Worst case RAM:ROM:Worst case Stack levels:18F455017%(348 bytes)63%(20640 bytes)5(of 31 avaiable)18F672213%(434 bytes)16%(20718 bytes)5(of 31 avaiable)
Forma de uso:
El sistema comienza pidiendo la ecuación de entrada. Podés escribir con el teclado la ecuación y deberá ir apareciendo en la terminal virtual.
Se puede corregir la ecuación de entrada utilizando la tecla Backspace. Una vez escrita la ecuación, presione la tecla <ENTER> de su teclado;Luego se le pedirá que ingrese el valor mínimo de X. Ingrese un valor ya sea entero o decimal y cuando haya terminado presione <ENTER>;Luego se le pedirá que ingrese el valor máximo de X. Ingrese un valor ya sea entero o decimal y cuando haya terminado presione <ENTER>;Luego se le pedirá que ingrese el valor mínimo de Y. Ingrese un valor ya sea entero o decimal y cuando haya terminado presione <ENTER>;Luego se le pedirá que ingrese el valor máximo de Y. Ingrese un valor ya sea entero o decimal y cuando haya terminado presione <ENTER>;Si todo fue ingresado correctamente, la graficación deberá comenzar. La terminal virtual indicará cuando la graficación haya finalizado.
Ejemplo:
Ingreso sin(x)*cos(y) y luego presiono <ENTER>;Digito -8 y luego presiono <ENTER>;Digito 8 y luego presiono <ENTER>;Digito -4 y luego presiono <ENTER>;Finalmente digito 4 y luego presiono <ENTER>;El programa comienza a graficar...;
Finalmente, les dejo algunas capturas de pantalla de diversas superficies con las que he "jugado". Espero les guste.





Ecuación:Gráfica:(x/4)^2-(y/4)^2x^2+y^2sqrt(20-x^2-y^2)sin(x)cos(y)

Sus graficas o ecuaciones son bienvenidas! :D

página del proyecto original:en foro uControlRepositorio del parseador y evaluador:http://github.com/brunof/PicParserRepositorio del software de la calculadora/graficadora:http://github.com/brunof/PicCalcGraph

Emiliano:
Quedo ahora todo muy bien organizado Bruno.
Ahora falta encontrar un micro que aguante todo el soft  ???

jartur:
Buenas gente...

Que buen trabajo Bruno. Mira tengo una prengunta yo estoy desarrollando una calculadora como esta del foro pero al darme cuenta del espacio en rom del 18f4550 que no es suficiente me decidi por colocar todos las ventanas graficas en una eeprom y el codigo de parsear y evaluar en otro pic un 18f2550 que se comunican por serial ttl con esto busco que en el pic pricipal el 18f4550 solo almacene la cadena y esta se la envie al pic este calcule y regrese el resultado para mostrarlo... como ven mi idea? Gracias

BrunoF:
Hola.

Actualmente sigo trabajando en la calculadora. Precisamente por motivos de ROM, he puesto una memoria 24LC256(en un futuro tal vez la agrande de ser necesario) para guardar todos los menúes(graficos).(http://www.youtube.com/watch?v=AYnUhzqFv4Y)

Con respecto a lo de usar 2 uC...Es una decisión personal creo. Yo no me orientaría a eso, excepto que fuese algo que fuese a construir yo solamente. No me parece que haya mucha gente dispuesta a usar 2 uC en un proyecto que podría hacerse con uno.

Fijate que sin salir de la serie 18F, tenes uC con hasta 128K de FLASH.


Saludos.

jgpeiro:
Hola a todos.
Por fin he conseguido hacer mi propia versión de la calculadora con PIC. De momento solo estoy desarrollando el software, pero ya se puede probar y ver sus posibilidades.
He seguido una linea distinta que propuse hace tiempo en el hilo del parser (http://www.ucontrol.com.ar/forosmf/programacion-en-c/c18-function-parser-para-calculadora-cientifica/msg4676/#msg4676).

La calculadora esta basada en las librerías GSL(http://www.gnu.org/software/gsl/) que he conseguido compilar para PIC24 y PIC32 recientemente.
De momento solo trabaja con números complejos y funciones básicas, pero mi intención es añadir matrices y funciones mas complejas como derivadas e integrales...
Reconoce números con decimales (ej 2.78 ), con exponente(ej 1.6e-19), constantes(ej #pi), unidad  imaginaria(#i), funciones (ej sin(z)), operadores basicos, parentesis, variables(ej x = a+b)...
El parser ha sido creado por un generador automático a partir de la especificación de la grámatica.

Estoy utilizando un PIC24HJ256GP610 @ 30MIPS. (ROM = 256K y RAM = 16K)
El programa ocupa ROM = 60K RAM = 4K
Tiempo de ejecución 32mSec

Aquí copio algunas operaciones realizadas:
Código:

TEST_ATOF: 1.5;-1.5;1E3;1.5E+3;-1.5E-3;NaN;INF;
1.5
-1.5
1000
1500
-0.0015
nan
inf

TEST_OPERATORS: 1234+5678; 12*34; 12/34; (1+2*#i); (3+4*#i)^#i; (-5-6*#i)/(7+8*#i); 9+#i;
6912
408
0.352941
1+2#i
-0.0152837+0.395327#i
-0.734513-0.0176991#i
9+1#i

TEST_MATRIX and VECTOR: [1,2,3]; [[1,2][3,4]]; [[1,2]]; [1+2*#i,3+4*#i];
vector
6912
vector
vector
matrix
1
vector
vector
1
vector
1

TEST_FUNCTIOS: sqrt(-1);sin(#pi); #e^(#pi*#i)+1; x=1+2*#i; sin(x);(#e^(x*#i)-#e^(-x*#i))/(2*#i);
0+1#i
1.22515e-16
0+1.22515e-16#i
x = 1+2#i
3.16578+1.9596#i
3.16578+1.9596#i

TEST_CONTANTS: #i; #e; #pi;
0+1#i
2.71828
3.14159

TEST_VARIABLES: x=0.7;i=1*10^-14;v=25E-3;d=i*(#e^(x/v)-1);
x = 0.7
i = 1e-14
v = 0.025
d = 0.0144626

TEST_PLOTS: x^2+2*x+1;
1
4
9
16
25
36
49
64
81
100



Dejo el link en megaupload con el código del programa:
http://www.megaupload.com/?d=3RQZAERJ
Adjunto el archivo con la gramática.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior