sábado, 30 de agosto de 2014

Nostalgia : SDK-85

Allá por los remotos años 1970-1980 , cuando los microprocesadores estaban en su infancia, los aficionados y profesionales de la electrónica tenían a su disposición lo que se denominaba SDK (System Developtment Kit) . Eran kits para armar y que permitían experimentar con esta nueva tecnología.

Uno de estos kits es el SDK-85 (1977) de la empresa INTEL . 
El microprocesador utilizado es el 8085. Este micro tenía varias características que lo distinguían de su antecesor, el 8080, entre las que cabe resaltar: fuente de alimentación única a 5Voltios, puerto serial, manejo de perifericos externos mas sencillo, etc.

El kit contenía cuatro chips:

  • El micro 8085 a 3Mhz 
  • Chip de memoria RAM : 256bytes + puertos de E/S  
  • Chip de memoria ROM: 2Kbytes + puertos de E/S . En el ROM venía pregrabado lo que se conocía como un programa "monitor", que permitía manipular la memoria RAM para cargar programas en hexadecimal.
  • Chip para controlar un display de leds 7 segmentos de seis dígitos y un teclado  de 24 teclas
Las dimensiones de la tarjeta eran 30.5cm x 25.7cm e incluía un área de expansión para agregar mas circuitos.

En la imagen podemos ver un kit al que se la ha incluido 3Kbytes de memoria RAM , un segundo chip RAM de 256bytes  y un EPROM de 2Kbytes con un "monitor" mejorado que incluye comunicación serial. A raíz de la ampliación fue necesario agregar alimentación de +12Voltios y -12Voltios.


Lo mas complicado es el proceso de carga de programas. Si queremos utilizar el EPROM (memoria borrable mediante luz ultravioleta), tenemos que disponer de una lámpara UV especial para el borrado (aproximadamente media hora) y el grabador respectivo. Si utilizamos la memoria RAM el programa se borra al desconectar la alimentación. Hay que recordar que la carga de programas era en formato hexadecimal, ya que se programaba en el lenguaje ensamblador del micro (el nivel mas bajo de programación).

Comparemos esto con un Arduino actual:
  • Micro a 16 MHz con 32KB de memoria flash, 2KB memoria RAM y 1KB memoria ROM
  • Los programas se cargan mediante interfase USB al PC
  • Se utiliza una versión del lenguaje C para la programación
  • Alimentración a pilas
  • Dimensiones 7cm x 5.5 cm

Que diferencia !!!
Pero de todas formas cuanta nostalgia por aquellos años locos !!!




sábado, 23 de agosto de 2014

Arduino Leonardo ISP

Un uso muy interesante del Arduino UNO es como ISP (in system programmer), es decir, programador de chips . Existe mucha información en la web al respecto.

Sin embargo, si en lugar del UNO tenemos el Leonardo, debemos hacer algunos "ajustes" para poder utilizarlo como ISP.

El enlace de PeterVH suministra la información requerida.

Un resumen del procedimiento sería:
  • Cargar en el  IDE el programa ArduinoISP y modificar las líneas
                    #define RESET     SS
                    #define LED_HB    9
             por 
                   #define RESET       10
                   #define LED_HB    13
  • Grabar el programa en el Leonardo
  • Crear un nuevo subdirectorio llamado leofix dentro del directorio hardware del IDE (..\hardware\leofix)
  • Crear un archivo txt dentro de este directorio llamado programmers.txt  con el siguiente contenido:
  • Al invocar de nuevo el IDE tendremos en el menú Herramientas/Programador una nueva opción, la que hemos creado en el apartado anterior.
  • Lo recomendable es utilizar el conector ICSP de seis pines para conectar el Leonardo con el chip al cual se le desea grabar el programa. Los pines a usar son :
    • Pin 1 MISO (Superior izquierdo)
    • Pin 2 Vcc
    • Pin 3 Sck
    • Pin 4 MOSI
    • Pin 6 Gnd
    • El Pin 5 (Reset) no se utiliza. En su lugar usamos el puerto 10 del Leonardo conectado con el pin de Reset del chip a programar
  • Una vez hecha la conexión entre el Leonardo y el chip  seleccionamos en el IDE la tarjeta correspondiente a este último y procedemos a grabar el programa (opción Archivo/Cargar programa usando programador ) o inclusive grabar  el bootloader ( Herramientas/Grabar secuencia de inicio)
En la imagen podemos ver un ejemplo de Leonardo programando un Attiny45





lunes, 18 de agosto de 2014

Arduino atmega644p : Un arduino ampliado

En ocasiones los puertos disponibles en un Arduino basado en el atmega328 no son suficientes.
Tenemos varias opciones utilizando otros chips de Atmel: atmega1284p, atmega644p, atmega324p.
Mi experiencia con el atmega1284p no es muy buena, ya que hay chips con un defecto de fabricación que hace que la comunicación mediante el primer puerto serial (pines 14 y 15) sea muy difícil. Por lo visto es un problema de ruido que se genera al estar estos pines muy cerca de los pines del cristal. (Hay una versión experimental que utiliza el UART1 optiboot).

Sin embargo al utilizar el chip atmega644p los resultados son muy satisfactorios.

El procedimiento para "crear" un Arduino con un atmega644p es similar al utilizado con un atmega328:

  • Armar el hardware : Cristal externo de 16Mhz , interruptor para reset y led a un puerto para pruebas.
  • Grabar el bootloader mediante un Ardunino en modo ISP :  Instructables.
  • Utilizar una interfase serial/USB para subir los programas.


En la imagen se muestra una versión en protoboard que incluye un regulador de 5V, un panel LCD de dos lineas, un célula fotoeléctrica y un termistor NIC. La lectura de los sensores se muestra en el LCD junto con el tiempo en segundos desde el inicio.

En el caso del bootloader hay varias opciones disponibles. 
  • La primera que utilicé fué la versión de Sanguino . El problema con esta versión es que los puertos analógicos están mapeados de forma diferente al Arduino tradicional.
  • Otra opción es mighty-1284p haciendo varias modificaciones en el archivo boards.txt
  • La versión que utilicé fue la de leonardomiliani.com para el IDE 1.0.5
En el archivo comprimido de leonardomiliani.com se indican los problemas de conexión con los chips 1284p y 644p  y las posibles soluciones. En mi caso , utilizando el 644p,  pude subir programas conectando directamente los cables RX/TX a los pines del chip.

Al probar el comportamiento del chip con dieferentes programas pude comprobar que un programa de validación de libreria de punto flotante que en el Arduino con 386p se detenía en las pruebas de coseno, ahora finalizaba correctamente. Puede ser que la razón sea que en el 644p hay mas RAM disponible.