viernes, 29 de marzo de 2013

Zompantli: Música Etno-Electrónica

Buen día a todos, quiero compartirles algo de la cultura mexicana que recientemente he descubierto.
Este grupo de chavos se hacen llamar Zompantli y tienen un espectáculo etno electrónico. Sus presentaciones van acompañadas de una coreografía y vestimentas que se basan en la cultura pre-hispánica nativa mezclada con la actualidad. Todo es llevado acabo con música electrónica que tiene un toque de étnica. Entre sus diferentes canciones se encuentran; Venado, Emiliano, Tezcatlipoca, Puma, Cholollan, Flauta de barro, etc.
Todas estas canciones las pueden escuchar en su canal de SoundCloud.

A continuación les muestro su reciente video, a mi parecer muy bueno.
 
 


Espero que les guste. Gracias.

Control de un brazo robotico via Bluetooth por celular

Hola pues solo quería mostrarles un pequeño proyecto realizado en el semestre anterior en la materia de Comunicaciones 2, donde se viern protocolos de comunicaciones industriales e inalambricos como el Bluetooth, cualquier duda pueden comentar, espero que les guste.

La aplicacion consistia en mediante un celular y una aplicacion realizada en java, controlar el brazo robotico muy conocido por ser distribuido por una empresa. Se debia hacer pasar una pequeña pelota por una canasta, la cual contenia un sensor infrarrojo que detectaba cuando algo pasaba por ella, lo que ocacionaba que se enviara una señal de vuelta al celuar y éste aumentara el marcador que en el video aparece como "logros".

Se uso un PIC16f877a por ser el que mas teniamos a la mano, un modulo bluetooth hc05, y pues varios componentes electronicos. 
 
 

Hice un Emisor de TV y pedi mi calificacion via TV =)

Bueno pues solo queria mostrarles un proyecto que hice en la uni en la materia de comunicaciones en el cual debiamos construir un transmisor de audio y video para el canal 3 (modulado en AM a 61.25MHz), el chiste era que cuando te saliera podias pedirle tu calificacion al profesor unicamente via TV y asi lo hicimos, saludos, espero les guste. (por si no se dan cuenta soy el de rojo XD). Huajuapan de Leon, Oaxaca, Mexico.   

 

Carro de Da Vinci modelado en SolidWorks




Me permito compartirles un modelo 3D que hice como proyecto final en la universidad sobre el carro de DaVinci, cabe mencionar que no hay una interpretación exacta sobre como era o deberia ser el mismo solo algunos bocetos originales, tambien cabe mencionar que lo hice en una noche y no me dio tiempo terminar todo lo que tenia planeado pues tuve que sacar todos los planos yo mismo de otra manera hubiera sido muy facil, lo digo por si alguien se pone exigente y me dice que no es asi el modelo.

Subo unos renders solamente por no tener tiempo y subo el proyecto total. TODO absolutamente TODO lo hice yo basandome en algunas imagenes del boceto original, espero que les guste y que comenten, y pue los puntos si realmente les gusto.




Renders:







Modelos existentes:
 
 

Y por ultimo todo el proyecto, son archivos de SolidWorks tanto piezas como ensambles y el ensamble final así como dibujos mismos de SW pero sin terminar por que como les dije no me dio tiempo.
DESCARGAR 

lunes, 4 de febrero de 2013

CircuitHub: Todos los componentes electrónicos en un solo lugar.

Jonathan Friedman, después de haber trabajado con cientos de estudiantes y darse cuenta de que casi todos los diseños que éstos realizaban contenían al menos un error que podría dañar una cadena de producción o fabricación, decidió escribir un artículo acerca de la dificultad de diseño y realización de productos electrónicos (enlace al final de éste artículo). En el documento, Friedman propuso una solución a la que originalmente llamó “FriedParts”, que hizo eco en quien sería su amigo al otro lado del Atlántico, Andrew Seddon, en Londres. Andrew, un ingeniero de diseño y consultor senior, ya estaba trabajando duro en su propia solución al mismo problema. Los dos se dieron cuenta de la sinergia de sus estudios, sacrificaron muchas horas de sus respectivos trabajos, y se acercaron a “Y Combinator”. Para aquellos que no lo sepan, ésta es una entidad dedicada a brindar soporte y apoyo financiero a pequeños emprendedores tecnológicos. Ejemplos de estas “Start Up”, salidas de las entrañas de "Y Combinator", podemos encontrar a Scribd, Reddit y Dropbox entre las más populares. De este modo nació en 2011 CircuitHub, destinada a toda aquella persona o empresa que desee optimizar sus tiempos de desarrollo, sus gastos originados por el tiempo muerto que significa deambular en la web buscando librerías, hojas de datos y hasta “footprints” de muchos componentes. Entre las particularidades del emprendimiento, se destaca la posibilidad de crear un espacio colaborativo y universal, es decir, que pueda ser útil para cualquier programa CAD, orientado al desarrollo electrónico. Observa este video de presentación:



El video es muy claro y fácil de comprender. Mucha gente alrededor del mundo estará en este momento creando sus librerías para un mismo dispositivo, utilizando un tiempo valioso que puede ahorrarse con la ayuda de este sistema. Además de contar con centenares de ejemplos para, como mencionamos al principio, diferentes programas populares, dedicados al desarrollo electrónico como son Orcad, Altium,Eagle o Kicad, cada usuario podrá aportar sus trabajos para crear así una comunidad global, universal y en consecuencia, útil para todos. Otro de los aspectos importantes de destacar está en la posibilidad que brinda CircuitHub de permitirle al usuario “crear” las librerías en línea y hacerlas públicas, para que toda la comunidad tenga acceso a ellas. Un editor gráfico simple, pero potente, se encuentra a disposición de cada usuario cuando agrega un componente y desea realizar la librería que millones de personas alrededor del mundo podrán emplear en sus esquemáticos. Con pasos básicos, marcando, copiando y pegando, en pocos minutos cualquier circuito integrado estará disponible en la nube para compartirlo con el mundo entero. Para realizar esta tarea, sólo bastará con ingresar al sitio CircuitHub iniciando sesión con tu cuenta de Dropbox. Observa:




Esta herramienta está dirigida directamente a los fabricantes y empresas de desarrollo y manufactura electrónica. Por supuesto, tú también puedes sumar tu granito de arena creando librerías y agregando nuevos dispositivos. Cada uno de nosotros puede hacerlo. Al ofrecer una biblioteca de piezas completas y detalladas, CircuitHub espera ser el principal recurso orientado a la búsqueda de componentes electrónicos. Pero CircuitHub sólo tendrá éxito “si se puede construir” esta enorme base de datos. Todo el sistema está abierto a la colaboración en grupo y el futuro de CircuitHub está condicionado a que las empresas del sector y cada usuario con buena voluntad y espíritu participativo, dedique algunos minutos a añadir piezas a lo que pretende ser la mayor base de datos del mundo de componentes electrónicos en la nube. Uno de los problemas más graves que tienen los fabricantes de equipos electrónicos es el tiempo que insume la realización de los esquemáticos y los gerbers de los PCB, debido a las dificultades de obtener todos los elementos necesarios rápidamente. Para que no tengas que recorrer decenas de sitios buscando una librería, CircuitHub está pensado y diseñado para reunir toda la información en un solo sitio destinado a abordar y resolver esta problemática. La plataforma inicial ya está en marcha, el futuro depende de los usuarios.

CircuitHub está respaldado por Y Combinator, con inversiones de Google Ventures e inversores notables como Paul Buchheit (Inventor de Gmail), Matt Cutts (Creador de Google SafeSearch), Alexis Ohanian (Co-fundador de Reddit), Harj Taggar (Co-fundador Auctomatic) y Garry Tan (Co-fundador de Posterous), entre otros.

jueves, 24 de enero de 2013

Control de Velocidad de un motor CD mediante MSP430+Bluetooth

Introducción
En este proyecto muestro como desarrollar un control de velocidad para un motor pequeño de CD hacia un solo sentido mediante un PWM. Dicho PWM es generado por el TIMERA0 del microcontrolador MSP430G2553 que viene por defecto con nuestro LaunchPad de TexasInstruments. La asignación de la velocidad deseada se lleva acabo mediante ordenes vía Bluetooth desde una aplicación que sea compatible con comunicación serial  a 9600 baudios, en este caso lo haremos con una app que simula una terminal que se enlaza con un módulo Bluetooth HC-05 el cual se comunica con nuestro microcontrolador mediante el protocolo UART. La fase de potencia a la salida del microcontrolador es llevada acabo mediante un circuito integrado L293D el cual es un circuito de Puentes H.

Wiki (Opcional):

Requerimientos
Para poder llevar acabo este proyecto necesitamos:

Procedimiento
El circuito
El circuito eléctrico está compuesto por:
  1. Fuentes de alimentación eléctrica. En mi caso uso una fuente de poder de una PC vieja que resultaperfecta para éste proyecto y la mayoría dado que unas de las posibles salidas de dicha fuente de alimentación son +-3.3V, +-5V, etc. y si recordamos nuestros microncontroladores de la familia MSP430 son ultra-low power por lo que pueden ser alimentados desde 1.8V hasta 3.4V aproximadamente, mientras el Bluetooth que yo uso está montado en una base con pines para ser alimentado entre 3.6V y 6V, el circuito L293D puede ser alimentado a 5V para el funcionamiento del mismo mientras como fuente de alimentación para los motores puede variar hasta 36V. En este caso solo usaremos la misma fuente de alimentación de 5V dado que el motor usado es de ese voltaje.
  2. El módulo Bluetooth. Éste componente estará enlazado inalámbricamente con el celular o computadora con la que se desee controlar el motor DC. De manera alámbrica está conectado con el microcontrolador mediante sus canales TXD y RXD (véase que es el protocolo UART y cómo funciona). El pin del módulo Bluetooth denominado como RXD debe conectarse con el pin 4 (UCA0TXD) del microcontrolador, mientras el pin TXD del Bluetooth debe conectarse al pin 3 (UCA0RXD) del microcontrolador.
  3. Microcontrolador MSP430G2553. Dicho microcontrolador es el que trae a la fecha el antiguo LauchPad (A la fecha, hace unos días salio una versión mjorada con otro microcontrolador de la misma familia, ya hablaremos de éste en cuanto reciba mi LaunchPad). Éste microcontrolador es alimentado en un rango de voltaje bajo, para éste caso 3.3V el cual debe ser suministrado en el pin 1. La tierra o GND (también conocida para algunos como el menos de la alimentación) es conectada en el pin 20 de dicho microcontrolador. Una nota muy importante que hay que considerar es que el pin 16 o RESET, debe estar puesto en alto (conectado al voltaje positivo de la alimentación) dado que si está a tierra o está flotado, el microcontrolador no trabajará, esto se debe que como todos los microcontroladores, éste es el pin RESET, o sea que con éste pin podemos reiniciar el programa cuando queramos poniendolo en bajo (conectándolo a tierra) y vlviendo a ponerlo en alto.
  4. El integrado L293D. Éste circuito contiene dentro 4 drivers puente H qu pueden ser usados en tres modos diferentes como lomuestra su datasheet o la imágen de abajo. Éste circuito se alimenta para su funcionamiento en el pin 16 a 5V, mientras que para el suministro de voltaje para el motor se realiza en el pin 8 y soporta hasta 36V y 600mA nominales. Para éste caso usamos la configuración de controlar un solo motor, por lo que solo debe conectarse la parte encerrada en un cuadro verde y por supuesto la alimentación de 5V alos pines 8 y 9. El pin 9 sirve para activar/desactivar dos de los drivers como se muestra en la imágen. Se debe conectar el pin 15 de éste circuito con el pin de salida del microcontrolador 14, pues en éste se pone la salida el PWM en nuestro programa. 
 

 
La programación
La programación de nuestro Launchpad y microcontrolador se realiza en el software gratuito CodeComposerStudio distribuido por el mismo TexasInstruments (del cual dejé un enlace arriba). Abriendo nuestro entorno de desarrollo hacemos click en File->New->CCS Project como se muestra a continuación.


Después de realizar esto aparecerá una ventana donde debemos ingresar los parámetros para nuestro nuevo proyecto, en el cual debemos especificar:
  • Nombre: El que gusten (El que le puse se muestra en la imagen).
  • Output type: Executable
  • Family: MSP430
  • Variant: MSP430G2553
  • Connection: TI MSP430 USB1 (Nuestro LaunchPad)
  • Y seleccionamos "Empty Grace (MSP430) Project"


Al final solo presionamos "Finish" y una vez creado nuestro proyecto, aparecerá la siguiente ventana de bienvenida, donde nos interesa el archivo "main.cfg" y dentro de éste, la subpestaña "Device Overview", hacemos click en ésta.


Después de realizar lo anterior, nos aparece un diagrama de bloques sobre los módulos que componen a nuestro microcontrolador. Aquellos bloques en azul son los que podemos modificar mientras los que están de blanco son aquellos que no.
Los módulos que modificaremos serán el voltajes de alimentación, El Timer0_A3, el USCI A0 y como opción el bloque de reloj, aunque no es necesario dado que nuestro timer trabaja con un reloj secundario. Para modificar algún módulo solo es necesario hacer click en él y nos abrira una pestaña inferior en la que debemos ingresar los parámetros. En este punto hay que aclarar que el suministro de voltaje que le daré al microcontrolador fuera del LaunchPad será de 3.3V que es uno de los voltajes de una fuente de poder de computadora la cual yo uso y otro punto importante es que el Pin RST/NMI (Reset) debe ser alimentado con el voltaje de alimentación dado que si se pone a tierra o se deja flotando, el microcontrolador NO funcionará.


Si hacemos click en el módulo del reloj, aparece la siguiente ventana en la que podemos modificar la frecuencia del reloj principal, en mi caso lo deje en 1MHz. Guardamos y vamos a la ventana principal del Overview (la imagen de arriba).


Entramos a la configuración del Time0 y nos aparece una ventana que luce como la imagen de abajo. En las opciones superiores de dicha ventana solo nos aparece la opción "Overview" dado que dicho módulo por default está inactivo. Para activarlo solo hay que hacer check en el checkbox superior a la izquierda y esperamos a que cargue las demás opciones.


Podemos notar ahora que ya aparecen más opciones arriba y la que nos interesa es "Basic User", hacemos click en ésta y procedemos a configurar nuestro microcontrolador como sigue:


En la primer sección seleccionamos "PWM Mode" y "TA0.0 Output OFF". Dadoque trabajaremos a una frecuencia en el PWM de 100Hz, configuramos el Periodo del timer en 10milisegundos.
En la segunda sección seleccionamos "PWM Duty Cycle" y "P1.6/TA0.1", esto significa que el PWM será ajustado determinando el Duty del mismo y que deseamos la salida en el pin P1.6, donde recordemos el LaunchPad tiene un LED de salida en este pin. La elección de éste pin puede servir para el debugger.
En el Duty Cycle se debe ingresar el porcentaje del ciclo de trabajo en el que comenzará el programa, en este caso lo puse a 2%, pero dado que no es exacto, Code Composer lo aproximó a 1.7%, explicaré más adelante el por qué.
A continuación guardamos, regresamos al Overview General y ahora entramos el módulo USCI_A0.


Nos vamos a Basic User y como primer opcíón debemos elegir el protocolo de comunicanión que será usado, en ese caso es UART. Después de elegir dicha opción, proseguimos a configurarlo de la siguiente manera.


Debemos activar los pines de entrada/salida del módulo UART que por default están desactivados. En éste caso solo necesitamos el pin de entrada, dado que no enviaremos algún dato de regreso, sin embargo estableceremos los dos. Configuramos la opción "Baud" a 9600 bps que es la frecuancia o velocidad de comunicación que trae por defecto nuestro módulo Bluetooth en su puerto UART. y por último activamos la interrupción de entrada haciendo check en el checkbox correspondiente.

Despés de terminar de configurar los módulos de nuestro microcontrolador mediante Grace, proseguimos a guardar todo y construir nuestro proyecto haciendo click en el icono de "Build" con forma de martillo arriba del explorador de proyectos, esperamos a que termine y si no nos equivocamos no marcará ningún error.


Una vez terminada la compilación, dos son los archivos que nos interesan, por una parte el archivo Timer0_A3_init.c el cual contiene los parámetros para la configuración y modificación del funcionamiento del PWM y el archivo InterruptVectors_init.c que es el código fuente de las interrupciones y que es ahí donde programaremos el comportamiento de nuestro microcontrolador a las entradas que le enviemos.


Primero abrimos Timer0_A3_init.c y observamos los dos registros que nos interesan, por un lado encontramos el registro TA0CCR0 el cual tiene asignado un valor de 119. Éste registro contiene el número total de unidades que componen a nuestro ciclo completo mientras que el registro TA0CCR1 contiene la cantidad de unidades del ciclo completo en el cual la salida está en alto. De este modo 119 unidades son el 100% del periodo, así que si queremos un Duty del 50% necesitamos asignar a TA0CCR1 el valor de 59.5(aproximarlo a un entero dado que no podemos ingresar fracciones). Si recuerdan cuando configuramos el Duty en el módulo comente que explicaría la razón por la que después de haber puesto un Duty inicial del 2% nos lo había cambiado al 1.7% y esto se debe a que como 119 unidades son el 100%, el 1% serían 1.19 unidades, como deseamos el 2% multiplicamos 2*1.19=2.38 unidades y como anteriormente había dicho solo pueden ser ingresadas unidades enteras por lo que se redondea a 2 unidades. Si dividimos 1.19/2 obtenemos así el porcentaje de 1.68% aproximado a 1.7%.
Resumiendo esta parte, las dos cosas que debemos rescatar son que:

  1. En TA0CCR0 están guardadas las unidades que representan el 100% del ciclo total y que
  2. En TA0CCR1 están guardadas las unidades que representan al Duty (estado en alto en la salida)

Por lo anterior se concluye que para modificar el Duty de nuestro PWM y por consiguiente la velocidad del motor, necesitamos modificar el registro TA0CCR1 lomitándonos por el valor del registro TA0CCR0.


A continuación abrimos el archivo de  la interrupciones e introducimos en la función de interrupción de entrada, el código que se muestra a continuación.


En este código estamos declarando una variable tipo caracter llamada "car", a la cual le asignamos el valor en el bufer de entrada para después crear una función switch para determinar que dato está entrando y que debe realizar el microcontrolador en base a esta entrada.
En orden ascendente y de izquierda a derecha en un teclado qwerty, las teclas de la "q" a la "p" tienen asignados valores que auentan de 10% en 10% para aumentar o reducir la velcidad del motor, de este modo la letra "q" significa que el motor trabajará a un Duty del 10%, la letra "w" a un Duty del 20% o la letra "p" al 100%. Habiamos comentado que las unidades totales del ciclo son 119, por lo que el 10% es un aproximado de 12 unidades. Dichos valores son asignados al registro TA0CCR1 que como habíamos mencionado antes, controla el Duty.

Después de esto solo necesitamos crear un bucle infinito en el código principal que es main.c.


Por último sólo necesitamos construir nuevamente nuestro proyecto haciendo click en el icono del martillo como anteriormente o podemos hacer click derecho en nuestro proyecto en el Explorador de Proyectos y seleccionar "Build Project", en general recomiendo esta forma dado que si tienes más proyectos abiertos y en los cuales estás trabajando, Code Composer puese compilar otro proyecto en lugar del que deseas.


Al final como ya sabemos, con nuestro LaunchPad conectado hacemos click en Debugg que es el ícono al lado del martillo que tiene forma de  escarabajo y esperamos a que cargue el programa a nuestro LaunchPad, de ahí podremos o debuggearlo o simplemente detener el debugger, desconectar el LaunchPad, sacar el microcontrolador del LaunchPad y comenzar a probar en nuestro protoboard.


Si deseas ver el resultado, al final está el video.


En el video se muestra desde como programar el microcontrolador y como debuggearlo hasta la implementación en un protoboard. 


Recursos Adicionales
Video
En éste video se muestra el proceso de programación y el resultado ya implementado en un protoboard.



Se agradece cualquier comentario o duda.

lunes, 21 de enero de 2013

Encendido de LED's mediante MSP430 + Bluetooth

Introducción
En este proyecto se muestra el encendido y apagado de LED´s usando un microcontrolador MSP430G2553, un módulo Bluetooth HC-05 y un terminal Android, aunque cabe destacar puede ser algún otro microcontrolador de la familia de los MSP430 de TexasInstruments, algún otro módulo Bluetooth y alguna otra terminal con capacidad de comunicarse vía Bluetooth como una PC o una tablet.

Requerimientos Para poder llevar acabo este proyecto necesitamos:

-LaunchPad de TexasInstruments

-Módulo Bluetooth (en este caso HC-05)

-CodeComposerStudio versión 5.3 o posterior


-Terminal Android (O alguna otra con capacidad de comunicación Bluetooth)

Si se desea probar en un protoboard también se necesitan:

-Protoboard, cables, fuentes de alimentación, LED´s.

Comencemos:

Iniciaremos abriendo Code Composer Studio (en este caso la version 5.4) y en el explorador de proyectos haremos click derecho->New->CCs Project. 




Una vez que le hamos dado click en crear un nuevo proyecto, nos aparecerá un nueva ventana en la que asignaremos propiedades a nuestro proyecto, las cuales las asignaremos como se muestra a continuación:
  • Nombre: UARTGrace (alternativo)
  • Output type: Executable
  • Family: MSP430
  • Variant: MSP430G2553
  •  Connection: TI MSP430 USB1
  • Empty Grace (MSP430) Project
 y daremos click en Finish dado que ya no configuraremos nada más.

Una vez creado el proyecto, se creará una nuava pestaña al lado de la pestaña "TI Resource Explorer" llamada "main.cfg" éste archivo lo que nos muestra es la configuración de nuestro dispositivo de una forma más gráfica. Existen dos opciones en este archivo que son : "Welcome" que aparece por default y "Device Overview" que es donde nos interesa. En Welcome nos muestra información (en inglés por supuesto) acerca de lo que es Grace, etc. mientras que en Device Overview nos muestra un grafico compuesto por rectángulos que simulan cada uno de los módulos de los que se compone nuestro microcontrolador. Aquellos módulos en color azul son lo que podemos modificar mientras los que se encuentran en blanco no.

En ésta pantalla de vista del microcontrolador configuraremos el voltaje a 3.3V para el caso de que como yo, utilices una fuente de alimentación de PC para suministrar energía a tu dispositivo. En ésta misma pantalla daremos click a cualquiera de los módulos que deseemos modificar para poder tener acceso a sus parámetros. En este post estamos trabajando con el reloj interno, el módulo de configuración de los pines de propósito general y el módulo de comunicación UART.



Iniciaremos configurando el clock interno. Cuando hacemos click en dicho módulo, se abre una subpestaña en la que nos muestra cuatro opciones sobre dicho módulo "Overview", "Basic User", "Power User" y "Registers" donde estos últimos tres sirven para la configuración de dicho módulo a diferentes niveles de conocimientos por el usario, por lo que si eres un nuevo usuario de ésta familia de microcontroladores, te recomiendo usar Basic User.
Haciendo click en esta opción nos muestra un menú de opciones en la que configuraremos nuestro clock principal a 16 MHz, recordemos que mientras mayor frecuencia tenga, más rápido procesa la información. Otro de los motivos es que como usaremos una comunicación serial a 9600baudios, los 16MHz garantizan que podrá mantener la velocidad de comunicación.



Terminado de configurar el clock interno proseguimos a configurar el módulo de comunicación serial UART. En la pantalla inicial (Overview) marcamos el checkbox "Enable USC..." para activar nuestro módulo.



Entrando a Basic User seleccionamos UART y proseguimos a configurar nuestro módulo.



Activamos los pines entrada/salida del módulo UART. Configuramos a 9600 baudios y activamos las interrupciones entrada/salida del módulo como se muestra en la imágen. Nota que no es necesario activar la interrupción de salida, sin embargo lo haremos para que revises como desactivar dicha interrupción en futuros proyectos que desees hacer.



 Entrando al módulo GPIO configuraremos nuestros pines P1.0 y P1.6 como salidas. Notamos que por defecto los demás pines vienen como entradas, esto porque al estar como entradas tienen una gran impedancia y no le fectará algún descuido que tengamos poniendoles voltaje. Nota también que si usas el microcontrolador fuera del Launchpad necesitas poner en alto(al voltaje de alimentación 3.3V) el pin 16, esto dadoque es el pin reset y si no tiene voltaje el programa no comenzará.

Despues de haber configurado todos nuestros módulos con ayuda de Grace, debemos guardar todo y compilar (Build Project), esto con el fin de que Grace nos cree todos los arcivho s relacionados al código de los módulos.

Abrimos nuestro achivo main.c y escribimos el siguiente código.



El código anterior sirve para:
  • int i,j: Serán variables que ayudarán a crear retardos en tiempo con el fin de poder observar el parpadeo del LED.
  • Grace_init(); : Es solo una función creada automáticamente por Grace donde se llevan acabo las configuraciones que le indicamos anteriormente. Nodebes de precuparte por esta función.
  • El primer ciclo for solocrea un ciclo infinito mientras que los dos siguientes crean un retardo de aproximadamente 1 segundo.
  • P1OUT^=0x40 : P1OUT esta indicando  que afecta a todos los pines del registro entrada/salida 1. ^= esla función lógica XOR (OR exclusivo) es decir, si algún pin esta encendido, lo apagará o si esta apagado lo encenderá. En este caso el valor 0x40 es un numero hexadecimal que determina a qué pines estará afectando. Convirtiendo el número hexadecimal 40 a binario sería 01000000 es decir estaría afectando al pin 1.6 del registro entrada/salida 1 (P1.6).

En el explorador de proyectos abrimos la carpeta d nuestro proyecto UARTGrace->src->grace donde encontraremos los archivos del código fuente generados por Grace para los módulos. abrimos el único que nos interesa en este caso que es "InterruptVectors_init.c" y en los siguientes apartados escribiremos el siguiente código.
El primer segmento mostrado en la imágen pertenece al código de la interrupción de salida del UART, es decir, se activará siempre que se mande un dato. En este mismo ejemplo no estamos realizando algún uso con dicha interrupción, sin embargo hemos puesto el código necesario para apagar dicho interrupción en caso de que desees usarla en algún proyecto aparte dado que no se apaga sola lo que ocacionaría un cucle infinito sin salida.

El segundo segmento pertenece a la interrupcion de entrada de dato por UART, en este caso deseamos que cada vez que llegue un dato se active/desactive el otro LED según sea el caso. La primer línea de código se encarga de hacer esto mientras la segunda copia el dato de entrada desde el bufer de entrada hacia el bufer de salida, por lo que una vez que se termine esta interrupción, el programa entrará inmediatamente a la interrupción de salida y enviará el dato almacenado en bufer.


Después de todo lo anterior solo queda guardar todo y compilar nuestro proyecto. Si deseas aprender a debuggearlo o ver el resultado en un protoboard puedes ver el video de abajo.

Si deseas descargar el proyecto da click aquí.

Recursos alternativos

En el video se muestra desde como programar el microcontrolador y como debuggearlo hasta la implementación en un protoboard.



 
Cualquier duda o comentario es bien recibido.