sábado, 12 de septiembre de 2015

Simulador e IDE Arduino en la web

Las aplicaciones que normalmente utilizamos en nuestros proyectos de Arduino son programas que instalamos localmente en nuestro ordenador. 
Sin embargo, el auge de aplicaciones cooperativas en la web ha permitido que se hayan hecho desarrollos muy interesantes que nos permiten realizar proyectos sin necesidad de instalar programas localmente.

Dos ejemplos de ello son 123d circuits y codebender.

123d circuits es una página web de la empresa Autodesk que permite hacer simulaciones de circutos electrónicos, diseñar placas, etc.  Una característica muy interesante de esta página es que permite realizar circuitos utilizando placas Arduino como uno de sus componentes. Además del diseño del circuito podemos cargar código en la placa y simular su ejecución. El registro es gratis aunque hay modalidades de pago que ofrecen mayores funcionalidades.



codebender es otro ejemplo de una aplicación cooperativa en la web para trabajar con Arduino, en este caso es un IDE que nos permite desarrollar códígo y cargarlo a traves del puerto USB conectado a nuestra placa. La página esta muy bien elaborada y cuenta con muchas funcionalidades. 
Es necesario instalar plugins para los navegadores (firefox y chrome). Adicionalmente en la página se recomienda instalar los drivers de comunicación para los puertos USB. En mi caso no los instalé y las pruebas básicas de comunicación con una placa Leonardo fueron satisfactorias.
Al igual que en el caso anterior el registro es gratuito pero tienen opciones de pago con funcionalidades adicionales.



No todo el mundo es dado a utilizar aplicaciones en la web, a pesar de la tendencia cada vez mayor a utilizar la web como nuestro "gran repositorio". Sin embargo hay ocasiones en que esta tecnología ofrece ventajas que no ese encuentran en aplicaciones instaladas localmente.  Lo bueno es que están ahi, disponibles para cuando se necesiten (y gratis !!!).


domingo, 1 de marzo de 2015

Números primos grandes en Arduino

Recordando algo de matemáticas podemos decir que un número primo es un número entero que sólo es divisible entre 1 y si mismo. Los números primos son importantes para el común de los mortales porque una gran parte de la seguridad en internet se basa en utilizar un algoritmo muy dificil de descifrar ya que depende de dos números primos muy grandes.
Para mortales no tan comunes , los matemáticos, los números primos son especialmente interesantes ya que no se ha encontrado un algoritmo eficaz para determinar si un número es o no primo. El único algoritmo totalmente determinístico es la criba de eratóstenes , pero este procedimiento requiere recursos inmensos de tiempo y poder de cálculo a medida que los números son mas grandes.
Para otros mortales, como los que tenemos algo que ver con informática, desde muy temprano hemos tenido que desarrollar un programa que emule la criba de eratóstenes. Inclusive se utilizan ciertos algoritmos para determinar el poder de cálculo de un procesador (benchmark).
Es por ello que siempre encontraremos a alguien gastando el tiempo en desarrollar algún programa de búsqueda de números primos para cualquier procesador que tenga entre manos. Y claro, el Arduino no va a quedar huerfano en esta tan encomiable labor !!!
Buscando en la web me encontré con la siguiente entrada en el foro de Arduino  http://forum.arduino.cc/index.php?topic=192209.0 que trata sobre la búsqueda de números primos grandes en la plataforma Arduino.
Para quien tenga unos quince minutos le recomiendo que la revisen aunque sea por encima, ya que entre otras cosas podemos ver como evoluciona el programa desarrollado por el Sr. Nick Gammon (por cierto, muy prolífico en temas de electronica y específicamente Arduino).
Como a mi esto de la teoría de números también me atrae, quise hacer un pequeño aporte.
Haciéndole unas pequeñas modificaciones al programa del Sr. Gammon logré que el programa se ejecutara en un Atmega644 a 20Mhz con una LCD donde se muestran los números primos que van siendo identificados. El programa guarda en el eeprom interno la información cada 1000 números primos, de tal forma que continúa despues de un reset o apagado.  Este número puede ser cambiado en el programa.
La primera que vez que se graba el programa en la memoria flash del micro debemos eliminar los caracteres de comentarios en las líneas 43,44 y 45 , una vez que el programa ha encontrado los primeros 1000 números primos comentamos de nuevo estas líneas y grabamos de nuevo el programa en el micro.

 
 
En la imágen podemos ver la información mostrada en la pantalla del lcd : en la primera línea tenemos el último número primo encontrado, en la segunda línea tenemos durante cuantos minutos ha estado ejecutándose el programa y el número de primos encontrados.

Una mejora al programa sería lograr que se grabaran los primos encontrados en una memoria eeprom externa o en una tarjeta de memoria. Ya veremos ...

Actualización del 09/03/2015
En la imágen podemos ver que después de 9768 minutos ( 163 horas) se han encontrado 731.696 números primos.




viernes, 27 de febrero de 2015

Leer y escribir variables del tipo uint64_t en el eeeprom ( unsigned long long )

La libreria eeeprom original de Arduino permite leer y escribir solamente variables del tipo byte . En caso de querer utilizar variables de otro tipo tenemos que segmentar estas variables en bytes.
En la página arduino.cc hay código adicional que permite utilizar variables de diferentes tipos.Uno de estos programas , muy sencillo por cierto,  permite trabajar con variables del tipo long.
A partir de este código se pueden generar subrutinas para trabajar con variables de 64 bits (unsigned long long , o variables de 64 bits ).

En el recuadro tenemos un programa sencillo con un lazo que escribe y lee en la eeeprom utilizando dichas subrutinas:


Se incluye otra subrutina que permite imprimir en el puerto serial las variables leidas (original de Nick Gammon).