Categories
electrónica

Hola mundo para eZ430 chronos

El eZ430 chronos es una plataforma de desarrollo de Texas Instrument que tiene la peculiaridad de estar encapsulada en forma de reloj, y su objetivo es servir como banco de pruebas de su chip ms430, caracterizado sobre todo por su bajo consumo.

El kit del eZ430 chronos está compuesto por un reloj, un punto de acceso usb para comunicarse inalámbricamente con el reloj y un programador usb para poder reprogramar el reloj. El precio de todo el conjunto es de 50$ y los gastos de envío a Europa son de unos 15$.

A continuación lo que muestro son los pasos a seguir para crear un programa tipo “hola mundo” que únicamente muestra las palabras “hi earth” en la pantalla lcd del reloj, tal y como se ve en la imagen de cabecera.

1. Crear nuevo proyecto

2. poner nombre al proyecto

3. seleccionar el chip msp430 como objetivo

4. no seleccionar ninguna configuración adicional

5. seleccionar el chip CC430F6137 que es el que incorpora el reloj

6. hacer clic derecho sobre el proyecto y crear un nuevo fichero fuente

7. llamar al fichero “main.c”

8. copiar y pegar el siguiente código:

//******************************************************************************
//  eZ430 chronos hello world
//  Description: initializes lcd module and shows the string 'hi earth' on the 
//               lcd display becuase 'hello world' is too long
//  Author: Felix Genicio
//******************************************************************************

#include  "cc430x613x.h"
#include <string.h>

void main(void)
{  
	unsigned char * lcdmem;
	
    // Clear entire display memory
	LCDBMEMCTL |= LCDCLRBM + LCDCLRM;

	// LCD_FREQ = ACLK/16/8 = 256Hz 
	// Frame frequency = 256Hz/4 = 64Hz, LCD mux 4, LCD on
	LCDBCTL0 = (LCDDIV0 + LCDDIV1 + LCDDIV2 + LCDDIV3) | (LCDPRE0 + LCDPRE1) | LCD4MUX | LCDON;

	// LCB_BLK_FREQ = ACLK/8/4096 = 1Hz
	LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0; 

	// I/O to COM outputs
	P5SEL |= (BIT5 | BIT6 | BIT7);
	P5DIR |= (BIT5 | BIT6 | BIT7);
  
	// Activate LCD output
	LCDBPCTL0 = 0xFFFF;  // Select LCD segments S0-S15
	LCDBPCTL1 = 0x00FF;  // Select LCD segments S16-S22
		
	// LCD_B Base Address is 0A00H page 30 y in SALS554 document
	// show 'h'
	lcdmem 	= (unsigned char *)0x0A21;
	*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT1+BIT6+BIT0));
	// show 'i'
	lcdmem 	= (unsigned char *)0x0A22;
	*lcdmem = (unsigned char)(*lcdmem | (BIT2));
	// show 'E'
	lcdmem 	= (unsigned char *)0x0A2B;
	*lcdmem = (unsigned char)(*lcdmem | (BIT4+BIT5+BIT6+BIT0+BIT3));
	// show 'A'
	lcdmem 	= (unsigned char *)0x0A2A;
	*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
	// show 'r'
	lcdmem 	= (unsigned char *)0x0A29;
	*lcdmem = (unsigned char)(*lcdmem | (BIT6+BIT5));
	// show 't'
	lcdmem 	= (unsigned char *)0x0A28;
	*lcdmem = (unsigned char)(*lcdmem | (BIT4+BIT5+BIT6+BIT3));
	// show 'h'
	lcdmem 	= (unsigned char *)0x0A27;
	*lcdmem = (unsigned char)(*lcdmem | (BIT4+BIT5+BIT6+BIT2));
		
  __no_operation();  // For debugger
}

9. pulsar el botón de ‘debug’ (asegurarse antes de que el reloj está conectado al módulo de programación usb y este a un puerto usb del ordenador)

10. se abrirá la ventana de debug

11. seleccionar en la barra del menú el botón “Run”

12. ¡y ya tenemos nuestro programa corriendo en el reloj y mostrando el mensaje en el display!

94 replies on “Hola mundo para eZ430 chronos”

@Judith, en informática un programa “hola mundo” solo muestra un mensaje con la frase “hello world” y se usa a modo de ejemplo de como se programa en cierto lenguaje.

Hi,

could you give a hint were you got the SALS554 document with the LCD PINS from? I could find it on the cd nor on the ti website.

Thanks,

Hans

I took the liberty of translating your post into English. My Spanish skills are poor. I hope I haven’t butchered your writing too badly.
————————-
Hello World for the eZ430 Chronos

The eZ430-Chronos is a developemnt platform from Texas Instruments that
unusual in that it is in the form of a watch. Its purpose is to serve as a
test-bed for the ms430 chip, characterized by its low-power needs.

The eZ430-Chrono kit is composted of a watch, a USB access point for communicating with the watch, and a USB programmer module for reprogramming the watch. The price of the complete kit is $50, add $15 for delivery to Europe.

In the rest of this post I will show the steps you need to follow to create a “Hello World” program that only shows the words “hi earth” on the LCD screen of the watch, as you would expect from the title.

1. Create a new project.

2. Enter the name of the project.

3. Set the Project Type to MSP430.

4. Do not make any additional configuration changes.

5. Select the CC430F6137 chip that in in the watch.

6. Right-click the project and create a new file.

7. Name the file “main.c”

8. Copy and paste the following code:

— code above —

9. Click the “debug” button in the toolbar (be sure that you have already
connected the watch to the programmer and it is plugged into a USB port
connected to your computer).

10. The debug window will open.

11. Click the “Run” button in the toolbar.

12. An now we have our program running on the watch and showing the message on
the display!

@Mark, feel free to translate it. In the past I used to write articles in English and Spanish using a wordpress plugin, but now I’m more lazy and I’ve disabled it 😛

Tengo problemas al darle debug, nme dice que las inicializaciones de la pantalla son “unresolved symbols”…..q puede ser?

@Anonimo, así, sin dar más detalles, parece que se trata de que el compilador no encuentra alguna librería donde están definidas ciertas constantes. Échale un ojo a esta página de TI donde alguien tiene un problema parecido al tuyo.

@Anonimo, Hola.

C’omo resolviste ‘este problema?

Gracias!

Severity and Description Path Resource Location Creation Time Id
errors encountered during linking; “hola_mundo.out” not built hola_mundo line 0 1278343928596 75
unresolved symbol LCDBBLKCTL, first referenced in ./main.obj hola_mundo line 0 1278343928596 68
unresolved symbol LCDBCTL0, first referenced in ./main.obj hola_mundo line 0 1278343928596 69
unresolved symbol LCDBMEMCTL, first referenced in ./main.obj hola_mundo line 0 1278343928596 70
unresolved symbol LCDBPCTL0, first referenced in ./main.obj hola_mundo line 0 1278343928596 71
unresolved symbol LCDBPCTL1, first referenced in ./main.obj hola_mundo line 0 1278343928596 72
unresolved symbol PCDIR_L, first referenced in ./main.obj hola_mundo line 0 1278343928596 73
unresolved symbol PCSEL_L, first referenced in ./main.obj hola_mundo line 0 1278343928596 74

ah!

El problema era que CCS cambiaba las propiedades del projecto y no respetaba la configuraci’on inicial.

Antes de hacer click en debug, hay que verificar que el “device variant” permanezca el F6137.

Gracias!

Hello,

Do you know how to blink the “Hi World” ? I tried to set the LCDBLKMODx at 10 but it doesn’t work. Could you help me?
Thanks

@phyt, the way to blink the lcd segments is using the LCDBBLKCTL register for the frequecy (and mode) and the LCDBM1…LCDBM14 for selecting wich ones you want to blink.

@sucotronic,
Thank you for your answer, I understood the register LCDBBLKCTL but I don’t understand where the LCDBM1 appears in my program. I don’t fine this register, I find just something in the LCDBBLKCTL but how to say at the program to blink the BIT2 of the 0x0A22?

Thank you,

Phyt

hola una vez que se ha debugeado el progrma quedara en el relog? borrando el progrma que corria antes el de la hora la tempe y lo demas?

@jc, al hacer el debug se carga el programa en el microcontrolador del reloj. Para volver a tener el programa de origen solo tienes que hacer debug del proyecto de ejemplo que contiene el software original.

entonces le llaman debug a programa el micro? o solo a propbar el progrma

gracias sucotronic

hay alguna forma en q se pueda incluir este mensaje en el programa original del reloj, o sea que cuando apretemos uno de los botenes podamos intercalar entre la hora, el mensaje de “hi earth” y cualquiera de las otras funciones incluidas?

@jc, se llama debug a cargar el programa en el microcontrolador y poder ejecutar paso a paso el programa, viendo en que línea de código está exactamente, así como los valores de la pila de memoria y los registros.

@Anonimo, si que se puede, pero para ello es necesario entender como funciona el sistema de menus del código que provee TI y tener una versión del compilador que nos permita compilar el código modificado (el que viene gratuito tiene un límite que impide compilar el software del reloj).

@jc, el código fuente del reloj está completo, pero los compiladores que vienen tienen límites de tamaño de código fuente a compilar, por lo que para poder cargar el código original en el reloj hay algunas partes del código que están pre-compiladas.

podrian decirme a manera de tutorial explicarme por pasos como cargar el programa del relog original en el micro del reloj

@Klaus, in my example you can see in the last part as the following:

lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT1+BIT6+BIT0));

?Hola

excuse me, this is not what I want. You have 7 segments, ABCDEFG
labeled. When all switch on you have an eight (8) figure.

You understand me ?

@Klaus, ah, now I know what you mean 😛
The fastest and best way to look for the bit memory address is to look in the display.h inside the TI code example for the SportsWatch, the path is: ../Program files/Texas Instruments/eZ430-Chronos/Software Projects/CCS/Sports Watch/driver

@sucotronic hola, excelente página. Voy bien hasta el paso 10, pero no se muestra “hi EArth”. El boton Run no aparece en la barra de herramientas, entonces no sé cómo hacer para correr el código. A qué se debe esto y cómo puedo solucionarlo?? Desde ya muchas gracias!!

@Eduardo, asegurate de que estás en la ventana de debug, ya que sino no podrás ver el botón con forma de ‘play’.

@sucotronic,
gracias sucotronic!! el mensaje “hi EArth” se muestra en el display!! Ahora estoy viendo cómo volver al programa original (el q muestra temp, aceleracion, etc). Veo que hay dos proyectos: “ez430_chronos” y “ez430_chronos_datalogger”. Cual de los 2 debo debuguear? Por otro lado, cuando intento debuguear el proyecto “ez430_chronos” me lanza el mensaje: “exception ocurred during launch. Reason: program file does not exist”

@Eduardo, hay que tener cuidado al ‘debuggear’ ya que hay dos tipos, uno que no se puede compilar porque la licencia del programa no deja, y otro que ya tiene ciertas funciones precompiladas y que si se puede cargar en el chronos.

@sucotronic, muchas gracias! Me ha servido de mucho.

Pero hace unos dias tuve un probema, al intentar volver a poner el código original en el Chronos creo que borré una carpeta. Me podrías decir donde está exactamente (como dices en un comentario anterior) “el proyecto de ejemplo que contiene el software original”? Así podré saber si todavía lo tengo o si me lo tengo que descargar de algun sitio.

Gracias de antemano.

@Cesc, pues ahora mismo no tengo disponible mi ordenador de desarrollo, pero cuando lo tenga le echo un ojo y te digo la ruta.

I have my eZ430 connected to the emulator that connects to my laptop. The message is successfully displayed. When I take out the watch from the emulator, the message is still displayed. How do I get this message off of the watch?

@Matt, hi Matt, the message is still in the watch because you’ve programmed it to do it, whatever the power comes by the usb programmer or the battery. If you want your original software back you’ve to reprogram it with the TI code.

And how do I go about doing that? Is there some file in the provided software that I have to run similarly in CCS to do this?
Thanks!

Does anyone know how to modify the code a little bit to make the message flash ‘hi’ for one second and then ‘EArth’ the next second repeatedly?

I would ideally like to do this by transferring the info. via the RF Access Point. Assuming this is possible, how would I go about doing this?

Thanks!

@Matt, it’s possible to do what you ask, but I recommend you to examine the TI’s original code to learn about RF communications. For the blinking thing the easiest way is to to it with some loops.

@Matt, the default route for the TI original software should be: Program files/Texas Instruments/eZ430-Chronos/Software Projects/CCS/Sports Watch open it with CCS and press the debug button to reprogram it.

Hola, hoy he comprado la versión 868mhz por eso de menos interferencias y que ahora ya casi todo lo nuevo funciona en esa frecuencia, por que la 433Mhz esta saturada.

¿He echo bien o pido que lo cambien por el 433 Mhz? Es para España 😉

Gracias.

@Litris, el de 868 mhz es el adecuado para todo el mundo excepto, excepto para América, así que has elegido bien. Lo saturado o no del espectro electromagnético depende de donde lo vayas a usar. Lo normal es que no haya muchos dispositivos en esa frecuencia así que no tendrás ningún problema. Lo característico de la frecuencia 433mhz es que tiene mejor penetración en muchos materiales, y por lo tanto más alcance gastando la misma energía. Yo te recomiendo que mantengas el pedido tal cual, ya que con ese te valdrá para probar y aprender de sobra.

Hola,
¿hay algun tipo de documentacion similar al API de Java para ver qué hace cada función y ver como se utiliza?
debo hacer un programa que le ordene enviar paquetes de radio con una secuencia de numeros cada 1 seg y levantar el RSSI, pero no sé como empezar, ¿es posible tal cosa?

@Edu, no existe ninguna api para el código que lleva el chronos, ya que el código del reloj es un ejemplo que da TI. Pero puedes mirar el código fuente de las principales funciones que está en una carpeta.

hola, acabo de adquirir el chronos y hoy he estado intentando hacer éste sencillo ejemplo de hola mundo, pero a mitad mi usb a dejado de ser detectado y he vuelto a montar el reloj y ya no se enciende. Alguien sabe que puede haber pasado?

Gracias,un saludo

@Blen, tienes que comprobar que se ha programado correctamente, de otro modo es posible que se haya quedado el código a medias de copiar al reloj y no funcione.

Leave a Reply

Your email address will not be published. Required fields are marked *