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.
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

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!
Posted on: Tuesday, February 9, 2010 at 22:20 pm
electrónica. Puedes seguir las respuestas de esta entrada a traves de l feed RSS 2.0.
Puedes dejar una respuesta, o trackback desde tu propio sitio.














¿Por qué “hola mundo”?
[Responder]
sucotronic Reply:
February 12th, 2010 at 17:49 pm
@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.
[Responder]
?Ola, me encantó su programa. Podaria enviarme su nombre y correo?
[Responder]
February 19th, 2010 at 17:09 pmHi,
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
[Responder]
sucotronic Reply:
February 25th, 2010 at 19:35 pm
@Hans, the info is from this pdf supplied by TI:
http://www.ti.com/lit/pdf/slau292 there you can find on pages 51 and 52 the schematics of LCD. And in this other pdf: http://www.ti.com/lit/gpn/cc430f5137 at page 38 you’ll find the address memory for the LCD module where I write the data in the example.
[Responder]
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!
[Responder]
sucotronic Reply:
March 10th, 2010 at 23:59 pm
@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
[Responder]
Tengo problemas al darle debug, nme dice que las inicializaciones de la pantalla son “unresolved symbols”…..q puede ser?
[Responder]
sucotronic Reply:
June 23rd, 2010 at 21:59 pm
@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.
[Responder]
Anonimo Reply:
June 23rd, 2010 at 22:09 pm
@sucotronic, Muchas Gracias, ya resolvi……ahora a ver que mas puedo hacer!!
[Responder]
Pedro Reply:
July 5th, 2010 at 16:34 pm
@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!
[Responder]
July 5th, 2010 at 16:41 pmHello,
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
[Responder]
sucotronic Reply:
July 9th, 2010 at 6:02 am
@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.
[Responder]
phyt Reply:
July 9th, 2010 at 10:23 am
@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
[Responder]
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?
[Responder]
sucotronic Reply:
July 9th, 2010 at 18:32 pm
@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.
[Responder]
jc Reply:
July 9th, 2010 at 18:38 pm
entonces le llaman debug a programa el micro? o solo a propbar el progrma
gracias sucotronic
[Responder]
sucotronic Reply:
July 9th, 2010 at 23:37 pm
@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.
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?
[Responder]
sucotronic Reply:
July 9th, 2010 at 23:39 pm
@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).
[Responder]
jc Reply:
July 10th, 2010 at 0:06 am
el software que viene en el kit del relog esta completo?
[Responder]
sucotronic Reply:
July 10th, 2010 at 9:55 am
@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
[Responder]
July 10th, 2010 at 18:37 pm?Hola
where can i find the bit code for LCD segments which write in address memory ?
[Responder]
sucotronic Reply:
September 2nd, 2010 at 9:20 am
@Klaus, in my example you can see in the last part as the following:
[Responder]
?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 ?
[Responder]
sucotronic Reply:
September 2nd, 2010 at 21:09 pm
@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
[Responder]
Muchas Gracias
[Responder]
September 2nd, 2010 at 22:09 pm@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!!
[Responder]
sucotronic Reply:
November 9th, 2010 at 23:40 pm
@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’.
[Responder]
Eduardo Reply:
November 10th, 2010 at 20:11 pm
@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”
[Responder]
sucotronic Reply:
November 10th, 2010 at 22:55 pm
@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.
[Responder]
sucotronic Reply:
November 18th, 2010 at 20:42 pm
@Cesc, pues ahora mismo no tengo disponible mi ordenador de desarrollo, pero cuando lo tenga le echo un ojo y te digo la ruta.
[Responder]
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?
[Responder]
sucotronic Reply:
January 20th, 2011 at 19:08 pm
@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.
[Responder]
Matt Reply:
January 20th, 2011 at 19:23 pm
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!
[Responder]
sucotronic Reply:
January 20th, 2011 at 20:30 pm
@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.
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!
[Responder]
sucotronic Reply:
January 20th, 2011 at 20:28 pm
@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.
[Responder]
Le0o Reply:
November 21st, 2011 at 14:37 pm
@Matt,
Hola chicos,
If I may I would like to write this comment in English. I just got this toy a few days ago but so far I love it!!
I hope you enjoy the program it is what I am able to do so far!!!
I would like to share with this community the program I’ve made. I’m new at this but I want to get better so if you can change the time setting in my program to improve it, or have a better solution to do it, that would be great! My program works but it gives me a warning about the time, check it out, I think you guys would like it!! (at the end)
Some people have asked; why when I take my watch out of the PC the text stills there? Well, I know why and I have also made some texts myself, but I was getting bored of placing only short texts because of the space on the Chronos Watch’s LCD. So I thought it would be cool if I can make the texts to scroll when we have bigger stuff to display and I did it! I’m able to make my texts to scroll. But here comes the problem; it only “runs” when I hit the play button in the CCSprogram after debugging, once I take the Watch out I’m not able to see my text scrolling anymore! I’m guessing it is because when the watch is plug into my computer the “program.c” it’s reading the time from my computer but once I take it off, well I have no time or clock in my watch… at least that’s my guess! :p can you guys check it out and maybe we can came out with a solution for it
# I would also like to ask you, I have been trying to get back to the original programming of my watch and I think I’ve found what I need but every time I try to debug it, it tells me that I have an error in the library “dm.h” which is inside another library the “project.h” library…. Do you guys know what can I do!!? I need to make a project with it and can’t reset or get to the original program, help!
Program (just copy and paste in new.c);
//***************************************************************************
//***************************************************************************
// EZ430-Chronos-915
// “H,O,L,A, “I “yOUr
// + @ + <3 + @ +
// m,U,n,d,O” MEXICO” nAmE”
//***************************************************************************
// Nombre: Leonardo Daniel Reyes Fuentes
// U.A.N.L.
// Universidad Autónoma de Nuevo León
// México
// F.I.M.E.
// Facultad de Ingeniería Mecánica y Eléctrica
//***************************************************************************
// (Esp) Si no entiendes mi programa, con toda confianza pregúnteme, adiós.
// (Eng) If you do not understand my program, feel free to contact me, bye.
// (汉语) 如果你不明白我的方案请问我,再见.
// (Deu) Wenn Sie meiner Program nicht verstehen kann fragt mir bitte, tschüß.
// (Ita) Se non capisci il mio programma, chiedere di me, ciao.
//***************************************************************************
//***************************************************************************
#include "cc430x613x.h"
#include
void blank(void) {
LCDBMEMCTL |= (LCDCLRBM + LCDCLRM); // LCDBMEMCTL = 6;
}
void setfreq(void) {
LCDBCTL0 = (LCDDIV0 + LCDDIV1 + LCDDIV2 + LCDDIV3) | (LCDPRE0 + LCDPRE1) | LCD4MUX | LCDON;
LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0;
}
void iotocom(void) {
P5SEL |= (BIT5 | BIT6 | BIT7);
P5DIR |= (BIT5 | BIT6 | BIT7);
}
void lcdon(void) {
LCDBPCTL0 = 0xFFFF;
LCDBPCTL1 = 0x00FF;
}
int main(void) {
unsigned char *lcdmem;
blank();
setfreq();
iotocom();
lcdon();
/* LCD_B Base Address is 0A00H */
// Muestra Icono
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT3));
clock (10); blank();
// Muestra H
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT5+BIT6));
clock (10);
// Muestra O
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
clock (10);
// Muestra L
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT7));
clock (10);
// Muestra A
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
clock (10);
//Muestra m
lcdmem = (unsigned char *)0x0A2B;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
clock (10);
// Muestra U
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2+BIT3+BIT4+BIT6));
clock (10);
// Muestra n
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
clock (10);
// Muestra d
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2+BIT3+BIT5+BIT6));
clock (10);
// Muestra O + Limpia (tras tiempo cumplido)
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT3+BIT4+BIT6));
clock(10);
blank();
// Muestra Icono
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT3));
clock (10);
blank();
// Muestra ‘I’ + ‘<3'
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2) + BIT3);
// Muestra '''
lcdmem = (unsigned char *)0x0A24;
*lcdmem = (unsigned char)(*lcdmem | (BIT0));
// Muestra 'M'
lcdmem = (unsigned char *)0x0A2B;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
// Muestra 'E'
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
// Muestra 'X'
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2+BIT4+BIT5+BIT6));
// Muestra 'C'
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT6)+BIT7);
// Muestra 'O' + Limpia (tras tiempo cumplido)
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT3+BIT4+BIT6));
clock(10);
clock(10);
blank();
// Muestra Icono
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT3));
clock (10);
blank();
// Muestra /***Y/****n/
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
clock (10);
blank();
// Muestra /**YO/***nA/
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /*YOU/**nAm/
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
clock (10);
blank();
// Muestra /YOUr/*nAmE/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /OUr*/*AmE*/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /Ur**/*mE**/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /r***/*E***/ y /****/*****/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10); blank();
// Muestra /***Y/****n/
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
clock (10);
blank();
// Muestra /**YO/***nA/
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /*YOU/**nAm/
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
clock (10);
blank();
// Muestra /YOUr/*nAmE/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A25;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT2+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A27;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /OUr*/*AmE*/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT4+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A23;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT4+BIT5+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A28;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /Ur**/*mE**/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT5+BIT6+BIT7));
lcdmem = (unsigned char *)0x0A22;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT6));
lcdmem = (unsigned char *)0x0A29;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10);
blank();
// Muestra /r***/*E***/ y /****/*****/
lcdmem = (unsigned char *)0x0A21;
*lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2));
lcdmem = (unsigned char *)0x0A2A;
*lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT3+BIT4+BIT5+BIT6));
clock (10); blank();
__no_operation(); // For debugger
return 0;
}
[Responder]
sucotronic Reply:
November 21st, 2011 at 15:01 pm
@Le0o, gracias por tu aporte Leo.
[Responder]
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.
[Responder]
sucotronic Reply:
February 22nd, 2011 at 15:38 pm
@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.
[Responder]
Gracias, lo dejo tal cual.
A ver cuando me llega.
[Responder]
February 22nd, 2011 at 15:48 pmHola,
¿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?
[Responder]
sucotronic Reply:
March 1st, 2011 at 19:49 pm
@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.
[Responder]
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
[Responder]
sucotronic Reply:
March 28th, 2011 at 8:12 am
@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.
[Responder]
Blen Reply:
March 28th, 2011 at 12:39 pm
@sucotronic,
Gracias por responder, pero el problema es que si no me lo detecta el ordenador(porque está apagado)no lo puedo reprogramar.
[Responder]
Blen Reply:
March 28th, 2011 at 14:52 pm
@Blen,
Ya esta solucionado!!!
Gracias!!
sucotronic Reply:
March 28th, 2011 at 21:42 pm
@Blen, me alegro de que se haya solucionado
Ive been getting this error
”
**** Build of configuration Debug for project hello_world ****
C:\Program Files\Texas Instruments\ccsv4\utils\gmake\gmake -k all
‘\\psf\Home\Documents\workspace\hello_world\Debug’
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
‘Building file: ../main.c’
‘\\psf\Home\Documents\workspace\hello_world\Debug’
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
‘Invoking: Compiler’
“C:/Program Files/Texas Instruments/ccsv4/tools/compiler/msp430/bin/cl430″ -vmspx -g –define=__CC430F6137__ –include_path=”C:/Program Files/Texas Instruments/ccsv4/msp430/include” –include_path=”C:/Program Files/Texas Instruments/ccsv4/tools/compiler/msp430/include” –diag_warning=225 –silicon_errata=CPU22 –silicon_errata=CPU21 –silicon_errata=CPU23 –silicon_errata=CPU18 –silicon_errata=CPU40 –printf_support=minimal –preproc_with_compile –preproc_dependency=”main.pp” “../main.c”
‘\\psf\Home\Documents\workspace\hello_world\Debug’
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
Fatal error: could not open source file “../main.c”
1 fatal error detected in the compilation of “../main.c”.
Compilation terminated.
>> Compilation failure
gmake: *** [main.obj] Error 1
gmake: Target `all’ not remade because of errors.
Build complete for project hello_world ”
what should i do??
[Responder]
sucotronic Reply:
April 2nd, 2011 at 19:04 pm
@RND, sorry, I’ve never used mspgcc under windows, so it seems to be a platform specific error. You can try to find support in the mspgcc mailing list or irc groups.
[Responder]
hola, muy bueno el blog.
Estoy viendo un ejemplo de codigo RF que se llama “RF_Toggle_LED_Demo” (http://edge.rit.edu/content/P11252/public/CC430%20RF%20Code%20Example.txt) y veo que utiliza operadores logicos bit a bit entre registros y ciertos bits. Por ejemplo:
void Transmit(unsigned char *buffer, unsigned char length)
{
RF1AIES |= BIT9;
RF1AIFG &= ~BIT9; // Clear pending interrupts
RF1AIE |= BIT9; // Enable TX end-of-packet interrupt
WriteBurstReg(RF_TXFIFOWR, buffer, length);
Strobe( RF_STX ); // Strobe STX
}
¿Como puedo saber el significado de BIT9, BIT7, BIT6, BIT0, etc? Pude encontrar el significado de esos registros, pero el significado de esos bits no lo encuentro por ningun lado
Desde ya muchas gracias!!
[Responder]
sucotronic Reply:
April 7th, 2011 at 7:30 am
@Luis, en la wiki de TI tienes toda la documentación que necesitas. En concreto el registro que tu comentas está en el documento slau259 en la página 600 y explica que se usa para determinar como son lanzadas las interrupciones que puede generar el módulo RF. En la página 538 tienes la explicación de las interrupciones.
[Responder]
Luis Reply:
April 7th, 2011 at 18:04 pm
@sucotronic, muchisimas gracias por la info!!
Ahora otra cuestión: este ejemplo RF que estoy viendo “RF_Toggle_LED_Demo” es para que se envien paquetes dos aparatos CC430, pero lo que yo quiero solamente es que el Chronos eZ430 le envie paquetes al Access Point (basado en el CC1111) incluido en el kit
¿será necesario cargar un codigo fuente al Access Point para lograr este objetivo?
en caso de ser necesario ¿debo comprar el CC Debugger (http://focus.ti.com/docs/toolsw/folders/print/cc-debugger.html)? ¿o simplemente poniendo el RF AP en el puerto USB de mi maquina ya lo puedo programar?
Gracias y disculpa las molestias!!
[Responder]
sucotronic Reply:
April 11th, 2011 at 11:13 am
@Luis, lo siento, ahí si que no te puedo ayudar, ya que no he trasteado más con él. Lo que si es seguro es que si quieres usar el Access Point para otra cosa que sea interactuar con el chronos y el programa que trae por defecto, te hará falta el CC Debugger para reprogramarlo.
Hola, no sé si me podéis ayudar pero a alguien le ha salido el siguiente error?
MSP430: Can’t Run Target CPU: Could not read Enhanced Emulation Module register
El programa antes me funcionaba correctamente pero ya no.
Gracias, un saludo.
[Responder]
sucotronic Reply:
May 5th, 2011 at 15:02 pm
@Blen, parece que no tienes bien configurado el tipo de chip que quieres programar. Revisa la configuración para asegurarte de que es el correspondiente al ez430.
[Responder]
Buenas,
buen aporte ,después de trastear con el reloj se pueden hacer cosas chulas y a buen precio
. Tengo una duda, e igual me puedes ayudar. ¿Es posible cambiar los nombres al menú? Por ejemplo que en vez de “Acc” aparezca “app”. ¿Sería necesario el CC debugger para ello?
Un saludo, y muchas gracias de antemano.
[Responder]
sucotronic Reply:
June 21st, 2011 at 14:34 pm
@Paniplús, tienes que modificar el código original que viene el reloj y que te puedes descargar en la página del wiki de ti.
[Responder]
Paniplus Reply:
June 24th, 2011 at 12:18 pm
@sucotronic, Ya lo he modificado,sólo se necesita cambiar la cadena de texto que se le pasa a “display_chars()” dentro de “display_rf()”. Pero no consigo compilarlo, me da repetidamente este error “ERROR: argument to option -O (“0-3″) is out of range (must be from 0 to 3)” al compilar todos los archivos ¿qué puede ser? CCS tiene alguna limitación?
[Responder]
sucotronic Reply:
June 24th, 2011 at 16:41 pm
@Paniplus, ese error sale porque las opciones del compilador no son correctas. En concreto dice que la opción -O tiene un argumento fuera de rango, ya que debe estar entre 0 y 3. No es ninguna limitación del CCS, debería buscar donde está la configuración del compilador y cambiarlo.
I just started wiht chronos. Do you have examples in code C?
[Responder]
sucotronic Reply:
September 1st, 2011 at 14:59 pm
@Thiago, if you want sample code for Chronos, it is in the 8th step in the post.
[Responder]
Hola sucotronic,
buen dia, oye tienes alguna idea de porque me puede marca un error en libreria “dm.h” la cual es una libreria que se encuentra dentro de la libreria “project.h” la verdad es que solo introduje los documentos .h y cree mi propio .c pero no me deja debuggear porque me dice que no puede abrir fuentes dentro del project.h
Sabes que significan dm.h? si tengo la libreria si la encontre dentro de unas de las carpetas, pero no se que sea :p
Ayer mande mi trabajo el cual postie en el punto 17 y fue bien recibido, sin embargo quiero seguir trabajando con el. Gracias!
Le0o
[Responder]
sucotronic Reply:
November 21st, 2011 at 21:03 pm
@Le0o, siento no poder ayudarte LeoOo, pero tiene pinta de que la ruta hacia el fichero “dm.h” no está bien especificada en el fichero que lo incluye. Busca el fichero que lo incluye, e intenta modificar la ruta.
[Responder]
Hola a todos.
Alguien que esté utilizando el eZ430 tiene problemas con la aceleración?? Estoy usándolo para medir aceleraciones y velocidades y tengo el problema de que cuando leo los valores de la aceleración en posición estática da valores que no se corresponden con la realidad. Si por ejemplo pongo un eje para que la gravedad solo le afecte a él, me debería dar 1g y me da 1,2 aproximadamente y si le doy la vuelta, debería darme -1g y me da -0,7. Así con todos los ejes, y por tanto no puedo hacer aplicaciones si los valores de la aceleración son incorrectos. Voy a intentar ver si consigo calibrarlo o algo, pero si alguien sabe como solucionarlo se lo agradecería.
Gracias
[Responder]
sucotronic Reply:
November 24th, 2011 at 0:18 am
@Lucidio, siento no poder ayudarte, pero te recomiendo que te pases por el foro de 43oh, allí seguro que alguien tiene los conocimientos adecuados.
[Responder]
Buenas, yo estoy usando el compilador IAR (tengo que hacer un programita usando el reloj para mi proyecto fin de carrera y tengo que usar ese compilador ya que me lo ha impuesto el profesor, para empezar estoy probando con programarle algo sencillo como este “hello world”)… en fin, copio y pego el programa, compilo, debug, run (en el caso de IAR es “go”) pero no aparece nada en la pantalla, esta todo parado, y en la pantalla estan todos los segmentos del display encendidos, se queda todo igual desde que conecto el reloj hasta que lo desconecto. Luego al desconectarlo, sigue igual, pero pulso un boton y vuelve a estar como siempre, con la hora y demas opciones.
Total, que no se como es. Soy principiante y tengo que aprenderlo a la fuerza.
Gracias.
[Responder]
sucotronic Reply:
December 18th, 2011 at 14:18 pm
@Coffin, hola Coffin, ¿le has quitado la pila para programarlo?
[Responder]
Coffin Reply:
December 19th, 2011 at 10:36 am
@sucotronic,
Claro, le quité la pila.
No se si incidir sobre este problemilla e intentar solucionarlo hasta ver que consigo cargar este programa en el reloj o pasar a programar lo mio, pero me da cosa que llegado el momento me surja el mismo problema.
[Responder]
Coffin Reply:
December 19th, 2011 at 13:01 pm
@sucotronic, SOLUCIONADO!
he estado mirando las opciones del compilador, y es que para este (el IAR) hay que trastear un poco mas en las opciones, me faltaba lo de seleccionar el chip CC430F6137.
Bueno, ahora tras esto, para volver a tener el reloj como estaba, he leido que basta con cargarle digamos el programa basico, que… debo tenerlo, no? en el CD quizas?
[Responder]
Coffin Reply:
December 19th, 2011 at 13:26 pm
@sucotronic,
Perdón por la sucesión de posts, debí preveer esto y haberme esperado.
Solucionado queda todo, hi earth en pantalla, y luego recarga del programa original que viene con la instalacion del Chronos-setup.
Gracias.
Un saludo.
[Responder]
Buenas, tengo una duda.
No se en que parte de la documentación del reloj buscar que variable tengo que usar para hacer que el reloj haga un pitido. Por ejemplo, algo sencillo, quiero que dado un numero, si es mayor que tal, pues el reloj pite. Cuando ponga “if (numero>nº) { PITAR? }”
Lo mismo supongo para programar algo que necesite el uso de los botones del reloj, en fin, quiero usar los “periféricos del reloj”, botones, sonido, display, etc.
Gracias.
Un saludo.
[Responder]
sucotronic Reply:
December 24th, 2011 at 10:59 am
@Coffin, para usar el buzzer tienes que hacer uso del buzzer, que está conectado a un pin capaz de generar un pulso PWM. Ahora mismo no puedo mirar el código y/o el esquema para orientarte, pero para guiarte puedes ehar un ojo a otro artículo que escribí sobre un buzzer y un msp430.
[Responder]
Buenas, hace unos días te escribí preguntándote por el buzzer, ya vi como usarlo y tal, solo hay que llamar a la función start_buzzer, pero hay un problema, llevo días probando combinaciones y no veo sentido a esto. La función pide 3 parámetros: (cycles, on_time, off_time) … viene una descripción de cada uno pero no acabo de entenderlas.
la función es así en buzzer.c:
void start_buzzer(u8 cycles, u16 on_time, u16 off_time)
{
// Store new buzzer duration while buzzer is off
if (sBuzzer.time == 0)
{
sBuzzer.time = cycles;
sBuzzer.on_time = on_time;
sBuzzer.off_time = off_time;
// Need to init every time, because SimpliciTI claims same timer
// Reset TA1R, set up mode, TA1 runs from 32768Hz ACLK
TA1CTL = TACLR | MC_1 | TASSEL__ACLK;
// Set PWM frequency
TA1CCR0 = BUZZER_TIMER_STEPS;
// Enable IRQ, set output mode “toggle”
TA1CCTL0 = OUTMOD_4;
// Allow buzzer PWM output on P2.7
P2SEL |= BIT7;
// Activate Timer0_A3 periodic interrupts
fptr_Timer0_A3_function = toggle_buzzer;
Timer0_A3_Start(sBuzzer.on_time);
// Preload timer advance variable
sTimer.timer0_A3_ticks = sBuzzer.off_time;
// Start with buzzer output on
sBuzzer.state = BUZZER_ON_OUTPUT_ENABLED;
}
}
… y en el buzzer.h también hay una breve descripción de las variables:
struct buzzer
{
// Keep output for “time” seconds
u8 time;
// On/off duty
u16 on_time;
u16 off_time;
// Current buzzer output state
u8 state;
};
extern struct buzzer sBuzzer;
(cycles, on_time, off_time)
he probado combinaciones (5,500,0) pita 5 veces, 1 tick cada 2 seg, luego 3 seg de espera.
luego (10,500,0) igual pero pita 10 veces… pensé que el primer valor daba el numero de pitidos, pero en cuanto meto valor al ultimo parámetro, off_time… se desmoronan todas mis hipótesis:
(3,500,10)…. pita 1 vez cada segundo, (cuando yo pensaba que pitaría 3 veces.
un lío…
Gracias, un saludo.
[Responder]
sucotronic Reply:
December 29th, 2011 at 18:47 pm
@Coffin, cycles -> número de ciclos (pítidos), on_time -> tiempo sonando en un ciclo, off_time->tiempo apagado en un ciclo. Las medidas de los tiempo no sé si serán en ms o en otro, depende de como haga las cuentas el código y en que reloj se base.
[Responder]
[...] programmierbaren Uhr eZ430 Chronos ist das nicht so einfach. Glücklicherweise fand ich auf einer spanischen Webseite eine Abwandlung von Hello World, nämlich Hi Earth. Meine Bemühungen, daraus ein Hello World zu [...]
January 21st, 2012 at 21:00 pm[...] ist der Code für main.c, basierend auf dem spanischen Original, aber an der ein oder anderen Stelle optimiert. // Hello World // Description: Shows "hEllo [...]
January 31st, 2012 at 21:28 pm