Archivo por años: 2015

Práctica: Uso de Memoria en Arduino.

Práctica: Calcula memoria RAM de tu Arduino UNO sin ejecutar ningún programa con la función free() y comparalo con el dato que da al compilar, también averigua cuánto ocupa la memoria Flash. Luego calcula la memoria RAM y la Flash utilizada con un programa que cada loop saque por puerto serie cada 5 segundos el siguiente texto:

Desde octubre de 2012, Arduino se usa también con microcontroladoras CortexM3 de ARM de 32 bits,5 que coexistirán con las más limitadas, pero también económicas AVR de 8 bits. ARM y AVR no son plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino y hacerse programas que compilen sin cambios en las dos plataformas. Eso sí, las microcontroladoras CortexM3 usan 3,3V, a diferencia de la mayoría de las placas con AVR que generalmente usan 5V. Sin embargo ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino Fio y existen compatibles de Arduino Nano y Pro como Meduino en que se puede conmutar el voltaje.

Luego haz que aumente la RAM con el modificador F y compruebalo.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/blob/master/Ejercicio05-Memoria/Ejercicio05-Memoria.ino

Memoria Flash, SRAM y EEPROM

Tipos de memorias en Arduino:

  • SRAM: Variables locales, datos parciales. Usualmente se trata como banco de registros (PIC), Memoria volátil. Donde el sketch crea y manipula las variables cuando se ejecuta. Es un recurso limitado y debemos supervisar su uso para evitar agotarlo.
  • EEPROM:  Se puede grabar desde el programa del microcontrolador. Usualmente, constantes de programa. Memoria no volátil para mantener datos después de un reset. Las EEPROMs tienen un número limitado de lecturas/escrituras, tener en cuenta a la hora de usarla.
  • Flash: Memoria de programa. Usualmente desde 1 Kb a 4 Mb (controladores de familias grandes). Donde se guarda el sketch.

Memoria en Arduino: http://arduino.cc/en/Tutorial/Memory

Un buen tutorial para aprender como funcionan las memorias de tu Arduino: https://learn.adafruit.com/memories-of-an-arduino/you-know-you-have-a-memory-problem-when-dot-dot-dot

MCU vs CPU en funcion de la arquitectura de la memoria: https://learn.adafruit.com/memories-of-an-arduino/arduino-memory-architecture

Como medir la memoria libre que tenemos en Arduino: https://learn.adafruit.com/memories-of-an-arduino/measuring-free-memory

Como saber cuando me he quedado sin memoria: https://learn.adafruit.com/memories-of-an-arduino

Como guardar variables en la memoria flash en lugar de en la SRAM, le decimos al compilador que ponga esta información en la memoria flash: http://playground.arduino.cc/Learning/Memory

Como optimizar la memoria: https://learn.adafruit.com/memories-of-an-arduino/optimizing-program-memory

A partir de la versión 1.6 del IDE al compilar un sketch nos da el tamaño que va a ocupar en la flash el proyecto y el espacio que va a ocupar en la SRAM las variables globales, es decir, la zona de static data.

Más información sobre el uso de memoria en lso microcontroladores AVR de Atmel, visitar lso siguientes enlaces: http://www.nongnu.org/avr-libc/user-manual/malloc.html y http://www.atmel.com/webdoc/AVRLibcReferenceManual/malloc.html

Microcontrolador vs Microprocesador

Diferencia principal entre un ordenador y un Arduino: las entradas y salidas que conectamos.

Analogía: Arduino es un Autómata programable, Raspberry Pi es un Ordenador, así que a la hora de decidirse que utilizar para un proyecto pensar que usaríamos un autómata o un Ordenador.

Para programación en tiempo real el HW a utilizar es el Arduino, para programación intensiva con gran cantidad de datos usaríamos una Raspberry Pi o un PC.

En un proyecto grande la elección es usar ambos, cada uno en la tarea que mejor hace. Por ejemplo, la recolección de datos, supervisión del entorno, envío de alarmas, accionar motores, etc.. lo dejaremos para el arduino, el tratamiento de los datos recogidos, el interfaz gráfico de usuario, envío de correos, etc… lo dejaremos para un ordenador o una raspberry pi o similar.

Diferencias entre el microprocesador y el microcontrolador, características al usarlos en la implementación de sistemas digitales programables:

  • CPU
  • Memorias RAM y ROM
  • Velocidad de Operación
  • Tamaño
  • Costes
  • Interferencias (ruido)
  • Tiempo de desarrollo

El uso de una u otra tecnología depende del fin que se espera, pues debido a sus características propias, los microcontroladores y los microprocesadores pueden adquirir variados y diferentes espacios de implementación, por ejemplo, los microprocesadores se han desarrollado fundamentalmente orientados al mercado de los ordenadores personales y las estaciones de trabajo, pues allí se requiere una elevada potencia de cálculo, el manejo de gran cantidad de memoria y una gran velocidad de procesamiento. Mientras que los microcontroladores están concebidos fundamentalmente para ser utilizados en aplicaciones puntuales, es decir, aplicaciones donde el microcontrolador debe realizar un pequeño número de tareas, al menor costo posible. En estas aplicaciones el microcontrolador ejecuta un programa almacenado permanentemente en su memoria, el cual trabaja con algunos datos almacenados temporalmente e interactúa con el exterior a través de las líneas de entrada y salida de que dispone.

Microprocesadores Microcontroladores
CPU El microprocesador tiene mucha más potencia de cálculo, por lo cual solamente realiza sus funciones con lo que tiene (datos) y su algoritmo o programa establecida. Es una de sus partes principales, la cual se encarga de dirigir sus operaciones.
Memorias RAM y ROM Son dispositivos externos que lo complementan para su óptimo funcionamiento. Las incluye en un solo circuito integrado.
Velocidad de Operación Rápida Lenta en comparación con la de un microprocesador
Tamaño La configuración mínima básica de un Microprocesador está constituida por un Microprocesador, una memoria RAM, una memoria ROM, un decodificador de direcciones, lo cual lo convierte en un circuito bastante engorroso. El Microcontrolador incluye todo estos elementos en un solo Circuito Integrado por lo que implica una gran ventaja en varios factores,  como por ejemplo, la disminución en el tamaño del circuito impreso por la reducción de los circuitos externos.
Costos Para el Microprocesador, el costo es muy alto en la actualidad. El costo para un sistema basado en Microcontrolador es mucho menor.
Interferencias Son más susceptibles a la interferencia electromagnética debido a su tamaño y a su cableado externo que lo hace más propenso al ruido. El alto nivel de integración reduce los niveles de interferencia electromagnética
Tiempo de desarrollo El tiempo de desarrollo de un microprocesador es lento. Por el contrario, el de un microcontrolador es rápido.

Raspberry Pi es un ordenador de placa reducida o (placa única) (SBC) de bajo coste, desarrollado en Reino Unido por la Fundación Raspberry Pi. El diseño incluye un System-on-a-chip Broadcom BCM2835, que contiene un procesador central (CPU) ARM1176JZF-S a 700 MHz, un procesador gráfico (GPU) VideoCore IV, y 512 MiB de memoria RAM.

Los sistemas operativos soportados son distribuciones Linux para arquitectura ARM, Raspbian (derivada de Debian), RISC OS 5, Arch Linux ARM (derivado de Arch Linux) y Pidora (derivado de Fedora)

Web principal: http://www.raspberrypi.org/

Especificaciones técnicas: http://es.wikipedia.org/wiki/Raspberry_Pi#Especificaciones_t.C3.A9cnicas

El System-on-a-chip Broadcom BCM2835: http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

GPIO:

También intel saca su alternativa a raspberry: http://www.intel.es/content/www/es/es/do-it-yourself/edison.html

Vídeo que lo explica todo esto de una forma muy clara: https://www.youtube.com/watch?v=7vhvnaWUZjE&feature=youtu.be

Ejercicio: ¿Puedo convertir un arduino en un ordenador? ¿Cómo? ¿Es práctico?

Arduino como un ordenador:

Microcontroladores 8 bits, 16 bits, 32 bits

El tamaño de la palabra es un aspecto importante en la arquitectura de procesadores.

La mayoría de los registros de un Microprocesador/Microcontrolador tienen el tamaño de la palabra y las operaciones que hace la ALU es manejando operandos cuyo tamaño es el tamaño de la palabra, así como la cantidad de datos transferidos a memoria y dirección utilizada para designar una localización de memoria a menudo ocupa una palabra.

También los valores que pueden tomar las variables dependen del tamaño de la palabra.

http://es.wikipedia.org/wiki/Palabra_%28inform%C3%A1tica%29

Práctica: Blink sin delay

Ejercicio: Ejercicio19-BlinkSinDelay.

Hacer el ejercicio de blink pero sin usar la función delay(). Para ello se puede usar las funciones millis() o micros(). Ejemplo de ejercicio: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Después de entender el ejercicio, añadir un botón y a la vez que el LED parpadea, contar cuantas veces se pulsa el botón y mostrarlo por el puerto serie cada vez que se pulse aumentando el contador de pulsos. Comprobar la multitarea.

Hacer el mismo ejercicio con las librerías mstimer2 y la librería Timer, de forma con una de ellas programo cada 5 segundos el parpadeo del LED y con la otra  muestro cada 3 segundos el número de pulsaciones contadas.

Librerías:

¿Y si queremos hacerlo con dos leds?

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio19-BlinkSinDelay

EXTRA:

Muchos más ejemplos y prácticas para hacer: http://arduino.cc/en/Tutorial/HomePage

Una buena chuleta para tener a mano cuando programemos, Cheat Sheet: https://dlnmh9ip6v2uc.cloudfront.net/learn/materials/8/Arduino_Cheat_Sheet.pdf

Más código:

Ver este ejemplo de programa y fijarse en la estructura: https://github.com/jecrespo/Home_Power_Meter/blob/master/Home_Power_Meter.ino

Librerías

Como se ha visto anteriormente, las librerías son trozos de código hechas por terceros que usamos en nuestro sketch. Esto nos facilita mucho la programación y hace que nuestro programa sea más sencillo de hacer y luego de entender. En el curso avanzado veremos como hacer una librería.

Este tutorial explica como crear una librería: http://arduino.cc/en/Hacking/LibraryTutorial

Guia de estilo para escribir librerías: http://arduino.cc/en/Reference/APIStyleGuide

Listado de librerías: http://playground.arduino.cc/Main/LibraryList

Otras funciones