domingo, 31 de marzo de 2013

La Familia Crece

Ha pasado un poco de tiempo desde mi última entrada en el blog. Digamos que ha sido un año un tanto complicado. Pero el blog no ha muerto, seguimos con él.

Hace ya un tiempo escribí una entrada sobre la familia discovery. En esta entrada quiero hablar sobre los últimos miembros de la familia: STM32F3 Discovery y STM32F0 Discovery

STM32F3 Discovery


La placa STM32F3 Discovery es, dentro de la familia, una de las placas mejor especificadas en cuanto a periféricos incluidos. El corazón de esta placa es un procesador STM32F303VCT6 de tipo ARM Cortex M3 igual que en la placa STM32F4 Discovery. En este caso, sin embargo, aun siendo también M4, el procesador es más modesto, disponiendo de 256 KB de Flash y 48 KB de SRAM y trabajando a 72 MHz.



STM32 F3 Discovery
Lo que destaca de esta placa, como he comentado antes, son los periféricos incluidos:
  • 8 Leds de usuario distribuidos en un círculo
  • MEMS LSM303DLHC que incorpora un acelerómetro y un magnetómetro ambos 3D que se comunica con el MCU usando un puerto I2C
  • MEMS L3GD20 que proporciona un giróscopo de 3 ejes que se comunica con el MCU con un puerto SPI
Por un precio aproximado de 14 € + IVA es una de las alternativas más baratas para crear un sistema de control completo debido a que mide un total de 9 grados de libertad (3 de aceleración, 3 de giro y 3 de dirección absoluta con la brújula 3D).

STM32F0 Discovery


La placa STM32F0 Discovery es el hermano pequeño de la familia STM32 Discovery. Incorpora un procesador STM32F051R8T6 que pertenece a la categoria ARM Cortex M0. El procesador incorpora 64 KB de memoria Flash y 8 KB de memoria SRAM.

STM32F0 Discovery

En cuanto a periféricos, se trata de una placa modesta. Incorpora sólo 2 leds de usuario y un pulsador. También se ha de de decir que es el miembro más barato de la familia discovery de 32 bits costando menos de 9 € (Sin incluir el IVA). Junto a la placa, como se aprecia en la figura, se proporciona una placa de topos para soldar componentes.

Puestos a elegir veo más interante la placa STM32 VL Discovery, que por un par de euros más posee un procesador ARM Cortex M3, la misma cantidad de memoria SRAM y el doble de memoria Flash. Además cuenta con un cristal de cuarzo de 32kHz muy útil para desarrollar sistemas en tiempo real.
Digamos que la placa STM32F0 es interesante pero no impresiona.





jueves, 19 de julio de 2012

Energia: Un MiniArduino por 4 Euros

Como ya es bien sabido por toda la comunidad que trabaja con proyectos sencillos basados en microcontrolador, Arduino es una plataforma que permite acercarse de manera muy sencilla al mundo de los microcontroladores sin saber prácticamente nada de electrónica. El precio del Arduino más sencillo es de 20 Euros para el Arduino UNO. Bastante barato. Uno se puede comprar el procesador Atmega con el bootloader de Arduino por unos 6 Euros y montarse la placa si va justo de dinero. Parece que es el precio mínimo de desarrollo para no iniciados en microcontroladores, ¿no?

¡Pues NO!  La gente del proyecto Energía ha reventado el precio de los proyectos sencillos desarrollando un entorno tipo Arduino para el Launchpad de Texas Instruments. El software y las instrucciones de uso del proyecto Energía las teneis aquí:


Las instrucciones son muy fáciles de seguir y, una vez arrancado el programa, lo único que se ha de configurar es el puerto en el que se halla conectado el Launchpad y el modelo de microcontrolador que lleva.

Como ejemplo os muestro un programa que he desarrollado en unos minutos a partir del típico ejemplo Blink que hace parpadear un led. Mi modificación hace parpadear dos leds en lugar de uno. No es gran cosa pero demuestra lo fácil que es hacer un programa. Nada que extrañe a alguien que haya usado Arduino.

Sketch Blink2 que hace parpadear dos leds

Escribiendo el Sketch y pulsando el segundo botón desde la izquierda (Upload) el programa se compila y se carga en el launchpad si está conectado al cable USB. En un momento tenemos dos leds parpadeando a distinto ritmo.

Para poder desarrollar programas es necesario conocer la correspondencia entre los pines del microcontrolador identificados como P1.0 a P1.7 y P2.0 a P2.5 (en microcontroladores de 20 pines) y los números de pin que usa el entorno que van del 2 al 15. En realidad el Launchpad puede usar los pines P2.6 y P2.7 si no usa cristal de cuarzo, pero, por lo que veo, esta opción no está actualmente implementada en Energía. En todo caso, la correspondencia de pines está en el fichero pins_energia.h que se halla en el subdirectorio:

hardware\msp430\variants\launchpad

dentro del directorio de instalación de Energía. En todo caso, para simplificar, la correspondencia es esta:

P1_0 = 2;     // LED 1 Rojo (Activo alto)
P1_1 = 3;
P1_2 = 4;
P1_3 = 5;    // Pulsador S2 (Activo bajo)
P1_4 = 6;
P1_5 = 7;
P2_0 = 8;
P2_1 = 9;
P2_2 = 10;
P2_3 = 11;
P2_4 = 12;
P2_5 = 13;
P1_6 = 14;   // LED 2 Verde (Activo alto)
P1_7 = 15;


Con esto y, con un poco de dedicación, cualquiera puede desarrollar proyectos sencillos con microcontrolador por lo que vale un bocadillo.













martes, 22 de mayo de 2012

La infame versión Z

En diseño de circuitos uno espera que los componentes se comporten siempre de la misma manera, que cuando compras un recambio de un componente por otro que tiene exactamente el mismo nombre, el funcionamiento sea el mismo. Lamentablemente eso no siempre es así, y en ocasiones, el fabricante no se toma muchas molestias en avisarlo.

Explicaré un caso concreto con la placa STM32F4 Discovery. La mejor y más potente placa de la familia Discovery.

Placa STM32F4 Discovery

El problema


Hace ya un tiempo compré una placa de éstas y empecé a trabajar en el software. El entorno de trabajo, algún dia hablaré del él, está basado en Eclipse y usa compiladores GCC. Hasta el momento he probado con Code Sourcery y Yagarto. Para depurar empleo el servidor GDB que veía con la versión gratuita de Atollic True Studio for STM32.

Como todo iba bién con la placa compré una placa nueva, igualita a a la otra que ya tenía. Mi sorpresa fué que el debugger se colgaba al intentar comunicarse con el microcontrolador.
Para descartar que fuera una placa defectuosa intenté programar en la placa usando el software STLink Utility que proporciona gratuitamente ST para programar sus microcontroladores.

Nada más arrancar ya se veía que algo iba mal.

Aplicación STLink Utility

El software era capaz de comunicar con el microcontrolador, pero no era capaz de averiguar de que micro se trata tal como se desprende de la frase "Unknown Device" arriba a la derecha de la pantalla. Fijémonos, luego diré porqué, en la identificación de la CPU que es 0x413

Al intentar programar el dispositivo las cosas se complican.


Es extraño, nunca habia visto este mensaje, le digo que adelante.


El programa es incapaz de programar el micro. Por lo visto está activada la protección que deshabitlita el bus JTAG para que no pueda extraerse el código del micro. Es extraño porque la placa es nueva.
La protección se configura con los llamados option bytes. Voy a la ventana pertinente y sale algo como ésto:


Parece que la protección de lectura está activada y la flash está protegida contra escritura. No se puede programar el micro y no se puede quitar la protección. No se puede usar el micro para nada que no sea usar el software de demostración que ya venía en la placa.

¡¡ Y la placa era nueva !!


La solución

Después de mucho buscar por internet a alguien que le hubiera pasado algo similar encontré esta referencia.

Por lo visto la gente tenía problemas con la versión "Z" de la CPU. Las placas STM32F4 Discovery, por lo visto, llevaban antes CPUs de versión "A". El último batch de placas usa CPUs de versión "Z".

La siguiente figura muestra una CPU de versión A.

STM32F407 Version A


A continuación se muestra una CPU de versión Z.

STM32F407 VersionZ


Parece ser que en el paso de la versión A  a la versión Z, la identificación de la CPU ha pasado de 0x411 a 0x413. A continuación se muestra el programa STLink Utility conectado a una CPU de versión "A" donde se vé como se identifica como 0x411 a diferencia de la identificación 0x413 de la versión "Z".

STLink Utility con STM32F4 versión "A"
 

Misterio solucionado. Pero en esta historia hay algunos puntos muy molestos:

  • Que ST envie placas STM32F4 Discovery incompatibles con versiones anteriores del software sin avisar de los posibles problemas de compatibilidad.
  • Que ST no actualice la aplicación STLink cuando cambia los MCUs que soporta.
  • Que la aplicación STLink no sea capaz de decir que no sabe como trabajar con el micro en lugar de hacernos creer que se ha habilitado la protección contra escritura.

Suerte que en la misma referencia que cité anteriormente se proporcionaba el link a una versión parcheada de STLink Utility para poder programar la placa.

Como información adicional de los cambios de la versión "A" a la versión "Z", parece que no hay más versiones intermedias. Éstos están documentados en el la Errata Sheet del microcontrolador. Lo que no se dice en este documento es la incompatibilidad que produce con las propias aplicaciones de ST.

Finalmente me alegra decir que la versión actual del servidor GDB de ATollic True Studio es capaz también de comunicarse con la CPU "Z" maldita.























lunes, 7 de mayo de 2012

Calibrando el DCO

En este artículo explicaré por encima el funcionamiento del oscilador controlado digitalmente DCO de la familia MSP430 y explicaré un procedimiento, software incluido, para calibrar este oscilador para un conjunto de frecuencias elegido.

Para empezar, hablaremos del DCO...

Descripción del DCO

Los microcontroladores MSP430 de Texas Instruments, por ejemplo los compatibles con la placa Launchpad, disponen de un oscilador RC interno controlado digitalmente (DCO). El DCO se controla con 3 valores digitales:

  • RSELx  (0..15) Selecciona un rango de frecuencia de funcionamiento
  • DCOx   (0..7)   Selección fina de frecuencia dentro del rango elegido
  • MODx  (0..31) Modulación de frecuencia entre DCO elegido y el siguiente DCO+1
Los valores RSELx y DCOx, por tanto seleccionan la frecuencia del oscilador interno tal y como se muestra en la siguiente figura de la familia MSP430x2xx (slau144i).

Frecuencia vs RSEL,DCO
Se ha de tener en cuenta que los rangos que cubren los distintos valores de RSEL se pueden solapar entre si, por tanto, es posible que RSEL=7 DCO=7 de una frecuencia mayor que RSEL=8 DCO=0.

El valor de MODx permite un ajuste más fino de la frecuencia media del oscilador. Básicamente, cada 32 ciclos, (32-MOD) ciclos se harán con la frecuencia DCO y MOD ciclos se harán con la frecuencia DCO+1. Para que esto funcione el valor de DCO elegido ha de ser inferior a 7 ya que no existe DCO+1 cuando DCO=7. Ls siguiente figura muestra el patrón de modulación para distintos valores de MOD.

Modulación del oscilador DCO
Es importante notar que el uso de la modulación introduce Jitter en la señal de reloj. Eso puede ser o no importante para una aplicación concreta pero es importante tenerlo en cuenta si necesitamos instantes de captura completamente periódicos.
  

Calibración del DCO en producción

El problema general es que las relaciones entre RSEL y DCO y la frecuencia generada tienen una tolerancia muy elevada por lo que para tener frecuencias de operación mínimamente exactas es necesario calibrar el oscilador. A modo de ejemplo, para la familia MSP430G2x21 (slas694i) con RSELx = 7, DCOx = 3 y MODx = 0 que es el valor con el que arranca el microcontrolador, pueden dar valores de frecuencia entre 0,8 y 1,5 MHz. Esto es, el error puede ser de 0,35MHz (un 23%) respecto de un valor central de 1,15MHz.

Calibrar el oscilador es determinar que valores de RSEL, DCO y MOD se han de programar para generar una determinada frecuencia. Aún usando valores calibrados el oscilador tiene una cierta tolerancia que puede ser de hasta +/- 6% para todo el rango de temperaturas y tensiones de alimentación, pero, aun así, es mucha menos tolerancia que un DCO no calibrado. Sin embargo, si calibramos el oscilador cuando el circuito opera a la tensión y temperatura de operación, la deriva será mucho menor.

Todos los microcontroladores de la familia MSP430 se calibran en el momento de producirlos, al menos a la frecuencia de 1MHz. Los valores de RSEL, DCO, y MOD que han de programarse en los registros  DCOCTL (DCO y MOD) y BCSCTL1 (RSEL) se guardan en la memoria flash del microcontrolador.

Usar los valores calibrados en factoría está bien, pero tiene algunos inconvenientes:
  • Sólo podemos usar las frecuencias elegidas por Texas Instruments para nuestro microcontrolador. El MSPG2211 sólo tiene la de 1MHz, el MSPG2553 tiene lass de 1, 8, 12 y 16MHz. Si nos interesa una calibración a 4MHz, mala suerte.
  • Texas Instruments realiza sus calibraciones a 30ºC y 3V. Si nuestro sistema ha de operar lejos de estos valores la calibración no será buena.
Para solventar estos problemas podemos hacer la calibración nosotros mismos.


Calibración de usuario del DCO

Para realizar la calibración debemos de contrastar la frecuencia que genera el DCO con una referencia más exacta. Podemos entonces variar los valores de RSEL, DCO y MOD para lograr la frecuencia deseada.
Un buen patrón para realizar la calibración es el oscilador de cristal externo de 32768 Hz. Hay varios motivos para ello:

  • Un cristal de este tipo puede tener una precisión de 10 a 20ppm
  • Todos los microcontroladores de la serie MSP430 pueden usar un oscilador externo de 32768Hz
  • El Launchpad viene con un un cristal de este tipo, aunque sin soldar. En otro artículo hablo de como instalar un cristal de 32768Hz de manera temporal o permanente en el launchpad.
Buscando en internet se ve que hay varias personas que ya han llegado a esta conclusión como se demuestra aqui y aqui. Incluso existe una libreria de Texas Instruments al respecto.

En general, la mayor parte de soluciones reescriben la Sección A de Information Area de la flash del micrcontrolador que es donde Texas Instruments guarda la información de calibración del oscilador y otros elementos durante la producción. Es por eso que este área está especialmente protegida por un flag de seguridad (LOCKA).

Reescribir este área es potencialmente peligroso porque podemos perder información de calibración importante de otros elementos como el ADC y porque este área está protegida por un checksum que algunas aplicación podrían revisar. Es cierto que se puede recalcular el checksum, pero, igualmente corremos riesgos de borrar información importante.

 Los microcontroladores MSP430 tienen 3 áreas más de información (B,C,D) en la flash, todas ellas de 64 bytes igual que el área A, pero, a diferencia del área A, están vacían en los microcontoladores que salen de la factoría de Texas Instruments. En mi caso he pensado que sería mejor guardar la nueva información de calibración en la Sección B y no tocar la sección A para nada.

Dentro de esta área guardaré 9 valores de calibración para las frecuencias de 500Hz, 1MHz, 2MHz, 4MHz, 6MHz, 8MHz, 10MHz, 12MHz y 16MHz. La posición donde guardaré los valores de calibración las he incluido en un fichero NewDCOCal.h para tener una mejor referencia de sus posiciones. Si hace falta, se pueden cambiar o añadir nuevos valores de calibración si hace falta.


Programa de Calibración

Para realizar la calibración he realizado un programa DCO Calibration. Este program depende, a parte de NewDCOCal.h, del fichero io430masks.h. El programa se ha compilado con el compilador MSPGCC bajo Eclipse y, optimizado en tamaño, cabe en cualquier microcontrolador con al menos 2kB de flash.

El programa está pensado para hacerse correr en la placa Launchpad, por ello se emplean los siguientes pines:

         Xin/Xout : Cristal de 32768Hz
         P1.0 : Led Verde
         P1.3 : Pulsador a tierra
         P1.6 : Led Rojo

Adicionalmente se emplean dos pines para verificar los osciladores:
 
         P1.4 : Salida de cuadrada a la frecuencia del DCO
         P1.5 : Salida de 256Hz generada por el oscilador de 32768Hz
  
 Cuando el programa arranca, verifica si hay información en la sección de información B. Si hay información, pasa al modo de generación de frecuencia descrito más delante. Si no hay datos, se realiza la calibración, se guarda en la sección de información B de la flash y se pasa al modo de generación de frecuencia.
Durante la calibración el pin P1.4 muestra la frecuencia actualmente generada. Cada vez que se pasa a calibrar una nueva frecuencia, el led verde parpadea una vez. Si la calibración de una frecuencia se ha de repetir por no cumplir con la tolerancia deseada, parpadean los dos leds rojo y verde. 

En modo de generación de frecuencia el sistema programa la primera frecuencia de la lista de frecuencias calibradas (500kHz). Cada vez que se pulsa el pulsador que se halla en P1.3 se salta a la siguiente frecuencia de la lista para pasarse otra vez a la primera (500kHz) después de la última (16MHz). En este modo P1.4 tiene la frecuencia generada y el led verde parpadea a la frecuencia generada dividida por 20*65536 (20 desbordamientos del Timer A0).

En caso de error, el programa se bloquea mostrando un código de error mediante un número de parpadeos:

       (1)  Fallo del oscilador de 32768 Hz
       (2)  Problemas al calibrar una frecuencia
       (4)  No existe calibración de fábrica para 1MHz (necesaria para programar la flash)
       (5)  No puede lograrse la cota de error deseada (por defecto menos del 5%) 
       (Led Continuo) Problemas al arrancar el oscilador de 32768 Hz


Funcionamiento del programa

Para calibrar el oscilador el Watchdog se programa en modo temporizador con un período de unos 1,9ms (64/32768Hz) usando el oscilador de cuarzo. El timer A0 se configura en modo contínuo con el DCO como entrada. Se genera una captura del timer A0 cada vez que se da la interrupción del Watchdog. Calculando el número de ciclos del DCO entre dos capturas podemos inferir la frecuencia del DCO.

                    Frecuencia DCO = 512 * Ciclos entre capturas

Para aumentar la precisión, se promedia el intervalo de 50 capturas.

El programa comienza eligiendo el valor de RSEL, a continuación se elige el valor de DCO que se halla justo por debajo de la frecuencia deseada. Finalmente se ajusta la modulación MOD entre esta frecuencia de DCO y la siguiente.


Compilación condicional

El programa contiene 3 defines que permiten compilación condicional.

Si se activa el define DEBUG, el programa guarda los valores de RSEL, DCO y MOD junto con el error de calibración en cada frecuencia. De esta manera se puede verificar con el debugger.

Si se activa el define FLASH_OVERRIDE el programa reescribirá la información de la Sección B aunque no se halle vacía.

Si se activa el define TEST_MODE, toda la calibración se realizará en RAM para verificar el funcionamientod e la calibración sin tocar la memoria flash.


Video del funcionamiento

A continuación se muestra un video del funcionamiento del sistema de calibración en un Launchpad version 1.5 con el procesador MSP430G2553 que lleva por defecto. Junto al Launchpad tenemos un osciloscopio que muestra la frecuencia generada y un multimetro que trabaja como frecuencímetro.





miércoles, 2 de mayo de 2012

Instalación del Cristal en el Launchpad

 En este artículo hablaré de la instalación del cristal de cuarzo de 32768Hz en el Launchpad.  Un cristal de 32768Hz es fundamental para disponer de un reloj de tiempo real. En efecto 2^15 ciclos de este oscilador corresponden a un segundo. En el caso de la familia MSP430, en concreto, podemos usar el Watchdog en modo timer para generar una interrupción exactamente cada segundo usando como base este cristal de cuarzo.

Launchpad y bolsa con el cristal

 Este cristal de cuarzo viene incluido en la caja del Launchpad, pero no se halla soldado en la placa. El motivo por el que no viene soldado es porque el cuarzo ocupa 2 pines del microcontrolador que podrían ser usado como líneas de I/O. Dependiendo de la aplicación, por tanto, nos puede interesar no soldar este cristal para poder disponer de estas líneas. 

 En la siguiente figura se muestra la localización del cristal de cuarzo.

Localización del cristal

 El problema a la hora de poner el cristal es que el que se proporciona con el Launchpad es muy pequeño y cuesta de soldar. Para hacer las cosas más fáciles lo mejor es sujetar el cristal en su sitio con cinta adhesiva. Se ha de andar con ojo porque el cristal tiene delante y detrás. En la posición correcta los dos pines deben quedan apoyados sobre los pads de soldadura.



Cristal sujeto con cinta adhesiva
Para soldar el cristal conviene tener una lupa y un soldador de punta fina, pero con paciencia al final queda bien soldado. Si se cortocircuitan los pads, se retira el estaño con cinta de desoldar y vuelta a empezar.


Cristal soldado
Una vez soldados los dos terminales del cristal, podemos retirar la cinta adhesiva con cuidado de no arrancar el cristal y, a continuación, soldamos el cuerpo del cristal en el pad que tiene debajo.

Soldadura del cuerpo del cristal
Una vez soldado el cristal, se debe probar que funciona correctamente. Para ello he realizado un programa de test bajo Eclipse basado en dos ficheros main.c y io430masks.h.
El programa intenta poner en marcha el reloj basado en el cristal externo de 32768Hz. Si funciona correctamente, el led verde parpadea cambiando cada segundo. Si el oscilador falla, se enciende el led rojo.


Solución a problemas

Si el oscilador no funciona, lo primero es revisar las soldaduras.

El oscilador es muy sensible a cualquier interferencia. Los pines del oscilador, dado que pueden ser usados como I/O, están conectados a los pines de salida de la placa Launchpad. Para minimizar las interferencias se puede desconectar el oscilador de estos pines retirando las dos resistencais de cero ohmios que unen el oscilador con los pines. En la siguiente figura se muestra la localización de estas resistencias. Esta figura se puede comparar con la anterior que aún tenía las resistencias soldadas.

Resistencias eliminadas

Alternativa al la soldadura

Finalmente, para la gente a la que esta soldadura le resulte muy complicada o, para quienes no quieran sacrificar de manera permanente los dos pines de I/O, existe la posibilidad de poner el cristal de cuarzo conectado a los pines externos de la placa.

El procedimiento se puede hacer con el cristal que viene con el launchpad, pero, debido a su tamaño,no es la solución más cómoda.  Los osciladores de 32768Hz son fáciles de conseguir y baratos. Es importante, no obstante, comprarlos con una capacidad soportada por la familia MSP430 como 12,5pF o 6pF para no tener que añadir capacidades externas. A modo de ejemplo está este de Farnell que es el que he empleado.

En la siguiente figura se muestra un cristal de 32768Hz soldado a dos pines hembra.

Cristal soldado a pines hembra
Para emplear el cristal basta con conectarlo en la placa en los pines correspondientes.

Cristal sobre los pines de la placa

Con ello acaba este artículo sobre el cristal externo del Launchpad. Con un cristal como éste es fácil desarrollar aplicaciones que requieran una temporización precisa como sistemas basados en reloj de tiempo real, frecuencímetros, etc...


viernes, 27 de abril de 2012

Programación ISP con Launchpad

Una de las grandes ventajas de los microcontroladores MSP430 de la serie value line G2xxx es que, a parte de ser baratos, están disponibles en encapsulado DIP de 14 o 20 pines. Eso los hace muy interesantes para cualquier proyecto sencillo desarrollado en una placa de topos e, incluso, en una protoboard.

Usando el Launchpad podemos programar cualquier microcontrolador de la serie value line para luego insertarlo en nuestro circuito. Sin embargo, a parte del engorro de quitar y poner chips, dado que los zócalos no son ZIF, nos arriesgamos a dañar los chips cada vez que los sacamos e insertamos del zócalo.

Dado el bajo precio de la placa Launchpad, siempre podemos insertar toda la placa en nuestro sistema y así, poder programarla mediante USB, no obstante, esta no es la solución más compacta.

En este artículo explicaré el procedimiento para programar In System (ISP) sistemas desarrolados con microcontroladores MSP430 value line.

Para que el microcontrolador sea programable In System  es necesario que se cumplan las siguientes condiciones:

  • Tener disponibles los pines TEST y RESET del microcontrolador. Estas dos señales, durante la programación ISP llevan el reloj y los datos, respectivamente, del canal de comunicación usado en la programación.
 
  • Que la señal RESET no se halle directamente conectada a alimentación. Dejar RESET conectado a la alimentación no perjudica el funcionamiento normal del microcontrolador, pero evita que pueda ser programada In System.

La siguiente figura muestra un esquema de un sistema sencillo basado en el microcontrolador MSP430G2452 que se halla incluido como segundo chip en la versión 1.5 del Launchpad.

Esquema de sistema sencillo basado en MSP430G2452

 El sistema tiene lo necesario para ser programado In System y un led conectado a P1.0 para poder verficar que el programa cargado corre correctamente. La línea TEST se lleva directamente al conector de programación. La línea RST (Reset), a parte de ir al conector, incluye una conexión a Vdd con una resistencia de 47k y un condensador de 1nF a masa. Si deseamos añadir al sistema un pulsador de Reset, éste se puede añadir entre RST y masa en paralelo con el condensador.

Importante: El condensador que se halla en la línea RST puede ser algo mayor de 1nF pero no mucho mayor. Si el valor es excesivo, el programador no será capaz de establecer la comunicación.

La siguiente imagen muestra el esquema anterior implementado en una placa protoboard.

Implementación en Protoboard


Para realizar conexión de programación se ha elegido una tira de 5 pines, macho en la placa y hembra en el cable de programación. Para evitar que se pueda conectar al revés, uno de los pines está cortado en el lado de la placa y cegado en el cable.

Disponer de Vdd en el conector de programación no es estríctamente necesario, pero permite alimentar la placa desde el Launchpad y evitar gastar pilas cuando se depura. Si se desea tener siempre alimentaciones independientes, se puede eliminar Vdd del conector de la placa. En todo caso, el sistema sólo puede tener una fuente de alimentación al mismo tiempo, bien sea propia o bien sea a través de conector de programación. Por tanto, mientras se depura con Vdd conectado, se han de quitar las pilas o cualquier otra fuente alternativa de la placa.

Para conectar la placa al Launchpad he montado un cable de algo menos de 20 cm que lleva las 4 señales de interés Vdd, TEST, RST y GND. El cable  tiene un conector hembra de 5 pines en el lado de la placa y 4 conectores hembra independientes en el lado del Launchpad. A la hora de diseñar el cable conviene que, al menos, TEST y RST sean de la misma longitud. Del mismo modo conviene mantener la longitud de los cables lo más corta posible.

Cable de conexión con sus colores



Cable construido


Para realizar las conexiones en el launchpad, deben quitarse los 5 jumpers que unen la zona de emulación con el resto de la placa.

Jumpers a quitar
Una vez quitados los Jumpers, se conectan las líneas Vdd, TEST y RST al lado del emulador de los Jumpers correspondientes y la línea GND al pin de  arriba de la tira derecha de la placa. Se ha de vigilar porque el orden de los Jumpers no es mismo en todas las placas Launchpad. En todo caso no hay pérdida porque todas las señales se hallan correctamente serigrafiadas.
No hace falta retirar el microcontrolador del zócalo que hay en el Launchpad ya que, al quitar todos los Jumpers, el chip queda completamente aislado del emulador.

Conexión Protoboard - Launchpad para ISP


Conectamos el cable de programación que une el Launchpad a la placa que deseamos programar en modo ISP y ya sólo queda desacargar el programa para probarlo.

El código del programa que hace parpadear el LED en P1.0 se halla en este enlace. Basta crear un nuevo proyecto con la herramienta elegida para programar el chip y descargarlo en la placa igual que se haría con el chip contenido en el Launchpad.
En mi caso empleo mspgcc bajo eclipse tal y como describo en un artículo anterior.

Una vez descargado y depurado el programa, se puede usar la placa de manera autónoma con su propia alimentación después de desconectar el cable de programación.

Protoboard corriendo autónomamente

Con esto acaba este articulo. Sólo se trata de un pequeño sistema que hace parpadear un LED, pero es ampliable a cualquier sistema que deseemos programar en modo ISP.


AMPLIACIÓN PARA EL USO DEL CANAL SERIE

Es posible ampliar el sistema incorporando el canal serie a través de USB que proporciona el emulador. Para ello se han de añador dos lineas adicionales conectadas a los Jumpers correspondientes TXD y RXD. No obstante se ha de hacer con cuidado para placas Launchpad de versión 1.5 o posteriores. A parte del hecho de que el orden de señales se ha cambiado en los Jumpers, las conexiones del emulador no se hallan todas en el mismo lado.

La siguiente figura muestra un detalle del esquema de la Placa Launchpad v1.5 del documento slau318b.
Esquema de Jumpers en Launchpad v1.5

Cuidado que BTXD es la transmisión del emulador, que conecta con recepción del microcontrolador (RXD). Por su parte BRXD es la recepción del emulador, que conecta con la emisión del microcontrolador (TXD). Los valores rotulados en la placa RXD y TXD corresponden a Recepción y Transmisión respectivamente desde el punto de vista del microcontrolador.

En concreto, Vcc, TEST y RST se hallan todas en el lado del emulador, iguar que la línea RXD (BTXD del emulador). La línea TXD (BRXD del emuilador) del último Jumper, sin embargo, se halla en el lado de la placa correspondiente al microcontrolador, no en el lado del emulador. Este cambio se hizo para que, cambiando la orientación de los Jumpers asociados a BRXD y BTXD se puedan cambiar las conexiones establecidas:

  • Jumpers Verticales (Igual que los otros) TXD en P1.1 y RXD en P1.2
  • Jumpers Horizontales (Perpendiculares a los otros) TXD en P1.2 y RXD en P1.1
Esto era necesario para poder usar la conexión serie por Hardware que facilita la UART de los microcontroladores más avanzados de la seríe MSP430G2xxx



miércoles, 11 de abril de 2012

Aquarium: Version Final

Con este artículo acaba la serie del proyecto Aquarium.

Una vez comprobado que el prototipo funciona correctamente, es el momento de pasar a la versión final del sistema. El primer paso es realizar una placa que integre la mayor parte del hardware que no es la placa STM8L Discovery.
La placa contiene el driver L923D y el regulador de 5V 7805. Esta placa se acompaña de una placa más pequeña que incorpora los 3 pulsadores que permiten configurar el sistema.

Placa principal y Pulsadores
En la figura de arriba se aprecia la placa principal junto con la de pulsadores. En la placa también se obervan los conectores hembra que se unirán a las conexiones de alimentación, masa y GPIO de la placa STM8L Discovery.
A la derecha de la placa principal tenemos 4 puertos de conexiones con conexiones macho en ángulo recto. De arriba a abajo son:
  • Conector para el motor del alimentador de comida
  • Conector de salida para los relés
  • Conector con +5V regulados
  • Conector de entrada de alimentación no regulada de 9V a 12V
La salida de +5V regulados se ha añadido para conectar un led verde (con resistencia en serie), que no está en el esquema principal, y que sirve para indicar visualmente que el sistema se halla en marcha.

Encima de la placa principal se conecta la placa STM8L Discóvery tal y como se muestra en la figura.

Placa STM8L Discovery conectada



Con ello ya tenemos la mayor parte del sistema. Para montar el conjunto se ha empleado una caja de madera ya que es un material muy fácil de mecanizar. La siguiente figura muestra el interior de la caja con todos los componentes. La placa Discovery se ha fijado con el infalible método de la goma elástica y dos tornillos. No es la solución más elegante, pero funciona.


Se observan los siguientes elementos:

  1. Placa principal
  2. Placa de pulsadores
  3. Relés
  4. Interruptor general S4
  5. Alimentador de 12V
  6. Entrada de alimentación de 220V
  7. Salida para la luz del acuario a 220V
  8. Salida para la boba de filtrado a 220V
  9. Conector RCA para conectar el motor del alimentador de comida
Delante del conector USB de la placa Discovery se ha practicado un orificio en la caja para poder programar el sistema sin necesidad de desmontarlo. Eso si, para evitar conflictos, no conviene tener alimentado el sistema cuando se programa por USB.


La siguiente figura muestra la caja cerrada con sus conexiones externas: Entrada de 220V, enchufes de la luz y la bomba de filtrado y sistema de alimentación de comida.

Sistema con sus conexiones

La última figura muestra la parte frontal de la caja con todos sus elementos de interacción con el usuario.

Frontal del sistema
Los elementos son:

  1. Interruptor general S4
  2. Led que indica que el sistema está en marcha
  3. Display LCD
  4. Los 3 pulsadores, de arriba a abajo:  (+) (OK) (-)
Cuando el sistema está en marcha, el display muestra la hora actual y tres indicaciones usando las barras que se hallan a la derecha del LCD. En concreto se indica si está operando en modo manual o automático y si se hallan en marcha la bomba y/o la luz.

En este preciso momento el sistema está en marcha controlando el acuario.

Actualización 15/4/2012

Añado un video del alimentador en funcionamiento