Entradas

Mostrando entradas de marzo, 2008

Control de un LCD 16x2 con la tool-chain winARM

El siguiente código fue generado utilizando WinARM e Insight. El framework se basó en una aplicación ejemplo de la propia tool-chain y se agregó el código para manejar un LCD de 16 x 2. NOTA: El siguiente código corre siempre y cuando se compile sin optimización, es decir, con -O0 ya que de otra manera por alguna razón falla (probablemente retardos muy lentos). También se utilizó una tarjeta OLIMEX LPC-E2129, y se depuró en RAM con un wiggler JTAG para el LPT de esa misma empresa. El propio código indica los puertos que se utilizaron. El código fuente lo puedes ver aquí Dic-09 Ya sé porqué no funciona con la optimización: El optimizador elimina las variables de retardo. Para evitarlo hay que hacerlas 'volatile': volatile int delay; Con eso se está forzando al compilador a no optimizarlas.

Programación en C para sistemas embebidos

Programación en C para microcontroladores Introducción Una de las herramientas más potentes con las que cuenta un profesional dedicado a los sistemas embebidos (o de aplicación específica) es la programación en lenguajes de alto nivel. Aunque existe una infinidad de lenguajes de dónde escoger, sin duda, C es la opción preferida. Ello debido a dos razones fundamentales: 1. C es un lenguaje híbrido, es decir, es una combinación de ensamblador de alto nivel mezclado con un lenguaje de alto nivel cercano al ensamblador. Esta combinación es la que lo ha hecho tan popular tanto para la programación en máquinas de escritorio como en sistemas embebidos. 2. No hay otra opción. Dicho de otra manera, cuando se programa un sistema desde cero sólo se puede realizar de dos maneras: ensamblador o C. Otros lenguajes como JAVA sólo se implementan cuando se cuenta ya con un sistema operativo (de aquí en adelante OS). Tómese como ejemplo una PALM cuyo OS es el PALMOS, donde además su CPU

Generación de PWM para los micros HC08 y HCS08

El código y la explicación necesarios se encuentran AQUÍ

Las rutinas de retardo se escriben en ensamblador

Regularmente se requieren rutinas de retardo en las aplicaciones, y lo más rápido es hacerlas con loops tipo for o while . Aunque ello funciona la mayor parte de las veces, no se tiene el control de una temporización precisa ya que se desconoce exactamente cúanto transcurre en un ciclo del retardo (este valor puede medirse con un osciloscopio o un frecuencímetro), por lo que hay que jugar con los valores para llegar al tiempo deseado. Una forma un poco más elaborada pero más elegante de obtener retardos exactos es utilizar ensamblador en línea dentro del cuerpo de la función de retardo (o como un procedimiento completo en ensamblador si se encuentra en otro archivo y se enlaza junto con los archivos en C). Gracias al manual o al data-sheet de la CPU se conoce la cantidad ciclos de reloj que toma cada instrucción, por lo que de esta manera se puede calcular a-priori con casi certeza absoluta la cantidad de tiempo que tomará cada vuelta dentro del retardo. Un ejemplo en pseudocódigo se

Modo ISP para el LPC21xx

Para poder entrar al modo ISP (programación en circuito) en uno de los miembros de esta familia se requieren tres cosas La habilitación de los pines de un puerto serial, que depende del miembro, para el LPC2129 es la uart 0. Por "habilitar" entiéndase un convertidor del tipo MAX3232 (no es neceario configurar la uart dentro del chip), aunque luego de ello la uart 0 no se utilice (pines como I/O de propósito general), pero si ya se le puso el max232 mejor utilizarlo y que no se desperdicie. Para el LPC2129 el puerto P0.14 debe estar en bajo (a través de una resistencia de pull-up) para poder entrar al modo ISP. Recuérdese que estas CPU's no tienen resistencias de pull-up-on-chip. Se supone que la línea DTR del puerto RS232 controla el reset de la CPU, sin embargo el max232 sólo alcanza para dos pares tx/rx, por lo que para que la línea DTR controle el reset sería necesario agregar algún circuito a transistor para bajar los niveles. Lo que yo hice fue simplemente controlar

Uso de un teclado y un lcd de 20x4 con una Rabbit-2500

Para ver cómo se utiliza un teclado de 5x4 con un lcd de 20x4 multiplexados, ir al siguiente post que hice cuando me encontré con ese problema http://www.rabbit.com/forums/showthread.php?t=574 probablemente haya que adaptarlo a las necesidades particulares de cada uno.

Uso de GNU-GCC dentro de Keil uVision

Dentro del editor Keil se puede utilizar el compilador GNU-GCC, por lo que se puede escoger que compile con el tool-chain de nuestra preferencia, en mi caso con el WinARM , aunque están otros como el Yagarto , y el que viene con Keil, GNUARM . Tener instalado el tool-chain que vamos a utilizar Dentro de uVision ir a Project->Manage->Components, enviroment, books->Folders/Extensions En el apartado "Select ARM develpment tools" activar la casilla "Use GNU compiler" En la caja de texto "Cygnus folder" escribir (o buscar) la ruta al directorio raíz donde se encuentra el compilador, p. ej. c:\winarm\ En la caja "GNU-Tool-Prefix" escribir el prefijo de los ejecutables. Este texto será añadido antes de invocar al ejecutable. P. ej., si escribimos el texto "arm-elf-" (sin las comillas y con el último guión) el ejecutable gcc será invocado como "arm-elf-gcc" (sin las comillas). Sin embargo, hay que escribir "arm-glue-&quo