sábado, 27 de septiembre de 2014

8051 en los paises en desarrollo

Si buscamos en internet información relacionada con los microcontroladores 8051/8052 podremos comprobar que existen una gran cantidad de páginas de la  India, Filipinas, Malasia, Tailandia , etc , de hecho creo que son los países con mayor producción de blogs bajo este tema.

Como es normal, hay de todo, pero no deja de sorprenderme gratamente la cantidad de páginas de nivel hechas por gente muy joven , y en algunas de ellas se puede observar que el autor no dispone de muchos recursos para su elaboración, lo cual  es aún mas meritorio.

La diferencia de precio entre  un micro de mayores prestaciones y un 8051/8052 mas económico es de "apenas" dos o tres dólares. Para muchos de nosotros esta diferencia no es significativa, pero para un estudiante en Bangladesh (por ejemplo) seguramente si lo es.

Los proyectos que se pueden encontrar son de todo tipo y las soluciones técnicas que podemos ver son dignas de reconocimiento ( por ejemplo un detector de humo que consiste en un led y un fotodiodo dentro de un cilindro con una perforación por donde penetra el humo ).

Es bueno tomar en cuenta el reciente éxito de la India ( a la primera !!! )  al  colocar en órbita sobre Marte un satélite de investigación. El proyecto costó menos que la película Gravity (sí, la mano de obra es mas económica que en occidente, pero es tecnología de la India y solo cuatro países han logrado esa hazaña).


Mi profundo respeto y reconocimiento para los  jóvenes de estos países que con tan pocos recursos logran obtener resultados muy significativos utilizando tecnología que en otras partes seguramente se consideraría "obsoleta".

domingo, 21 de septiembre de 2014

8051 : Interfase at89S51 con eeprom 24C512

Los micros de la familia 8051/8052 no incluyen memoria eeprom; en el caso de los micros Atmega si se dispone de este tipo de memoria.
En el mercado hay disponibles memorias eeprom de interfase serial. Son chips muy económicos con capacidades de hasta 128KB y cuya conexión con el micro es a través del protocolo IC2 (serial basado en dos lineas de comunicación).
La memoria eeprom es útil cuando necesitamos guardar información y que la misma perdure aunque no tengamos conectada la fuente de alimentación al circuito. Un ejemplo muy conocido es un medidor de temperatura que registra las medidas durante un período de tiempo para luego realizar las observaciones pertinentes. La desventaja de estos chips es que la velocidad de escritura/lectura está en el orden de los milisegundos.
En nuestro ejemplo deseamos conectar una memoria Atmel 24C512 (64KB) con un micro at89s51.
En la imagen tenemos tres mini-protobroard . De izquierda a derecha:
  • Micro atmega644 funcionando como programador ISP (pueden observarse los cuatro cables) conectado a un ordenador a través del puerto serial (primera interfase serial/USB)
  • Micro at89S51 a 20MHz conectado mediante el puerto serie a un ordenador (segunda interfase serial/USB)
  • eeprom 24C512 con la dirección A0H (todos los pines a tierra).


La conexión de la memoria con el micro es la siguiente:
  1. Pines 1,2,3,4 y 7 a tierra (GND)
  2. Pin 8 a 5Voltios (Vcc)
  3. Pin 5 a puerto P2.1 del micro ( se requiere una resistencia pullup de 10KOhms a Vcc)
  4. Pin 6 a puerto P2.0 del micro ( se requiere una resistencia pullup de 10KOhms a Vcc)
A continuación un ejemplo de código en pascal que nos permite leer la memoria eeprom (el programa utiliza las unidades I2C y eeprom de Igor Funa Turbo51)

A continuación la unidad I2C:

A continuación la unidad eeprom:

Ambas unidades deben ser compiladas y los archivos con extensión .u51 deben copiarse en la misma carpeta donde se encuentra el ejecutable turbo51.exe

En la imagen un ejemplo de lectura de los posiciones 100 a 400 (decimal) mostrado en el terminal:

domingo, 14 de septiembre de 2014

8051 : Atmel 89S51 , programación en Pascal

La programación de microcontroladores en Pascal  no es común, sin embargo para la familia 8051 existe el compilador Turbo51 el cual tiene unas características muy interesantes.

Normalmente se considera el lenguaje C como el mas eficiente en cuanto a tamaño y calidad del código binario creado , asi como también en cuanto a velocidad de ejecución. Si comparamos el compilador SDCC con Turbo51 los papeles se invierten. De hecho el código binario creado por Turbo51 está muy optimizado en cuanto a tamaño y velocidad de ejecución, es por ello que vale la pena experimentar con este compilador.

Al igual que en el caso de otros  compiladores se requiere un editor/IDE para poder crear programas y posteriormente compilarlos. Una opción muy sencilla es el editor de programación PSPAD

La parametrización de PSPAD consiste en modificar la pestaña
Opciones -> Configurar Resaltadores :




Una vez creado el programa fuente en el editor debemos compilarlo :


El resultado de la compilación se muestra en la sección inferior de la pantalla. Si la compilación es exitosa se genera el mensaje  Exit code = 0


El archivo binario .hex se crea en la misma carpeta donde tenemos el programa fuente.
A continuación un ejemplo que permite generar los primeros 47 números de fibonacci, lucas y el número mágico "golden section" y los muestra por el puerto serial (utilizamos un cristal de 24Mhz y la velocidad de conexión con el terminal es de 4800x2=9600bauds):



Una vez creado el archivo binario .hex debemos grabarlo en la memoria flash del micro mediante un programador (en nuestro caso utilizamos un Arduino ATmega644 en modo programador SPI).

En este ejemplo podemos ver lo eficiente que es el compilador ya que el tamaño del binario creado es de 2733B , un número impresionante si tomamos en cuenta que tenemos cargadas las librerías para impresión con formato y utilizamos números de punto flotante.

8051 : Atmel 89S51 , programación en C

El lenguaje de alto nivel C es sin lugar a dudas el mas utilizado en la progamación de microcontroladores.
En el mercado existen muchos compiladores C para la familia 8051, uno de ellos es SDCC .
Para poder crear un programa en C tenemos que utilizar un editor o un IDE que puedan ser parametrizados para el compilador.

Una opción es el editor para programación PSPAD.
La parametrización de PSPAD es muy sencilla, debemos configurar la pestaña:
   Opciones -> Configurar Resaltadores :




En la imagen podemos ver que se modifica la pestaña Compilador.
El último campo (Ejecutar después de compilar) permite generar el archivo binario hex que va a ser cargado en el micro, ya que el compilador por defecto crea un archivo binario con extensión  ihx

Una vez creado el programa debemos compilarlo mediante el botón mostrado en la figura:


El resultado de la compilación se muestra en la sección inferior de la pantalla. Una compilación exitosa genera un Exit code = 0


El archivo binario .hex se crea en la misma carpeta donde tenemos el programa fuente.
A continuación un ejemplo que permite generar los primeros 47 números de fibonacci y los muestra por el puerto serial:


Una vez creado el archivo binario .hex debemos grabarlo en la memoria flash del micro mediante un programador (en nuestro caso utilizamos un Arduino ATmega644 en modo programador SPI).

Es importante tener en cuenta que estamos trabajando con la memoria interna del micro, por lo que sólo disponemos de 4KB de flash y 256B de RAM. Esto impone restricciones importantes en cuanto a los programas que podemos ejecutar. De hecho no  es factible cargar librerías de punto flotante ya que los requerimientos exceden la memoria flash disponible. En el ejemplo el archivo binario creado tiene un tamaño de 2129B y sólo utilizamos la libreria <stdio.h>

jueves, 11 de septiembre de 2014

8051 : Atmel 89S51

La empresa Atmel, fabricante del micro utilizado en los Arduino, dispone de varias familias de microcontroladores con diferentes arquitecturas y características.
Una de éstas  es la familia 8051 de 8bits, la cual emula al famoso  MCS-51 de Intel.
El chip original de Intel fue muy popular en su época y hoy en día existen varias empresas que producen chips con su estructura.

A pesar del avance en las funcionalidades de los micros disponibles en la actualidad y de la popularidad de chips como los AVR de Atmel y los PIC de Microchip, los descendientes del 8051 cuentan con un grupo importante de seguidores. La razón de ello es su simplicidad y la disponibilidad de una gran cantidad de recursos en la web para estos micros (lenguajes, emuladores, documentación, desarrollos, etc).

El micro at89s51 es una de las versiones producidas por Atmel en su familia 8051.


Como podemos leer en su hoja de especificaciones cuenta con las siguientes características:
  • 4KB de memoria flash
  • 128B de memoria ram
  • 32 puertos binarios de entrada/salida
  • Interfase serial UART
  • Programación de la memoria flash mediante protocolo ISP
  • Dos contadores/relojes de 16 bits
  • Seis interrupciones
  • Operación estática desde 0 a 33 MHz
Lamentablemente no posee puertos analógicos ni PWM (pero se puede emular por software).
Este micro puede  disponer de dos bancos de 64KB de  memoria externa para programas y data (hay que recordar que es un micro con arquitectura Harvard) .

Una característica interesante de este micro  es la capacidad de programar la memoria flash mediante el protocolo ISP. 

En el caso del Arduino el procedimiento para programar   el micro at328 es muy sencillo ya que consiste en crear el programa en el IDE y presionar el boton de Carga. Esta es una de las características que ha hecho tan popular esta plataforma.
En el caso de la familia 8051 el procedimiento es algo mas complicado:
  • Debe utilizarse un IDE que permita crear el programa y compilarlo (hay disponibles compiladores c, pascal, forth, assembler, etc).
  • El compilador genera un archivo binario en formato hex
  • Este archivo debe ser grabado en el micro mediante otro programa que se comunica con el programador (existen muchos circuitos de ejemplo en la red)
Originalmente se utilizaba el lenguaje assembler para programar estos micros, pero con el tiempo se desarrollaron compiladores de lenguajes de alto nivel como c y pascal.
Una lista resumida de compiladores sería:
Entre los IDE disponibles en la web tenemos:
  • MIDE-51 Studio : Incluye  editor, compilador  C (SDCC) , ensamblador (ASEM-51) y dos emuladores (JSIM-51 y una versión limitada a 2K de TS Control  Emulator  8051) 
  • MCU 8051 IDE : Incluye  editor, compilador  C (SDCC) , ensamblador (propio y dos adicionales),  emulador , cargador de hex (circuito propio) y muchas herramientas adicionales.
  • Turbo51 Studio : Incluye  editor, compilador  pascal (Turbo 51) , ensamblador ( ASEM-51),  emulador , cargador de hex (circuito propio)  y varias herramientas adicionales.
  • Reads51 :  Incluye  editor, compilador c (propio) , ensamblador ( propio) y  emulador