Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como post

Cómo leer el sensor de temperatura de la Raspberry Pi Pico

Leyendo las especificaciones de la Raspberry Pi Pico me llamó la atención que venía equipada con un sensor de temperatura en el propio chip, así que me puse a buscar información. En este artículo os quiero mostrar cómo acceder a él y de camino cómo utilizar el conversor analógico/digital (ADC). El siguiente esquema muestra cómo está conectado el ADC a los GPIO y al sensor de temperatura interno. Es decir, tenemos un multiplexor de cuatro entradas que permite seleccionar la señal de entrada para el ADC. En nuestro caso, la que nos interesa es la 4, que es la fuente de tensión proveniente del sensor. Para seleccionar la entrada en el multiplexor usamos la siguiente función. adc_select_input(4); Para hacernos una idea, en la página 574 del datasheet del RP4020 nos dice que esta tensión es de 0.706V a 27 grados centígrados. La fórmula para aproximar la temperatura con respecto a esta tensión es T = 27 - (ADC_voltage - 0.706)/0.001721 También hay que poner a 1 el registro...

Primeros pasos con Raspberry Pi Pico

Hace pocos días la fundación Raspberry Pi sacaba al mercado una curiosa plaquita llamada Raspberry Pi Pico. Curiosa porque se separa de lo que venían haciendo. Es decir, nos encontramos ante una placa al estilo del Arduino nano, pero comandada por el microcontrolador RP4020, basado en el ARM Cortex M0+ de doble núcleo, que ha sido también diseñado por ellos. En la placa de desarrollo nos ofrecen 26 GPIOs con soporte para SPI, I2C, ADC, UART y PWM. Acompañado de una completísima documentación y un entorno de desarrollo basado en Visual Studio Code. Y lo que es mejor, sólo por 4 dólares. La instalación del entorno de desarrollo oficial es muy sencilla y viene bien explicada en la documentación. Aunque si, como yo, prefieres la línea de comando, en este artículo os explicaré como poner en marcha un proyecto para este microcontrolador y programarlo con vuestro editor favorito. En este caso, para equipos con Debian y derivados. Antes de nada necesitaremos instalar el toolchain para...

Display de 7 segmentos con 74LS247

Ya hemos hablado del control de un display de siete segmentos en un artículo anterior (implementando la lógica de control con una FPGA). Las bases son las mismas, y si buscas, encontraras por la red miles de tutoriales sobre como gestionar estos display con Arduino. La verdad es que no es difícil, pero le veo un par de inconvenientes. Por un lado, si te fijas en la figura de arriba, para gestionar un display son necesarias ocho conexiones digitales entre el Arduino y el display . Y eso sólo para un display, si necesitas más es probable que no tengamos suficientes pines para gestionarlos. Otra pega es que tendremos que programar la lógica del display en el propio Arduino. Es decir, que si queremos mostrar un número, el programa tendrá que evaluar qué LEDs han de encenderse y cuales han de apagarse, lo que requiere tiempo de proceso y un consumo de energía relativamente alto para ser una gestión secundaria (querremos que el microcontrolador se ocupe de tareas menos mundan...

Juegos con Arduino y LCD 5110

¿Recuerdas el mítico Nokia 5110? El teléfono, obviamente, ya no se vende, pero su pantalla sigue siendo muy valorada por los makers y aficionados a la electrónica. La razón es que, gracias a su interfaz SPI es muy sencilla de manejar desde un microcontrolador. Como hace tiempo que tengo uno dando vueltas por mis cajones me he animado a probarlo, así que os traigo un pequeño montaje realizado con un Arduino Nano, un potenciómetro y, por supuesto, un LCD 5110. Y que mejor que un juego para probar este pequeño LCD. Las siguientes imágenes muestran la pantalla LCD por delante y también por la parte trasera donde se pueden ver las patillas de conexión. Hay que tener cuidado, ya que he encontrado este mismo LCD con diferente patillaje. El que yo he usado es como éste . La pantalla es monocroma con una resolución de 84x48 píxeles. Utiliza el controlador PCD8544 y dispone de LEDs para iluminar la pantalla. Se alimenta con una tensión de 3.3V, y sus los pines digitales también fun...

Gestión de interrupciones con Arduino

Cuando se diseña un programa, lo habitual es pensarlo como un flujo de instrucciones que se ejecutan una detrás de otra siguiendo una ejecución secuencial. En el contexto de los microprocesadores y los microcontroladores, si estuviéramos limitados sólo a este modelo secuencial, el desarrollo de aplicaciones sería más complicado. Os pongo un ejemplo muy simplificado: si el sistema que estamos diseñando tiene que atender una serie de actuadores (por ejemplo un botón), tendremos que andar sondeándolos periódicamente para ver si se pulsó el botón. ¿Pero qué ocurre si se pulsa un botón mientras el programa anda ocupado en otra tarea y justo en ese momento no se está sondeando la entrada del actuador? En este caso el sistema no será capaz de detectar la pulsación. La solución en este caso es el uso de interrupciones. Cuándo se dispara una interrupción, el procesador detiene la ejecución del programa que está corriendo, almacena el estado de los registros (incluido el contador de programa)...

Semáforos y más semáforos

Que levante la mano quién no haya hecho el típico circuito de semáforo para probar una plataforma o un microcontrolador nuevo. El semáforo se podría considerar como el HolaMundo de la electrónica. Cualquier alumno de tecnología o de ingeniería podrá corroborar lo que digo. Sobre este particular, José Antonio Vacas dio una interesante charla en Malakabot 2017 que os dejo aquí debajo. Está claro que como ejemplo inicial, el semáforo puede ser un diseño útil, pero después hay que ir más allá. Si andáis faltos de imaginación, José Antonio os deja en su GitHub algunas ideas que os pueden servir de inspiración Pero si pensabais que tras todo este movimiento se habían acabado los semáforos, estáis muy equivocados. Tras esto de los semáforos se encuentra un interesante reto propuesto por Cesar García del podcast La Hora Maker y David Cuartielles . Se trata de un proyecto colectivo para realizar semáforos en la mayor cantidad de modos posible. Dejo que ellos mismos os presente...

Juegos con matrices de LEDs y Arduino

En una entrada anterior ya utilizamos una matriz de LEDs junto con el integrado max7219. Una de las virtudes de este integrado es que facilita la conexión de varias matrices usando un bus serie SPI , así como otros tipos de displays, como los de siete segmentos. En este artículo vamos a utilizar dos matrices para construir un pequeño juego tipo Pong, Arkanoid o, en fin, ya sabes a lo que me refiero, una raqueta que controla el jugador y una pelotita que hay que evitar que se salga por la parte inferior. He montado el circuito sobre una protoboard usando un Arduino Nano, dos matrices de LEDs y un potenciómetro conectado a una entrada analógica del Arduino para controlar la raqueta. El esquema del circuito es el siguiente. Como ves, el circuito no tiene nada de particular. Los pines D8, D9 y D10 de Arduino se conectan a los pines CS, CLK y DIN del bus SPI de la matriz de LEDs. Además, obviamente, de conectar VCC y GND. El integrado max7219 nos provee, en la parte superior de la...

Máquinas de estado finito en VHDL

Las máquinas de estado finito, más conocidas por su acrónimo en inglés FSM (Finite State Machine), se utilizan ampliamente en el diseño de circuitos digitales (además de en otros ámbitos de la ingeniería, como la programación), para describir el comportamiento de un sistema según el valor de sus entradas y de cómo van cambiando en el tiempo. Ésta es una definición parcial pero que nos permite hacernos una primera idea intuitiva. Desde el punto de vista de las FSM, un sistema está compuesto de estados por los que va pasando el sistema, de señales de entrada que modifican esos estados y de señales de salida que pueden utilizarse para conocer el estado del sistema y actuar en consecuencia. Un ejemplo muy visual podría ser un semáforo, el cuál dispone de tres estados diferentes, uno para cada color. Las entradas del sistema las podría generar un temporizador que activa una señal cada cierto tiempo, indicando que hay que pasar al siguiente estado. Por último, las salidas del sist...

Relojes MMCM en FPGAs

Cuando se diseñan sistemas digitales síncronos, una de las reglas de oro es usar un sólo dominio de reloj para todo el circuito. Esto quiere decir que sólo usaremos una única señal de reloj conectada a todos los elementos síncronos del circuito. Por lo tanto debemos evitar una práctica bastante habitual que es usar la salida de un elemento del sistema, como por ejemplo un contador, para obtener la señal de reloj de otro elemento cualquiera. De hecho, aquí lo hicimos (mal) cuando diseñamos nuestro reloj digital (y usamos la salida del contador de 1Hz como señal de reloj para el contador de segundos). Aunque siempre en aras de la simplicidad y la pedagogía :-) Así que si queremos que nuestro diseño no tenga problemas de sincronización, el mismo reloj debe ser usado por todos y cada uno de los elementos síncronos. Sin embargo, si nuestro circuito es complejo y sobre todo, si ocupa una gran superficie de la FPGA, la señal de reloj puede sufrir pequeños retardos al distribuirse en...