Taller MBC004 – Ticker

Taller MBC004 – Ticker

1. Objetivo

Visualizar el conteo desde 0 hasta 99 en dos (2) display 7-Segmentos.

2. Materiales

  • Board Núcleo STM32F446RE
  • Cable USB Mini A
  • Protoboard
  • Cables Arduino
  • (2) Display 7-Segmentos (Ánodo Común)
  • (7) Resistencias 220

3. Hardware

Continuando con el taller del display 7 segmentos, vamos a conectar dos (2) displays para mostrar el conteo desde 0 hasta 99. Para ahorrar pines del microcontrolador dedicados a los displays, vamos a utilizar la técnica del multiplexado.

Multiplexar displays 7 segmentos no es otra cosa que conectar todos los segmentos de los displays unos con otros y controlar el tiempo de encendido de cada uno de los displays. Esto quiere decir que conectamos físicamente el Segmento A del Display 1 con el Segmento A del Display 2, el Segmento B del Display 1 con el Segmento B del Display 2 y así sucesivamente hasta el segmento G. Esto significa que no importa el número de displays a conectar (2 hasta N), en todos los casos todos los segmentos estarán conectados únicamente por 7 líneas. Para la activación de cada displays, se usa bien sea los anodos o los cátodos de los displays conectando cada uno a un pin del microcontrolador.

Nuestro cerebro y la visión del ser humano es capaz de procesar de forma separada entre 10 a 12 imágenes por segundo. Cuando una secuencia de imagenes supera este umbral nuestra visión percibe el movimiento continuo. Este efecto es conocido como persistencia de la visión y se mide en la cantidad de frames por segundo o FPS (Frames per Second). Esta es la razón por la que el cine utiliza 24 FPS y la televisión aproximadamente 30 FPS.

Creditos: https://commons.wikimedia.org/wiki/File:Animhorse.gif

Utilizando el principio de la persistencia de la visión, podemos encender uno a uno los displays de forma secuencial, dejando encencido cada uno de los display un intervalo de tiempo que logre al menos las 30 veces por segundo por display (30 FPS). Para calcular el tiempo en que se debe encender cada display, se obtiene el inverso de la frecuencia de 30 Hz (30 veces por segundo):

Frecuencia (Hz) = 1 / T

T = 1 / Frecuencia (Hz)

T = 1 / 30Hz = 0,0333 = 33,3 ms ≅ 33 ms

T = 33 ms

Entonces se debe configurar esta interrupción para que cada 33 ms, apague el display actual y encienda el otro display. De esta manera nuestra visión percibirá que ambos display estan encendidos todo el tiempo. Si se coloca esta tiempo el ojo humano alcanza a detectar un leve parpadeo entre los display, por esta razon en mi caso siempre eligo la tercera parte de este tiempo, es decir aproximadamente 10 ms.

Una vez comprendido el proceso de multiplexado, veamos cómo se puede programar esto en mbed aprovechando el API disponible.

4. Software

Para este ejemplo usamos los mismos pines para los segmentos de los dos (2) displays:


// Define GPIO Pins 7-Segment Display
// PA_10 --> A
// PB_3 --> B
// PB_5 --> C
// PB_4 --> D
// PB_10 --> E
// PA_8 --> F
// PA_9 --> G

BusOut display7Seg(PA_9, PA_8, PB_10, PB_4, PB_5, PB_3, PA_10);

Y conectamos los anodos de los dos displays a pines independientes del microcontrolador:

// Anode Display 1
DigitalOut display1(PC_7);

// Anode Display 2
DigitalOut display2(PB_6);

/media/uploads/adustm/nucleo_f446re_morpho_right_2016_7_22.pngExiste una función en mbed que permite generar una interrupción cada cierto tiempo llamada Ticker. Esta función permite definir el tiempo en que la interrupción es generada y la función a la que se llama cuando este tiempo ha transcurrido.


 Ticker changeDisplay;

// Configure Change Display Selected each 10 ms
changeDisplay.attach(&changeDisplaySelected, 0.010);

En este caso la interrupción sera generada cada 33 millisegundos y cada vez que se cumple este tiempo, es llamada la función changeDisplaySelected. En esta función se realiza el cambio del display activo y se exporta al bus el valor a mostrarse en este display. Cuando un display esta encendido, el otro esta apagado.

// Change Display Selected
void changeDisplaySelected() {

   // Check Display Selected
   if(display1) {

      // Turn Off Display 1
      display1 = 0;

      // Export data to Bus
      display7Seg = anodeComun[units];

      // Turn On Display 2
      display2 = 1;

   } else {

      // Turn Off Display 2
      display2 = 0;

      // Export data to Bus
      display7Seg = anodeComun[tens];

      // Turn On Display 1
      display1 = 1;
   }
}

De esta manera podemos encender y apagar uno por uno los displays usando las interrupciones del microcontrolador logrando a través de la persistencia de la visión ver ambos displays encendidos al mismo tiempo.

5. Montaje Protoboard

6. Plano

7. Código

Si quieren importar este ejemplo en el workspace de su ambiente Mbed, ingrese a la siguiente URL https://os.mbed.com/teams/Mbed-Colombia-Meetup/code/MBC003-BusOut/ y hagan click en el botón Import to Compiler.

/**
* MBC004 - Ticker
* This example use the BusOut function with a 7-Segment Display
* 12 Jul 2018 - Mbed Colombia - https://mbedcolombia.wordpress.com/
*
* Board: ST-Nucleo-F446RE - https://os.mbed.com/platforms/ST-Nucleo-F446RE/
*
* Copyright [2018] [Leandro Perez Guatibonza / leandropg AT gmail DOT com]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"</pre>
// Define GPIO Pins 7-Segment Display
// PA_10 --> A
// PB_3 --> B
// PB_5 --> C
// PB_4 --> D
// PB_10 --> E
// PA_8 --> F
// PA_9 --> G
BusOut display7Seg(PA_9, PA_8, PB_10, PB_4, PB_5, PB_3, PA_10);

// Anode Display 1
DigitalOut display1(PC_7);

// Anode Display 2
DigitalOut display2(PB_6);

// Variables Counter
int tens;
int units;

// Define Logic Anode Comun Display
// ABCDEFG
int anodeComun[16] = { 0b0000001, // 0
0b1001111, // 1
0b0010010, // 2
0b0000110, // 3
0b1001100, // 4
0b0100100, // 5
0b0100000, // 6
0b0001111, // 7
0b0000000, // 8
0b0001100, // 9
0b0001000, // A
0b1100000, // B
0b1110010, // C
0b1000010, // D
0b0110000, // E
0b0111000 }; // F

// Change Display Selected
void changeDisplaySelected() {

   // Check Display Selected
   if(display1) {

      // Turn Off Display 1
      display1 = 0;

      // Export data to Bus
      display7Seg = anodeComun[units];

      // Turn On Display 2
      display2 = 1;

   } else {

      // Turn Off Display 2
      display2 = 0;

      // Export data to Bus
      display7Seg = anodeComun[tens];

      // Turn On Display 1
      display1 = 1;
   }
}

// Main Loop runs in its own thread in the OS
int main() {

   Ticker changeDisplay;

   // Configure Change Display Selected each 10 ms
   changeDisplay.attach(&changeDisplaySelected, 0.010);

   // Inifite Loop
   while(1) {

      // Iterate between 0 and 99
      for(int i = 0; i < 100; i++) {

         // Calculate Tens and Units
         tens = i / 10;
         units = i % 10;

         // Wait 150 millisecond
         wait_ms(150);
      }
   }
}

8. Recursos

Aquí dejamos los recursos disponibles para el taller.

Espero haya sido de utilidad este taller. Cualquier duda o inquietud pueden consultarnos a través de nuestras sociales. Nos vemos en el próximo taller.

Twitter: @leandropg

Facebook: https://www.facebook.com/mbedcolombia

Instagram: leandropg.co

Taller MBC003 – BusOut

Taller MBC003 – BusOut

1. Objetivo

Mostrar los números hexadecimales del 0 al 9 y las letras A hasta la F en un display 7-Segmentos.

2. Materiales

  • Board Núcleo STM32F446RE
  • Cable USB Mini A
  • Protoboard
  • Cables Arduino
  • (1) Display 7-Segmentos (Ánodo Común)
  • (7) Resistencias 220

3. Hardware

Un display 7-segmentos, no es otra cosa que siete (7) leds encapsulados en un solo empaque formando el número 8:

Creditos: https://commons.wikimedia.org/wiki/File:Seven_segment_02_Pengo.jpg

Cada segmento del display es identificado por una letra:

Creditos: https://commons.wikimedia.org/wiki/File:7_Segment_Display_with_Labeled_Segments.svg

Un display 7 segmentos se puede conseguir en la configuración Ánodo Común o Cátodo Común. Esto quiere decir que todos los leds tienen un Terminal Común (Ánodo o Cátodo) con el fin de reducir la cantidad de líneas del modulo. La siguiente figura ilustra ambos tipos de configuración:

Ánodo Común

Cátodo Común

Cuando se usa un display Ánodo Común, el ánodo común es conectado a +VDD (+5V o +3.3V) mientras que los segmentos que deseamos encender son conectados a tierra (GND). El siguiente ejemplo ilustra como mostrar el número 3.

Cuando se usa un display Cátodo Común, el cátodo común es conectado a tierra (GND), mientras que los segmentos que deseamos encender son conectados a +VDD (+5V o +3.3V). El siguiente ejemplo ilustra como mostrar el número 3.

La siguiente animacion ilustra todos dígitos y letras que pueden visualizarse en un display 7 segmentos:

File:7-segments Indicator.gif

Creditos: https://commons.wikimedia.org/wiki/File:7-segments_Indicator.gif

Para controlar un display 7 segmentos desde un microcontrolador, podemos homologar los voltajes aplicados a los segmentos a valores digitales como se ilustra a continuación:

  • +VDD –> 1
  •   GND –> 0

De esta manera es posible crear tablas por programa que permitan mostrar el dígito o caracter que necesitemos encendiendo o apagando los segmentos dependiendo del tipo de display (Ánodo o Cátodo Común). La siguiente tabla almacena los patrones necesarios para prender los segmentos en un display de Anodo Común:

// Define Logic Anode Common Display
//                        ABCDEFG
int anodeComun[16] = {  0b0000001,      // 0
                        0b1001111,      // 1
                        0b0010010,      // 2
                        0b0000110,      // 3
                        0b1001100,      // 4
                        0b0100100,      // 5
                        0b0100000,      // 6
                        0b0001111,      // 7
                        0b0000000,      // 8
                        0b0001100,      // 9
                        0b0001000,      // A
                        0b1100000,      // B
                        0b1110010,      // C
                        0b1000010,      // D
                        0b0110000,      // E
                        0b0111000 };    // F  

Una vez comprendido el proceso de encender los segmentos dependiendo del tipo de display utilizado (ánodo o cátodo común), veamos cómo se puede programar esto en mbed aprovechando el API disponible.

4. Software

Existe una función en mbed que permite manejar varios pines de salida al mismo tiempo llamada BusOut. Esta función permite definir los pines del bus ordenados desde el bit menos significativo (LSB) al bit más significativo (MSB).

Para el ejemplo hemos usado un display de ánodo común utilizando los siguientes pines para cada uno de los segmentos:

PA_10 --> A
PB_3  --> B
PB_5  --> C
PB_4  --> D
PB_10 --> E
PA_8  --> F
PA_9  --> G

/media/uploads/adustm/nucleo_f446re_morpho_left_2016_7_22.png

De esta manera podemos definir la función de nuestro display de la siguiente forma:

BusOut display7Seg(PA_9, PA_8, PB_10, PB_4, PB_5, PB_3, PA_10);

Escribir un valor en este bus, exporta dicho valor directamente a los pines seleccionados. Si por ejemplo escribimos el valor 1110100b en el bus, estos serian los valores exportados en los pines:

PA_10 --> 1
PB_3  --> 1
PB_5  --> 1
PB_4  --> 0
PB_10 --> 1
PA_8  --> 0
PA_9  --> 0

Para la parametrización de los diferentes valores a aplicar a los segmen

5. Montaje Protoboard

6. Plano

7. Código

Si quieren importar este ejemplo en el workspace de su ambiente Mbed, ingrese a la siguiente URL https://os.mbed.com/teams/Mbed-Colombia-Meetup/code/MBC003-BusOut/ y hagan click en el botón Import to Compiler.

/**
* MBC003 - BusOut
* This example use the BusOut function with a 7-Segment Display
* 6 Jun 2018 - Mbed Colombia - https://mbedcolombia.wordpress.com/
*
* Board: ST-Nucleo-F446RE - https://os.mbed.com/platforms/ST-Nucleo-F446RE/
*
* Copyright [2018] [Leandro Perez Guatibonza / leandropg AT gmail DOT com]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"

// Define GPIO Pins 7-Segment Display
// PA_10 --> A
// PB_3 --> B
// PB_5 --> C
// PB_4 --> D
// PB_10 --> E
// PA_8 --> F
// PA_9 --> G
BusOut display7Seg(PA_9, PA_8, PB_10, PB_4, PB_5, PB_3, PA_10);

// Define Logic Anode Comun Display
// ABCDEFG
int anodeComun[16] = { 0b0000001, // 0
0b1001111, // 1
0b0010010, // 2
0b0000110, // 3
0b1001100, // 4
0b0100100, // 5
0b0100000, // 6
0b0001111, // 7
0b0000000, // 8
0b0001100, // 9
0b0001000, // A
0b1100000, // B
0b1110010, // C
0b1000010, // D
0b0110000, // E
0b0111000 }; // F

// Main Loop runs in its own thread in the OS
int main() {

// Inifite Loop
while(1) {

// Iterate 0x0 to 0xF -->
for(int i = 0; i < 16; i++) {

// Export data to Bus
display7Seg = anodeComun[i];

// Wait 500 millisecond
wait_ms(500);
}
}
}

8. Recursos

Aquí dejamos los recursos disponibles para el taller.

Espero haya sido de utilidad este taller. Cualquier duda o inquietud pueden consultarnos a través de nuestras sociales. Nos vemos en el próximo taller.

Twitter: @leandropg

Facebook: https://www.facebook.com/mbedcolombia

Instagram: leandropg.co

Taller MBC002 – DigitalIn

Taller MBC002 – DigitalIn

1. Objetivo

Encender un led cuando el usuario presione un pulsador.


 

 

2. Materiales

  • Board Nucleo STM32F446RE
  • Cable USB Mini A
  • Protoboard
  • Cables Arduino
  • Led
  • Resistencia 220 Ω
  • Pulsador Normalmente Abierto (NA)

3. Consideraciones

Vamos a utilizar pines externos del microcontrolador para el led y leer el estado del pulsador. Usando la board STM32 Nucleo-F446RE, hemos seleccionamos el pin PC_0 (Color Azul) para el led y para el pulsador hemos elegido el pin PC_3 (Color Azul). Para simplificar los componentes del montaje, vamos a activar la resistencia de Pull-Up del pin del pulsador, de manera que vamos a detectar un cero (‘0’) cuando el usuario presione el pulsador, ya que la resistencia Pull-Up va a colocar el estado uno (‘1’) cuando no este pulsado. Ambos pines están ubicados en la parte inferior del conector CN7. En la parte superior derecha pueden encontrar el pin de tierra GND (Color Rojo).

/media/uploads/adustm/nucleo_f446re_morpho_left_2016_7_22.png

Cuando se utiliza un pin de entrada con Pull-Up interna, solo se requiere conectar un pulsador conectado a tierra. Como lo ilustra la grafica obtenida de la Wikipedia https://en.wikipedia.org/wiki/Pull-up_resistor, al usar una resistencia Pull-Up el pin de entrada siempre lee un estado lógico alto («1»), mientras no este presionado el pulsador. Cuando el usuario presiona el pulsador, el pin de entrada leerá un estado lógico bajo («0»). De esta forma podemos conocer el estado del pulsador y programar la lógica que se requiera.

Simple pullup circuit

4. Montaje Protoboard

5. Plano

6. Código

Si quieren importar este ejemplo en el workspace de su ambiente Mbed, ingrese a la siguiente URL https://os.mbed.com/teams/Mbed-Colombia-Meetup/code/MBC002-DigitalIn/ y hagan click en el botón Import to Compiler.

/**
* MBC002 - DigitalIn
* This example use the DigitalIn function
* 20 May 2018 - Mbed Colombia - https://mbedcolombia.wordpress.com/
*
* Board: ST-Nucleo-F446RE - https://os.mbed.com/platforms/ST-Nucleo-F446RE/
*
* Copyright [2018] [Leandro Perez Guatibonza / leandropg AT gmail DOT com]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"

// LED connected Pin PC_0
DigitalOut led(PC_0);

// Push-Button connected Pin PC_3
DigitalIn pushButton(PC_3);

// Main Loop runs in its own thread in the OS
int main() {

   // Active Pull-Up Resistor
   pushButton.mode(PullUp);

   // Inifite Loop
   while(1) {

      // Check Push-Button
      if(pushButton == 0) {

         // LED Turn-On
         led = 1;

      } else {

         // LED Turn-Off
         led = 0;
      }
   }
}

7. Recursos

Aquí dejamos los recursos disponibles para el taller.

Espero haya sido de utilidad este taller. Cualquier duda o inquietud pueden consultarnos a través de nuestras sociales. Nos vemos en el próximo taller.

Twitter: @leandropg

Facebook: https://www.facebook.com/mbedcolombia

Instagram: leandropg.co

Taller MBC001 – DigitalOut

Bienvenidos al primer taller de Mbed Colombia. En este primer taller les enseñaremos a controlar un led conectado a un puerto GPIO del microcontrolador.

Taller MBC001 – DigitalOut

1. Objetivo

Encender y apagar un led conectado a un puerto GPIO. El led se estará encendido y apagado por un tiempo de 200 milisegundos (0.2 segundos)


 

2. Materiales

  • Board Nucleo STM32F446RE
  • Cable USB Mini A
  • Protoboard
  • Cables Arduino
  • Led
  • Resistencia 220 Ω

3. Consideraciones

Vamos a utilizar un pin externo del microcontrolador para controlar el led. Usando la board STM32 Nucleo-F446RE, hemos seleccionamos el pin PC_0 (Color Azul) ubicado en la parte inferior derecha del conector CN7 como lo ilustra la siguiente figura. Como se puede ver este pin también esta disponible en el conector CN8. En la parte superior derecha pueden encontrar el pin de tierra GND (Color Rojo).

/media/uploads/adustm/nucleo_f446re_morpho_left_2016_7_22.png

4. Montaje Protoboard

5. Plano

6. Código

Si quieren importar este ejemplo en el workspace de su ambiente Mbed, ingrese a la siguiente URL https://os.mbed.com/teams/Mbed-Colombia-Meetup/code/MBC001-DigitalOut/ y hagan click en el botón Import to Compiler.

/**
 * MBC001 - DigitalOut
 * This example use the DigitalOut function
 * 14 May 2018 - Mbed Colombia - https://mbedcolombia.wordpress.com/
 *
 * Board: ST-Nucleo-F446RE - https://os.mbed.com/platforms/ST-Nucleo-F446RE/
 *
 * Copyright [2018] [Leandro Perez Guatibonza / leandropg AT gmail DOT com]
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "mbed.h"
 
// LED connected Pin PC_0
DigitalOut led(PC_0);
 
// Main Loop runs in its own thread in the OS
int main() {
   
    // Inifite Loop
    while(1) {
        
        // LED Turn-On
        led = 1;
        
        // Wait 200 ms
        wait(0.2);
        
        // LED Turn-Off
        led = 0;
        
        // Wait 200 ms
        wait(0.2);
    }
}

7. Recursos

Aquí dejamos los recursos disponibles para el taller.

Espero haya sido de utilidad este taller. Cualquier duda o inquietud pueden consultarnos a través de nuestras sociales. Nos vemos en el próximo taller.

Twitter: @leandropg

Facebook: https://www.facebook.com/mbedcolombia

Instagram: leandropg.co

Meetup 18.1 – FLISoL Bogota 2018

Muchas gracias a todos los participantes del primer Meetup de Mbed Colombia en el marco del FLISoL Bogotá 2018… Fue un espacio muy agradable para poder compartir este espacio de aprendizaje y dar los tips necesarios para poder iniciar con Mbed…

Les quiero compartir las fotos de la conferencia, la presentación en formato PDF y en el vídeo de Youtube por si no pudieron ver el streaming… Muchas gracias a todos los que nos acompañaron…

Presentación PDF

Meetup 18.1 – Crea tus prototipos electrónicos con ARM mbed

Video Conferencia

Fotografias

Meetup 18.1 – Crea tus propios prototipos electrónicos con ARM mbed

Este post es para invitarlos a nuestro primer Meetup en el marco del 14° Festival Latinoamericano de Instalación de Software Libre (FLISoL Bogotá 2018) el próximo 28 de Abril de 2018 a las 2:20 pm. Más información aquí.

Daremos una charla sobre cómo aprovechar el ecosistema ARM mbed para realizar prototipado electrónico de una forma fácil y rápida.

Igualmente están todos invitados ese día a todas las actividades que el FLISOL Bogotá 2018 tiene organizado para ese día. Más información aquí.

Será nuestra primera reunión donde nos conoceremos y podremos conocer los planes a futuro que tenemos para que la comunidad mbed Colombia… Los esperamos…

Hola Mundo mbed

Una vez elegida tu board mbed estas list@ para iniciar la programación con mbed OS… En este post te explicaremos como usar el compilador el linea, como crear tu primer programa, como compilarlo y como programarlo en el microcontrolador.

Una de las grandes ventajas de mbed, es su curiosa característica de utilizar un compilador en línea, los que nos permite tener todo el entorno de desarrollo de mbed en nuestro navegador web, en lugar de tener que instalar algún tipo de IDE (Integrated Development Environment) en nuestros computadores… y aunque existe la forma de utilizar algunos de los IDE mas relevantes del mercado… empezaremos usando el compilador en línea que a mi modo de ver tiene las siguientes ventajas:

  • Funciona en cualquier navegador WEB
  • No requiere ningún tipo de instalación
  • No se requiere guardar ningún cambio local ya que el código esta en la nube
  • Permite administrar proyectos para una o diferentes tipos de boards (Platforms)

Como ustedes ya lo saben, para toda esta aventura elegí la board mbed STM32 Nucleo-F446RE. Algunos me han preguntando que donde la he conseguido, por lo que les quiero referenciar que la consegui aqui en Bogotá en la tienda Electrónica Plug and Play. Haz click aquí por si estan interesados en conocer mas detallades de la board.

Bien… y llego la hora de la acción… Es hora de crear nuestro primer proyecto… y veran que es tan simple programar sistemas embebidos con mbed que quedaran atrapados… A continuación, resumo los pasos para crear un proyecto desde cero…

Pasos Crear Proyecto mbed

  1. Ingresa a la pagina de mbed OS https://os.mbed.com/
  2. Ingresa a tu workspace haciendo click en el boton Log in
  3. Ingresa tu usuario y contraseña
  4. Haz click en el boton Compiler para abrir el compilador en linea. Una vez abierto, podras ver a mano izquierda el Program Workspace que sera tu area de trabajo para tus proyectos
  5. Ahora haz click en el opción New y selecciona las siguientes opciones:
    • Platform: Selecciona tu board mbed, en mi caso la F446RE que ya habia adicionado al compilador. Si tienes dudas de como adicionar tu board mbed haz click aquí para recordar como hacerlo
    • Template: Selecciona la plantilla Blinky example for mbed OS 5.0. Esto creará un proyecto usando mbed OS Versión 5.0. De aquí en adelante siempre seleccionaremos esta opción para usar todas las capacidades del sistema operativo y no solo las librerias mbed que es la Versión 2.0
    • Program Name: Ingresa el nombre de tu proyecto sin espacios o usando _ en lugar de los espacios, por ejemplo HolaMundo u Hola_Mundo

Esto creara el nuevo proyecto en tu Program Workspace con el nombre que has indicado. Una vez se ha creado el proyecto, podemos ver el código fuente asociado al mismo haciendo click sobre el archivo main.cpp que incluye el siguiente código:

#include "mbed.h"

DigitalOut led1(LED1);

// main() runs in its own thread in the OS
int main() {
   while (true) {
      led1 = !led1;
      wait(0.2);
   }
}

El lenguaje preferido para la programación de los sistemas embebidos es el C ó C++, por lo que mbed no seria la execpcion. Vamos a revisar este programa demo en detalle:

  • Línea 1: La palabra include le indica al programa que se debe incluir la libreria mbed.h lo que implica que vamos poder utilizar todas las funcionalidades que el sistema operativo mbed OS 5.0 nos ofrece
  • Línea 3: Define un pin de salida llamado LED1 precisamente donde esta conectado un led en nuestra board mbed. Todas las board definen las constantes LEDx para denominar los led conectados en nuestra board. La board F446RE unicamente viene con LED1 mientras que la board LPC1768 viene con 4 leds denominados desde LED1 a LED4
  • Línea 6: Define la función int main() que es el punto de inicio del programa y es lo que se ejecuta luego de que el sistema operativo inicia
  • Línea 7: while(true) define un ciclo infinito que evita que el microcontrolador se salga de la función main(), es decir el programa se va a ejecutar para siempre. Mas adelante veremos formas mas eficientes de crear tareas
  • Línea 8: Le indica al programa que el valor que tenga el led debe ser invertido… en pocas palabras si el led esta encendido lo apaga y si esta apagado lo enciende
  • Línea 9: Genera un retardo de tiempo de 0,2 segundos ó 200 ms.

En resumidas cuentas… este programa va hacer parpadear el led cada 200 milisegundos… el muy famoso Hola Mundo para los sistemas embebidos… solo nos queda un paso… y es programar el microcontrolador… A continuación, resumo los pasos…

Pasos Programación Microcontrolador

  1. Conecta tu board mbed al puerto USB de tu computador. Tu board aparecerá conectada a tu computador como si fuera una memoria USB extraible llamada MBED
  2. Haz click en el boton Compile para compilar y generar un ejecutable de tu proyecto. Al finalizar el proceso de compilación el navegador solicitara descargar un archivo .bin. Fijate muy bien en la ruta donde queda descargado dicho archivo
  3. Copia el archivo .bin descargado a la unidad MBED… en este justo instante algun led de tu board deberia parpadear indicando que el microcontrolador esta siendo programado… esto pasa en solo unos segundos
  4. El programa debe iniciar automáticamente cuando finaliza la programación… presionar el botón de Reset de tu board en caso de que esto no suceda… En este instante el led deberá iniciar a parpadear…

Listo… y eso es todo… hemos visto como crear un proyecto, como funciona un programa básico, como compilar y generar su ejecutable y como programarlo en el microcontrolador… A continuación les dejo un video donde esta resumido el paso a paso de lo visto en este post… espero se diviertan con su primer programa…

Creación cuenta mbed

Para acceder a todo el universo ARM mbed es necesario tener una cuenta en el portal de mbed para desarrolladores. Aquí te enseñamos cómo crear tu cuenta, para acceder a todos los beneficios de la plataforma y como se deben añadir las boards al entorno de desarrollo.

El proceso para crear tu cuenta en mbed se resume en los siguientes pasos:

  1. Ingresa a la pagina www.mbed.com
  2. Ingresa al link OS Home
  3. Haz click en el link Log in / Sign up ubicado en la parte superior derecha
  4. Haz click en el botón Sign up
  5. Diligencia los datos del formulario, selecciona un usuario y password, acepte los términos y condiciones y haz click de nuevo en el botón Sign up
  6. A tu correo electrónico llegará un correo de mbed para la activación de la cuenta. Ve a tu correo electrónico, busca el correo de mbed y haz click en el link del mensaje para la activación de la cuenta
  7. Ahora debe aparecer logueado con tu usuario y password. Verifícalo en la parte superior derecha

El siguiente video ilustra los pasos descritos anteriormente para la creación de tu cuenta.

Una vez haz creado tu cuenta, es necesario asociar nuestra board mbed al entorno de desarrollo. Recordemos que yo voy a utilizar la board Nucleo F446RE, por lo que estos son los pasos para asociar las board mbed:

  1. Buscar la referencia de su board usando el campo buscar ubicado en la parte superior derecha. En mi caso ingrese la palabra Nucleo F446RE
  2. La referencia de la board debe aparecer en los primeros resultados de la busqueda. Haga click en el link de su board específica. Este es el link de mi board
  3. En la parte derecha, encontraran el botón Add to your Mbed Compiler que añade la board a su entorno de desarrollo. Haga click en ese botón.
  4. Un mensaje en color verde en la parte superior confirmara que la board fue añadida.

El siguiente video ilustra los pasos descritos anteriormente para la asociacion de tu board mbed.

En este post aprendimos a crear tu cuenta en mbed y como añadir una board al entorno de desarrollo… por lo que estamos listos para empezar a desarrollar código… Espero que para este momento tengan sus board mbed para iniciar su aprendizaje… En el siguiente post veremos nuestro primer programa y la forma como vamos a programar el microcontrolador…

Pines I/O Board mbed Nucleo-F446RE

Reconocer las capacidades de una board mbed permite conocer las alternativas que tienes para desarrollar tus proyectos… En este post revisaremos las capacidades de la board F446RE desde el punto de vista de mbed

Cada microcontrolador tiene un número determinado de pines I/O (Input/Output) que permiten controlar entradas y salidas digitales externas al sistema, lo que permite obtener información del mundo exterior a través de sensores, así como controlar actuadores para controlar el mundo exterior.

Sin embargo, el mundo exterior es netamente continuo, y señales como temperatura, humedad no pueden ser definidas discretamente en un solo valor binario 0 ó 1. Es por eso que existe una amplia gama de periféricos que permiten conectar sensores análogos como lo es por ejemplo un ADC (Analog Digital Converter) ó periféricos que permiten conectarse con sensores con interfaz digital como lo puede ser uno con interfaz SPI (Serial Port Interface) ó tal vez I2C (Inter-Integrated Circuit).

Existen muchas alternativas para los sensores… Si por ejemplo necesitamos medir temperatura podemos usar un LM35 y conectarlo a un ADC para convertir su valor análogo a digital ó también podemos usar un LM75 y conectarlo a un módulo I2C para obtener la temperatura usando un protocolo de comunicación serial.

Las posibilidades de interconexión con el mundo exterior las proporciona el microcontrolador a través de sus pines I/O… y todas las boards de desarrollo facilitan el acceso a dichos pines por medio de conectores… por ejemplo esta es la imagen de una board Kinetis KL25Z de NXP:
/media/uploads/GregC/frdm-kl25z_headers2.png

De la misma manera, la board F446RE perteneciente a la familia Nucleo-64 de ST Microelectronics tiene dos conectores tipo Arduino hacia el centro de la board para dar compatibilidad con shields Arduno disponibles  y otros dos conectores llamados Morpho Extension hacia los extremos de la board que permiten acceder a todos los pines del microcontrolador. Las siguientes cuatro (4) figuras ilustran el detalle de cada uno de los conectores:

/media/uploads/adustm/nucleo_f446re_arduino_left_2016_7_22.png
/media/uploads/adustm/nucleo_f446re_arduino_right_2016_7_22.png
/media/uploads/adustm/nucleo_f446re_morpho_left_2016_7_22.png
/media/uploads/adustm/nucleo_f446re_morpho_right_2016_7_22.png

En algunos casos es posible que un pin I/O pueda compartir más de un función con uno o más periferico… pero solamente una sola función puede ser seleccionada para el pin… por eso es bueno reconocer todas las posibilidades que los pines nos ofrecen… A medida que avancemos vamos a reconocer los pines digitales I/O, los pines analogos, los pines de PWM, de comunicaciones seriales, etc…

Los invito a que en la pagina de plataformas mbed, busquen la referencia de su board y al seleccionarla podrán ver el diagrama detallado de sus conexiones de la misma forma como se los ilustre en este post…

En el próximo post iniciaremos nuestro primer contacto con mbed… Debemos sacar una cuenta en mbed y seleccionar nuestra board para hacer nuestro primer proyecto… Nos vemos pronto…

Board mbed NUCLEO-F446RE

Seleccionar una board para nuestros proyectos a veces tiene sus retos… Hoy les voy enseñar una de las boards disponibles en el mercado del fabricante ST Microelectronics para sus microcontroladores STM32… que en mi concepto esta muy completa y reune unas buenas características para todo este rA continuación eto de aprender mbed

La board que yo seleccione es la Nucleo F446RE. Es una board de la familia Nucleo STM32 de ST Microelectronics, cuya principal fortaleza en mi concepto es la estandarización. Como pueden ver en la siguiente figura en el eje X, ST Microelectronics ofrece boards en tres versiones: Nucleo-32, Nucleo-64 y Nucleo-144.

Cada una de estas board ofrece diferentes tipos de microcontroladores (los colores relacionan su capacidad de procesamiento) y tamaños de memoria FLASH… pero lo mas importante es que todas las boards de una misma familia tiene el mismo diseño de pines… lo que permite iniciar el diseño de un proyecto con una tarjeta basica y luego migrar a una mas poderosa si llegase a requerirse… A continuacion les ilustro el diseño de cada una de las familias:

Familia Nucleo-32

Familia Nucleo-64

 Familia Nucleo-144

Ahora, voy a describir las principales características de la board Nucleo F446RE:

  • Microcontrolador STM32F446RET6 ARM®32-bit Cortex®-M4 en un empaque LQFP64
  • Maxima Frecuencia Operación: 180 MHz
  • Fuente de Alimentación: 1.7 V to 3.6 V
  • 512 KB Flash
  • 128 KB SRAM
  • 50 Pines GPIO con capacidad de interrupción externa
  • Perifericos: Timers / SPI / I2S / USART / UART / CAN / USB OTG
  • ADC de 12-bit con 16 canales
  • DAC de 12-bit con 2 canales

El único punto desfavorable de la board a mi concepto, es que no viene con un cable USB incluido, por lo que deben adquirirlo aparte… Una cosa a tener en cuenta es que es cable es del tipo mini USB no micro USB… Es decir que con el que cargan su actual smartphone no sirve… La siguiente foto ilustra el cable mini USB para que no queden dudas…

Mini usb AB.jpg

Bien… Y creo que ya estamos listos para iniciar la travesía… Ya aprendieron mucho acerca de las boards compatibles con mbed… y espero que con todos los tips que han visto hasta el momento les permitan elegir la suya… Es importante que adquieran alguna de las boards mbed cuanto antes para iniciar las prácticas… Si necesitan ayuda no duden en levantar la mano… Pueden utilizar cualquiera de las redes sociales para contactarme… Quedo atento a sus mensajes…