Autor Tema: Calculadora científica y graficadora 2D/3D con PIC  (Leído 22627 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Calculadora científica y graficadora 2D/3D con PIC
« en: 09 de Diciembre de 2009, 04:44:20 »
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)^2
x^2+y^2
sqrt(20-x^2-y^2)
sin(x)cos(y)
Sin3xCos3x
sqrt(5-x^2)-sqrt(9-y^2)
x^2+y^2-2
x+y
x^2+y^2-2
(sqrt(5-x^2)-sqrt(9-y^2))

Sus graficas o ecuaciones son bienvenidas! :D

página del proyecto original:en foro uControl
Repositorio del parseador y evaluador:http://github.com/brunof/PicParser
Repositorio del software de la calculadora/graficadora:http://github.com/brunof/PicCalcGraph
Proyecto con pantalla color(Autor: Suky)Aquí
« Última modificación: 03 de Diciembre de 2011, 05:46:29 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #1 en: 09 de Diciembre de 2009, 05:34:30 »
Me quedo boquiabierto, maestro Bruno. Eres el puto amo.

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #2 en: 09 de Diciembre de 2009, 06:23:21 »
Hola,
Un trabajo impresionante Bruno. Mis felicitaciones.
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #3 en: 09 de Diciembre de 2009, 06:54:10 »
Hola BrunoF!

Me gustaría aportar un pequeño código a la calculadora que creo que es muy útil. Se trata de la función nsolve que encuentra valores de una variable que hacen cumplir una ecuación
    nsolve( 3 * x + 5 = 7 , x ) devuelve un 0.666
    nsolve( #e^(x) + x = 10, x ) devuelve 2.070579901
Mi calculadora casio de 20 € la incorpora y te ahorra mucho tiempo ya que no tienes que estar despejando ecuaciones para resolverlas.
El método que utiliza para resolver se llama el Metodo de Newton ( http://es.wikipedia.org/wiki/M%C3%A9todo_de_Newton )
y este necesita de derivadas numéricas que se pueden obtener mediante la definición diff(f(x),x) = lim((f(x+h)-f(x-h))/(2*h),h,0) .

También voy a mirar el parser y el evaluador para ver si se podría añadir operaciones con matrices.

Desconectado Drod

  • PIC16
  • ***
  • Mensajes: 136
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #4 en: 09 de Diciembre de 2009, 07:09:11 »
Creo que mi Casio de mil años se va a jubilar!  :D


Felicitaciones! Impresionado!

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #5 en: 09 de Diciembre de 2009, 08:04:21 »
Joder Bruno  :D :D  no se te quemaron los cable de la cabeza pensando en Formulas  :D :D :D
Muy buen proyectos :mrgreen:

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #6 en: 09 de Diciembre de 2009, 09:28:11 »
Espectacular! Faltaba poquito nomas!  :mrgreen: Esta realizado en un PIC24FJ256GB110 ?Si es así, lo complicado va a ser armar el hardware  :(

Felicitaciones por el logro  :-/


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #7 en: 09 de Diciembre de 2009, 09:58:00 »
Es como un mini matlab pero con pic jeje... llamémoslo piclab  :D

Felicidades Bruno.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #8 en: 09 de Diciembre de 2009, 10:23:26 »
Gracias por los halagos! :D

Hola BrunoF!

Me gustaría aportar un pequeño código a la calculadora que creo que es muy útil. Se trata de la función nsolve que encuentra valores de una variable que hacen cumplir una ecuación
    nsolve( 3 * x + 5 = 7 , x ) devuelve un 0.666
    nsolve( #e^(x) + x = 10, x ) devuelve 2.070579901
Mi calculadora casio de 20 € la incorpora y te ahorra mucho tiempo ya que no tienes que estar despejando ecuaciones para resolverlas.
El método que utiliza para resolver se llama el Metodo de Newton ( http://es.wikipedia.org/wiki/M%C3%A9todo_de_Newton )
y este necesita de derivadas numéricas que se pueden obtener mediante la definición diff(f(x),x) = lim((f(x+h)-f(x-h))/(2*h),h,0) .

También voy a mirar el parser y el evaluador para ver si se podría añadir operaciones con matrices.


Interesantísimo. Yo en mi HP48 también tengo algo parecido. Si necesitás ayuda con alguna parte, no dudes en preguntar...:)

Espectacular! Faltaba poquito nomas!  :mrgreen: Esta realizado en un PIC24FJ256GB110 ?Si es así, lo complicado va a ser armar el hardware  :(

Felicitaciones por el logro  :-/


Saludos!


No, esta realizado con un 18F6722 que es un 18F con 128K de memoria ROM, que es lo que el aparato devora. El código también entra en un 18F4550. Hay una gran parte de la ROM que está siendo consumida por "printf()" innecesarios, que actualmente uso para guiar al usuario durante el proceso de ingresado de los datos...

El circuito electrónico es hiper sencillo. Actualmente sólo consta de la conexión al LCD y 2 pines para la terminar virtual.

Comento lo que ocupa(parser+evaluador+main) en los peores casos:
PIC:Worst case RAM:ROM:Worst case Stack levels:
18F455017%(348 bytes)63%(20640 bytes)5(of 31 avaiable)
18F672221%(434 bytes)16%(20718 bytes)5(of 31 avaiable)

Obviamente el 18F6722 tiene muchísima más ROM que el 18F4450. 128KBytes contra 32KBytes(lo cuadriplica en tamaño) y por eso la diferencia.
En la circuito de Proteus aparecen ambos, pero no se asusten que sólo funciona el de abajo en la simulación... :D

Es como un mini matlab pero con pic jeje... llamémoslo piclab  :D

Felicidades Bruno.

Ja ja! Bueno, por que no? Aunque para llegar a algo parecido a MatLab vamos a necesitar bastante trabajito más... :oops:

La idea es que quien quiera participe el proyecto. Para ello estará el repositorio, y cada uno aportará lo que quiera/pueda.
A mi me ha encantado hacerlo, pero la verdad que uno se va erosionando con cada línea que crea. Ojalá podamos expandirla y dotarla de una interfaz grafica y menúes dígnos, para poder darle un acabado profesional.

Saludos.
« Última modificación: 09 de Diciembre de 2009, 10:33:05 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #9 en: 09 de Diciembre de 2009, 10:34:19 »
Oye Bruno, veo el 18f6722 y corre hasta 40MHz, ¿no te convendría el 4550 que corre hasta 48MHz?  :mrgreen:

Desconectado salchig

  • PIC10
  • *
  • Mensajes: 14
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #10 en: 09 de Diciembre de 2009, 10:38:03 »
Wouu  :o excelente trabajo ers un genio. Solo no encontre el comando que hace rotar las graficas entorno al eje z  :lol:

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #11 en: 09 de Diciembre de 2009, 10:41:09 »
Terrible pedazo de soft.

Aplausos para vos!!!  :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Seria buenisimo poder hacer el hard. La idea original quedo muy por detrás del soft.

Felicitaciones otra vez.  :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #12 en: 09 de Diciembre de 2009, 10:44:38 »
Oye Bruno, veo el 18f6722 y corre hasta 40MHz, ¿no te convendría el 4550 que corre hasta 48MHz?  :mrgreen:

Ja ja! A exprimirlo hasta la última gota, eh? :D.

Mira, para graficar la funcion sen(x)cos(y), tarda @ 40mhz 5.5 segundos. En ese intervalo evalúa 2500 veces la función de entrada. Eso daría un promedio de 450 evaluaciones por segundo.

A 48 mhz tardaría 4.6 segundos. Hay una diferencia. Tal vez en cálculos más pesados, o con mayor cantidad de evaluaciones valga la pena. Actualmente preferí el 18F6722 porque es mas holgado de ROM, que es lo que más ajustado andaba.

Wouu  :o excelente trabajo ers un genio. Solo no encontre el comando que hace rotar las graficas entorno al eje z  :lol:

:D

Aunque suene loco, la idea era poder, en el futuro, y mejor aún si trabaja en ese entonces con matrices, poder desarrollar una vista mediante cuaterniones. Esto nos daría la libertad de poder mirar mejor y donde se nos plazca a las gráficas generadas...

Por otro lado, una gran limitante actual de la graficación, es la pantalla de pobre resolución y monocromática. Me gustaría poder conectarle una pantalla de mayor resolución y colores, o bien conectarlo a un TV generando la señal de video compuesto en una resolución digna y algunos colores.

Terrible pedazo de soft.

Aplausos para vos!!!  :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Seria buenisimo poder hacer el hard. La idea original quedo muy por detrás del soft.

Felicitaciones otra vez.  :)

Gracias Ariel! Si habremos renegado juntos, eh?  :D

Prometo postearlo pronto en tu foro! ;)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #13 en: 09 de Diciembre de 2009, 10:47:13 »
el hardware fisico no existe, sólo en el simulador pude utilizarlo.

Que simulador? y como puedo probarlo

Un link de un emulador de la calculadora CASIO PB1000/2000C

http://www.pisi.com.pl/piotr433/pb1000ee.htm

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Calculadora científica y graficadora 2D/3D con PIC
« Respuesta #14 en: 09 de Diciembre de 2009, 10:48:26 »
te pasaste Bruno  :shock:, Gran Proyecto!!  Felicidades:mrgreen:

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek