Controlador motores DC con python

Vamos a esperimentar con tu Rasberry PI y para eso, empezaremos montando un controlador para motores DC con programación python.

 

¿Que te parece?

Esto le permitirá a tu Raspberry Pi interactuar con el mundo real, haciendo posible la construcción de un robot, el encendido de un ventilador un día caluroso, o incluso expender una golosina para tu perro o gato mientras tú no estás en casa.

controlador motores DC con python
Rasberry PI controlandos motores DC

Introducción al controlador motores DC con python

Nuestro plan es conectar de manera segura uno o dos motores al Raspberry Pi, con la menor cantidad de componentes posible. Una vez que los componentes electrónicos estén colocados correctamente en la placa de pruebas, te mostraré cómo controlarlos fácilmente usando Python, primero haremos que el motor gire, y luego agregar controles para cambiar la dirección del motor, para que pueda ir hacia atrás.

Esta guía requiere un ojo cauteloso para distinguir errores, y un poco de coraje, especialmente si eres nuevo en el mundo de los conectores GPIO.

Me gustaría destacar que no me hago responsable de ningún daño causado a tu Raspberry Pi y/o componentes.

 

IMPORTANTE: No conectar ningún motor, no importa cuán pequeño sea, directamente al Raspberry Pi, ya que dañará tu Raspberry Pi.

 

El procesador principal sólo puede proveer potencia suficiente para encender un LED, aproximadamente 20mA. Un motor necesita al menos 400mA de corriente para empezar a funcionar.

Requisitos

Para hacer funcionar este proyecto necesitarás:

 

  • Un Raspberry Pi con una tarjeta SD preinstalada con Raspbian
  • Una placa de pruebas para conectar todo sobre ella
  • Un chip controlador de motor L293 ó SN755410 (en este tutorial me referiré a ambos como L293)
  • Cables de puente para conectar todo (macho a macho y hembra a macho)
  • Uno o dos motores DC de 6v
  • 4 Baterías AA y portapilas

Pins GPIO

Si no has visto de cerca tu Raspberry Pi antes, ahora es el mejor momento para echarle un buen vistazo.

Hay 26 pins agrupados en dos filas de 13, y estos en su conjunto son llamados la cabecera de Entrada/Salida de Propósito General o GPIO. Son una mezcla de cuatro pins de alimentación, cinco pins de tierra, y 17 pins de datos.

controlador motores DC con python
Identificación de los pines del GPIO

Algunos de estos pins de datos tienen funciones extra, como un bus i2c, bus SPI, y conectores serie UART, los cuales pueden conectarse a otro hardware para permitirle al Raspberry Pi comunicarse con ítems como un Arduino, un Conversor Analógico/Digital (ADC) o placas adicionales como PiGlow o PiFace.

 

Atención: Al trabajar con los pins GPIO, hazlo siempre mientras el Pi esté desconectado, ya que cualquier accidente por conectar (o poner en cortocircuito) dos pins puede causar daño al Raspberry Pi.

Ensamblando el Circuito

a) Agregando alimentación y tomas a tierra

Es importante que hagas esto mientras que la alimentación al Raspberry Pi esté apagada o desconectada, ya que queremos evitar poner conectores en cortocircuito por error.

 

Lo primero que necesitas hacer es conectar los cables de alimentación y toma a tierra. Como con la mayor parte de los proyectos electrónicos, todo lo que se conecta junto requerirá una toma a tierra común. Esto se indica con los cables negros.

controlador motores DC con python
Conexión de los cables de alimentación a la controladora

La toma a tierra en el Raspberry Pi es el pin físico 6. Refiriéndonos a la Figura 1, este se identifica comenzando por el pin superior izquierdo, 3V3, contando de izquierda a derecha, por lo cual 5V es el pin 2, GPIO 2 (etiquetado 2) es el pin 3, y así sucesivamente.

La lectura de los números de pin en un Circuito Integrado (IC) se realiza fácilmente posicionando la muesca o punto hacia la izquierda, luego, al comenzar a contar desde la parte inferior izquierda, obtenemos el pin 1.

Identificación de los pines del driver L293D
Identificación de los pines del driver L293D

b) Agregando los cables de datos

Ahora, vamos a conectar los tres cables  de datos que van desde los pins del GPIO al L293D.

Conectaremos el primer cable que va desde el pin 22 (GPIO 25) al pin 1 del L293D, el segundo cable lo vamos a conertar desde el pin 18 (GPIO 24) al pin 2 del L293D y por ultimo el tercer cable se conectara desde el pin 16 (GPIO 23) al pin 7 del L293D.

controlador motores DC con python
Conexión de los cables de datos a la controladora

c) Conectar el motor

Seguidamente vamos a conectar los cables del motor.

Conectaremos el cable 1 del motor(1) al pin 3 del L293D y seguidamente conectaremos el cable 2 del motor(2) al pin numero 6 del L293D.

controlador motores DC con python
Conexión de un motor DC a la controladora

Es extremadamente importante que vuelvas a comprobar cada conexión otra vez antes de conectar las baterías. Sólo cuando estés seguro de que todo está en su lugar, conecta los cables de la batería a los rieles de alimentación de la placa.

d) Conectar un segundo motor (Opcional)

Una de las grandes características del L293D es que puede manejar dos motores independientemente y cada motor puede funcionar a distintas velocidades o direcciones. El uso de este IC hace posible la creación de un robot de dos ruedas, capaz de girar, moverse hacia adelante y hacia atrás con facilidad.

Conectar un segundo motor sólo involucra tres cables mas adicionales de datos y otro dos para el motor.

 

La conexión de datos seria la siguiente:

El primer cable a conectar seria desde el pin 23 (GPIO 11) al pin 9 del L293D, el segundo cable conectariamos le pin 21 (GPIO 9) al pin 10 del L293D y por ultimo se conectará el pin 19 (GPIO 10) al pin 15 del L293D.

 

Y las conexiones del segundo motor:

Conectaremos el cable 1 del motor(2) al pin 11 del L293D y seguidamente conectaremos el cable 2 del motor(2) al pin numero 14 del L293D.

 

controlador motores DC con python
Conexión de dos motores a la controladora

Emcendido

Es importante chequear y doble chequear todo el cableado antes de conectarle cualquier fuente de alimentación a tu proyecto. Como el cableado puede ser un poco complicado, es fácil olvidarse de realizar alguna conexión y enviar 5V al 3.3V del Raspberry Pi.

Una vez colocada la nueva tarjeta SD Raspbian creada, conecta el Raspberry Pi como siempre, y enciéndelo.

Conecta las baterías, asegurándote de prestar atención a los rieles correctos (las franjas largas a lo largo de las partes superior e inferior, si tienes alguna), ya que queremos que solamente el cable negro se conecte a la toma a tierra, y solamente el cable rojo al positivo o alimentación del chip.

El próximo trabajo es decirle al Raspberry Pi que un motor, o dos, han sido conectados. Para esto, usaré un lenguaje llamado Python. Viene instalado en Raspbian, lo cual es un bonus. Si estás usando otro Sistema Operativo como Arch o PiDora, chequea que RPi.GPIO esté disponible.

Pruebas

Para que los motores puedan funcionar, haz doble click en LXTerminal en tu escritorio, para abrir una ventana de comandos. Aquí es donde escribirás código Python usando un programa llamado Nano. Nano es un editor de texto, similar a Notepad o TextEdit pero para la línea de comandos; te enseñaré algunos comandos sobre la marcha si es algo nuevo para tí.

 

Para encender el motor durante dos segundos, utiliza el siguiente código:

importRPi.GPIO as GPIO from time import sleep   GPIO.setmode(GPIO.BOARD)   Motor1A = 16 Motor1B = 18 Motor1E = 22   GPIO.setup(Motor1A,GPIO.OUT) GPIO.setup(Motor1B,GPIO.OUT) GPIO.setup(Motor1E,GPIO.OUT)   print "Turning motor on" GPIO.output(Motor1A,GPIO.HIGH) GPIO.output(Motor1B,GPIO.LOW) GPIO.output(Motor1E,GPIO.HIGH)   sleep(2)   print "Stopping motor" GPIO.output(Motor1E,GPIO.LOW)   GPIO.cleanup()

Las primeras dos líneas le indican a Python qué necesitamos en el programa.

 

La primera línea quiere acceder un módulo llamado RPi.GPIO. Este módulo maneja todo el trabajo duro que involucra encender y apagar los pins GPIO del Raspberry Pi.

 

La segunda línea obtiene sleep del módulo time, para hacer posible la pausa del script dándole tiempo de ejecutar cierta acción, en este caso, dejar un motor encendido durante pocos segundos.

 

La función setmode le dice a RPi.GPIO que use la numeración de placa del Raspberry Pi. Usaremos los números 16, 18 y 22 para decirle a Python que son los pins asociados con los motores.

 

Al utilizar el L293D puedes darle una dirección; una dirección es representada por el llamado pin A, y la contraria es el pin B. Para encender el motor usamos un pin llamado Enable, etiquetado como E en el script de prueba – este es el pin 22. Me explayaré sobre este tema más adelante.

 

Finalmente, se le comunica al Raspberry Pi que todas estas son salidas, lo que se hace con GPIO.OUT.

 

Una vez configurado el script, el Raspberry Pi está listo para encender los motores. Encenderá algunos pins, esperará dos segundos, y luego los apagará, lo que puede leerse en el resto del script.

 

Guarda y sal del programa presionando CTRL-X. En la parte inferior de la consola, aparecerá un mensaje preguntando si quieres confirmar los cambios. Presiona Y y Enter para confirmar. Ahora, estás de regreso en la consola para correr el script y ver cómo el motor se pone en marcha.

sudo python motor.py

Si el motor no se encendió, revisa el cableado o las baterías. Debuggear y encontrar por qué algo no funciona puede ser irritante, ¡pero es un paso muy útil en el aprendizaje de algo nuevo!

Ahora gira hacia atrás

Es brillante tener un motor girando, pero es aún mejor hacerlo girar al revés, así que te enseñaré cómo hacerlo.

 

No necesitamos hacerle nada al cableado, esto es tarea puramente de Python. Esto se logra creando un nuevo script, al que llamaremos motorback.py. Para crear el script en Nano, ingresa el comando:

 

nano motorback.py

 

Escribe el siguiente código:

 

importRPi.GPIO as GPIO from time import sleep   GPIO.setmode(GPIO.BOARD)   Motor1A = 16 Motor1B = 18 Motor1E = 22   GPIO.setup(Motor1A,GPIO.OUT) GPIO.setup(Motor1B,GPIO.OUT) GPIO.setup(Motor1E,GPIO.OUT)   print "Going forwards" GPIO.output(Motor1A,GPIO.HIGH) GPIO.output(Motor1B,GPIO.LOW) GPIO.output(Motor1E,GPIO.HIGH)   sleep(2)   print "Going backwards" GPIO.output(Motor1A,GPIO.LOW) GPIO.output(Motor1B,GPIO.HIGH) GPIO.output(Motor1E,GPIO.HIGH)   sleep(2)   print "Now stop" GPIO.output(Motor1E,GPIO.LOW)   GPIO.cleanup()

 

CTRL-X, luego Y seguido de Enter para guardar.

 

Este script es muy similar al anterior, pero por si no lo has notado, le asignamos low al Motor 1A y high al Motor 1B.

 

High y low son nombres en programación para encendido y apagado.

 

Para detener el motor, debes asignarle low a Motor1E.

 

Enable es el interruptor para encender y apagar el motor, sin importar qué estén haciendo A y B.

 

Si esto te parece confuso, échale un vistazo a esta Tabla de Verdad para ver qué está pasando.

Controlador motores DC con python
Tabla de verdad motor DC

Hay sólo dos estados que le permiten girar al motor, cuando Enable está encendido o high, y A ó B están high, pero no ambos a la vez.

 

Para el caso de dos motores, mira el siguiente script. Lo único diferente es un par de líneas más para configurar el segundo motor.

 

 

import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
Motor1A = 16
Motor1B = 18
Motor1E = 22
Motor2A = 19
Motor2B = 21
Motor2E = 23
GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(Motor2B,GPIO.OUT)
GPIO.setup(Motor2E,GPIO.OUT)
print "Going forwards"
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.HIGH)
GPIO.output(Motor2B,GPIO.LOW)
GPIO.output(Motor2E,GPIO.HIGH)
sleep(2)
print "Going backwards"
GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)
GPIO.output(Motor2A,GPIO.LOW)
GPIO.output(Motor2B,GPIO.HIGH)
GPIO.output(Motor2E,GPIO.HIGH)
sleep(2)
print "Now stop"
GPIO.output(Motor1E,GPIO.LOW)
GPIO.output(Motor2E,GPIO.LOW)
GPIO.cleanup()

Instalación Lcd PC1602F en RasberryPI

Existen varias formas de conectar una Lcd PC1602F en la Rasberrypi de manera más optima como por ejemplo con el método de I2C que explicaré en otro artículo con más calma. Este método es realmente sencillo a la par de práctico donde podremos observar y comprender el funcionamiento de los puertos GPIO de nuestro juguetito… así como una introducción al lenguaje de programación Python!

Montando un LCD PC1602F-B en una Raspberry Pi
Montando un LCD PC1602F-B en una Raspberry Pi

Conectando el Lcd PC1602F en Rasberrypi

Antes de empezar

Tenemos que tener claro que este artículo describe una forma diferente de conexión de un LCD de 16×2 a nuestra Raspberry Pi debido a que el modelo que utilizo de pantalla tiene los pines 15 y 16 al principio del tramo por lo tanto el esquema varia…

Normalmente se utilizará una resistencia variable para regular el contraste, no obstante yo no la utilizaré ya que Raspberry Pi no es capaz de alimentar el LCD a plena potencia y por lo tanto los niveles de contraste y luz no son elevados ni necesitan regulación alguna.

Material necesario

  • LCD 16×2 con controlador hitachi HD44780.
  • Raspberry Pi ( tipo B ).
  • Protoboard.
  • Cables de conexión.
  • Raspberry Pi board connect.

a) Esquema visual

Podemos observar la Raspberri Pi y justo debajo la protoboard! el color de los cables es indiferente… más adelante podemos ver un esquema relacional de los pines que se utilizarán y donde irán conectados.

Conexión de cables del LCD al Rasberry PI
Conexión de cables del LCD al Rasberry PI

En la imagen podemos ver como he utilizado dos cables amarillos… sencillamente, me he quedado sin colores! los cables rojos ( positivo ) y negros ( negativos ) indican eso… y el cable blanco ( negativo ) está es el contraste del LCD! que va conectado directamente a negativo.

b) Esquema electrónico

A continuación podemos ver el esquema electrónico donde por un lado tenemos los pines GPIO de nuestra Raspberry Pi y por el otro el PC1602F-B relacionados…

Instalación Lcd PC1602F en RasberryPI
Esquema de conexión del LCD16x2 al GPIO de la rasberry PI

En lo único que se tiene que prestar atención es en las conexiones que contienen el positivo y el negativo que alimentan el LCD!

Paquetes necesarios

El control de los puertos GPIO lo vamos a realizar por medio de Python.. y por lo tanto necesitaremos su entorno de desarrollo para que funcione el código fuente que más tarde expondré… sudo apt-get install python-dev python-pip python-setuptools git.

sudo apt-get install python-dev python-pip python-setuptools git

Una vez tenemos los paquetes instalados en nuestra distribución… instalaremos el control de GPIO de la siguiente forma… sudo easy_install -U distribute sudo pip install rpi.gpio –upgrade.

sudo easy_install -U distributesudo pip install rpi.gpio --upgrade

Ahora lo tendríamos que tener todo listo para que nuestro código funcione sin problemas…

Código fuente

El código ha sido extraído de Adafruit.

Para empezar, primero lo descargaremos…

git clone https://github.com/Adafruit_Python_CharLCD-master

Y ahora accederemos al directorio… cd Adafruit_Python_CharLCD-master/

cd adafruit_python_charLCD-master/adafruit_charLCD

Y podemos ver que tiene el siguiente contenido: root@raspberrypi:/home/pi/adafruit_python_charLCD-master/adafruit_charLCD

Funcionamiento

#!/usr/bin/python

from rpi_CharLCD import rpi_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime

lcd = rpi_CharLCD()
lcd.begin(16,2)

def run_cmd(cmd):
             p = Popen(cmd, shell=True, stdout=PIPE)
             output = p.communicate()[0]
             return output

while 1:
             lcd.clear()
             lcd.message('Hello moto!\n')
             lcd.message('Funciona!! funciona!!')
             sleep(2)

Como podemos ver es un sencillo script que realiza una llamada a la librería de «rpi_CharLCD.py» y que más tarde realiza un búcle (while) donde envía el mensaje cada dos segundos (sleep(2)).

Utilizando la función «lcd.message» enviamos el mensaje a nuestro LCD, así mismo utilizando «lcd.clear()» limpiamos la pantalla.

Esquemas del spectrum de 48k

Aquí os traigo unos esquemas eléctricos del spectrum de 48k con imágenes del interior de este famoso ordenador personal de los años 80. Tal vez tengais todavía algunos por algún rincón de la casa averiado y queréis volver a revivirlo.

Esquemas del spectrum de 48k
Placa base del spectrum de 48k (ISSUE 3B)

Este ordenador de 8 bits basado en el microprocesador Zilog Z80A, fabricado por la compañía británica Sinclair Research y lanzado al mercado el 23 de abril de 1982.

En Europa, el Sinclair ZX Spectrum fue uno de los microordenadores domésticos más populares de los años 1980.

Su optimizado y compacto diseño hizo las delicias de miles de aficionados a la informática y los videojuegos. Aún hoy perduran miles de fanes del Spectrum que siguen jugando a sus juegos (con emuladores que cargan sus ficheros volcados de cintas). Además hay un mercado de coleccionismo tanto de cintas de juegos originales como de los propios Spectrum.

Esquemas del spectrum de 48k
Modificación echa en el circuito de alimentación
Esquemas del spectrum de 48k
Cambio de los condensadores de la alimentación
Esquemas del spectrum de 48k
Distribución de los componentes en la placa base
Esquema eléctrico del Spectrum de 48k

Esquema del circuito de alimentación

Esquema eléctrico de la alimentación del spectrum 48K (MicroHobby)

Características internas del spectrum 48k

Las características del ZX Spectrum original incluían:

  • Microprocesador Zilog Z80A a 3,5 MHz (bus de datos de 8 bits y bus de direcciones de 16 bits). Acompañando al procesador principal estaba la ULA (Uncommitted Logic Array), encargada de realizar funciones auxiliares.
  • Dos configuraciones de RAM con 16 kB o 48 kB. Es interesante señalar que, contrariamente a lo que el marketing podría haber recomendado, no se incluían los 16 kB de ROM de cada máquina. Así, la memoria total de ambos modelos era realmente de 32 y 64 kB. El límite del direccionamiento de 16 bits es de 64 kB.
  • Estos 16 kB de ROM incluían un intérprete del lenguaje BASIC SINCLAIR desarrollado por la compañía Nine Tiles Ltd. para Sinclair y que era una evolución del que ya desarrollaran para dos anteriores máquinas comerciales de la marca, el ZX80 y el ZX81, y de las que el Spectrum es continuador.
  • Teclado de caucho integrado en el ordenador en el modelo de 16 kB y en la primera versión de 48 kB. El teclado de caucho original oprimía dos membranas con pistas conductoras que servían para detectar la presión.
  • Sistema de almacenamiento en cinta casete de audio común. Se accedía a los datos a una velocidad de 1.500 bit/s de media. Un juego de 48 kB tardaba como media algo menos de 4 minutos en cargar. Había juegos que usaban su propio sistema de carga, denominado “turbo”, a mayor velocidad que la estándar del sistema operativo en ROM, aunque ligeramente más propensos a producir errores de carga.

Descargas

ROM - 1986ES
Sinclair Spectrum 48K Service Manual

Cable programación decodificador engel 4800HD

Monta tu propio cable programación decodificador engel 4800HD para actualizar el firmare de estos decodificadores vía Serie con Punta mini-jack 2,5mm y puerto serie DB9 Hembra.

Este cable es validos para los modelos Engel RS4800 / RS4900 / EN1008.

Cable programación decodificador engel 4800HD
Cable serial para programación decodificador engel 4800HD

Materiales para su construcción

  • 1 metro de cable de 3 hilos de colores.
  • Conector mini-jack estéreo de 2,5mm.
  • Conector db9 Hembra.

Proceso de actualización de firmware o desbloqueo.

Cable programación decodificador engel 4800HD
ENGEL RS4800HD en proceso de actualizando del Firmware

Materiales necesarios para montar el cable de programación del decodificador engel 4800HD

  • Receptor ENGEL RS4800HD/Y (esto esta claro).
  • Cable serie RS232 a Mini-Jack 2,5mm.
  • Resistencia de 10Kohm.
  • Fichero “Firmware_Engel.abs” (El que vallamos a subir).
  • Programa “3606_EromUpgrade.exe“.

 

Una vez tengamos el receptor con la tapeta de arriba quitada, localizaremos la memoria U7: Eon 25Q64.

Cable programación decodificador engel 4800HD
Puente con resistencia 10KΩ en pines 3 y 8 de memoria U7 – 25Q6

Sobre esta memoria tendremos que hacer un puente con la resistencia de 10KΩ entre los pines 3 y 8. Puedes soldar ese puente (recomendado) o mantenerlo con la mano.

Cable programación decodificador engel 4800HD
Resistencia de 10kΩ a 1/4 vatio

Partimos de ENGEL RS4800 apagado, deberemos tener el cable rs232 mini-jack 2.5mm conectado y el puente con la resistencia 10KΩ colocado, ejecutaremos el programa “3606_EromUpgrade.exe

Cable programación decodificador engel 4800HD
Pantalla principal del programa 3606_EromUpgrade.exe

Dejaremos todas las opciones tal y como vienen por defecto (ver imagen), y seleccionaremos la función “Upgrade” e “Include Bootloader”.
Pulsaremos botón “Browse“, para seleccionar el fichero Firmware que deseemos grabar en el Engel, por ejemplo “Firmware_Engel.abs”.

Cable programación decodificador engel 4800HD
Pantalla elección del firmware a subir

Pulsaremos el botón “Next>” en el programa y conectaremos el alimentador 12Vcc al receptor ENGEL.

En este momento el programa estará intentando sincronizar con el receptor.

Cable programación decodificador engel 4800HD
3606_EromUpgrade.exe intentando sincronizar con el Receptor

Una vez sincronizado nos aparecerá el mensaje “DONE” y rápidamente quitaremos el puente de la resistencia 10Kohm. Pulsaremos el botón “Next>” y comenzará la grabación del firmware en el Engel.

NOTA: Hay que quitar el puente rápidamente tras ver el mensaje “DONE“, por lo que quizás necesites ayuda de otra persona encargada de retirar ese puente.


Una vez haya concluida la carga del Firmware en el receptor ENGEL, pulsaremos al botón “Finish” y …

¡¡ Ya tenemos nuestro Receptor Engel de nuevo funcionando !!

Secuencia a seguir (resumida)

  1. Conectamos el cable serie RS232 al PC y al receptor Engel. El receptor Engel conectado al alimentador, pero aún sin encenderlo (“OFF”).
  2. Ejecutar el programa “3606_EromUpgrade.exe“.
  3. Elegimos en “Port” el puerto donde tenemos conectado el cable rs232 al PC (por defecto COM1).
  4. Ponemos la velocidad en “Bits Rate” de 115200.
  5. Seleccionar la operación a realizar: “Upgrade” (para meter firmware o listas de canales al deko) o “Dump” para leer del deco.
  6. Pulsamos en “Connect“.
  7. Pulsamos el botón de encendido del ENGEL.
  8. En pantalla mostrará “ON”..”on”.. “str” y “conn”. En ese mismo momento en el programa aparecerán varias opciones.
  9. Pulsamos doble clic en “All Chunk“.
  10. Elegimos el fichero de firmware formato “.abs“.
  11. Pulsamos “Next” y esperamos que acabe.
  12. El Deco se reiniciará y en su pantalla pondrá “Start“.
  13. Desconectamos el cable RS232 del Engel y lo conectamos al televisor.

 

Una vez finalizado el proceso tendremos que volver a configurar el Engel (Idioma, Wifi, etc).

Software necesario

Conector USB para decodificador engel

Instalación de un conector USB para decodificador engel 4800HD/Y, internamente este decodificador trae los pad libres para dicha modificación. Esto sera muy útil por si se nos avería el modulo wifi que trae incorporado en su interior y no encontramos un repuesto.

Conector USB para decodificador engel
Decodificador Engel RS4800HD/Y

El Engel RS4800HD/Y viene de fábrica equipado con una tarjeta de red inalámbrica (wifi) que está conectada a la placa y que a pesar de que puede ser retirada, no es tan fácil adquirir en el mercado otro modulo para reemplazarlo y así poder solventar el problema.

Si tu eres de esas personal mañosas y te quieres arriesgar, (siempre bajo tu responsabilidad), podrás tú mismo añadirle este usb extra al decodificador.

Instalación conector USB para decodificador engel 4800HD/Y

En primer lugar debemos abrir dicho decodificador. Para ello retiraremos las cuatro “patas” de goma que veras en su parte baja y así accederemos a los cuatro tornillos y podremos retirarlos.

Conector USB para decodificador engel
Tapones de los tornillos de la parte de abajo del receptor Engel

Una vez retirados los tornillos, la apertura es muy sencilla. Sosteniéndolo con una mano por arriba y otra por abajo, el decodificador se abrirá desde atrás y al alcanzar una cierta abertura el solo se soltará de la parte delantera.

Conector USB para decodificador engel
Abriendo la carcasa superior del receptor Engel
Conector USB para decodificador engel
Extrayendo la carcasa superior del receptor engel
Extrayendo los tornillos de la carcasa superior del receptor engel

Una vez abierto esto es lo que encontraremos.

Conector USB para decodificador engel
El módulo wifi que trae internamente el receptor engel

Pues bien, marcado en rojo tenemos nuestra infortunada tarjeta inalámbrica. En las fotos que te mostramos a continuación verás que de forma sencilla se puede retirar, pues solo está insertada en seis pines, dos de un lado y cuatro del otro, y solo con hacer una suave fuerza de extracción, esta saldrá sin ningún problema.

Conector USB para decodificador engel
Vista del conector de antena que trae el receptor engel

También retiraremos el conector de la carcasa, mas fácil si cabe, pues una parte rectangular de la mima se puede desmontar y dicho conector quedará liberado.

Conector USB para decodificador engel
Extracción de la tapeta que fija el conector de antena del receptor engel
Tapeta que fija el conector de antena del receptor engel
Conector USB para decodificador engel
Conector de antena del receptor engel
Conector USB para decodificador engel
Conector de antena del receptor engel

Una vez retirados ambos, nos encontramos, un hueco habilitado para albergar un conector USB, con sus orificios para soldar conectores y todo.

Conector USB para decodificador engel
Pads libre en el interior del receptor para añadir un conector usb

Pues ahora solo, (Y no toméis el “solo” al pie de la letra), nos queda soldar un conector USB, que podéis adquirir en cualquier tienda de electrónica.

Una vez instalado, el resultado quedará tal que así.

Conector USB para decodificador engel
Conector usb soldado a la board del engel

Observamos que la carcasa no está habilitada para albergar tal conector, pero con un poco de maña y paciencia, practicaremos unas entradas en el lugar justo y quedará bastante aceptable, pero lo mas importante, practicable.

Ahora solo nos queda adquirir una antena wifi USB. Ojo, no cualquier antena wifi vale. Tienes que adquirir una que tenga el chip RT5370. No sabemos si alguna otra funciona. Nuestras pruebas en taller ratifican lo que hemos visto en la red. Solo funcionan estas. Pero no te preocupes, pues encontrarlas es fácil.

Conector USB para decodificador engel
Antena externa acoplada al receptor engel
Conector USB para decodificador engel
Puerto usb añadido receptor engel

Y ya para terminar, te mostramos el resultado final.

Conector USB para decodificador engel
Receptor engel con antena externa en el puerto usb añadido

Conector GPIO de Raspberry Pi

En este post te vamos a mostrar el conector GPIO de Raspberry Pi 3, detallaremos los pines y procederemos al manejo básico de los pines I/O usando la shell.

 

¿Qué es GPIO?

General Purpose Input Output (GPIO) es un sistema de entrada y salida de propósito general, es decir, consta de una serie de pines o conexiones que se pueden usar como entradas o salidas para múltiples usos. Estos pines están incluidos en todos los modelos de Raspberry Pi aunque con diferencias.

 

 
 
 

Tipos de puerto GPIO según modelos

Todas las placas y revisiones no disponen de esquemas GPIO iguales. Aquí te ofrecemos todos los esquemas de las diferentes placas que existen por el momento. En las siguientes imágenes podemos apreciar los distintos layouts de los modelos existentes por el momento.

Como puedes comprobar, existen tres esquemas básicos. Los de la revisión 1.0 del modelo B, los incluidos en la revisión 2.0 del modelo A y B, y los modernos A+, B+, 2, 3B, 3B+ y las Zero que comparten el mismo esquema de conexiones.

 

 

La placa base

La Rasberry PI, es un dispositivos de bajo coste (Low Cost Single Board Computers), que quiere decir que es un ordenador completo, de bajo consumo, con características modestas que está contenido en una placa un poco mayor que una tarjeta de crédito. Hay de varias marcas, distintos precios y diseños. El más común es de marca Raspberry. Fue también el primero en tener una acogida masiva. Hay otras marcas como ODroid o Banana Pi, cada uno con sus características y sus precios.

Conector GPIO de Raspberry Pi
Pines del conector GPIO de la Raspberry Pi 3

La versión de Rasberry Pi con la que vamos a trabajar es la 3, salió en febrero de 2016 y cuenta con WiFi incorporada, Ethernet, varios puertos USB, HDMI y conectores para cámara, display, etc. Está basada en el BCM2837, evolución del BCM2835, un SoC (System on Chip) de Broadcom bien conocido. Un System on Chip no es más que un procesador, GPU y demás funciones integradas en un sólo componente. Se parece mucho a la electrónica de un smartphone. Este modelo es un ARM de 64bits a 1.2GHz, quad core y con 1Gb de RAM.

De la arquitectura no puedo contar mucho, ya que Raspberry no es Open Hardware. Hay disponibles versiones reducidas del esquema eléctrico, pero por hasta la fecha no hay intención de liberar el esquema completo. Por tanto muchos de los resultados se basan en la experimentación.

El chip que controla los puertos USB y la conexión Ethernet es el mismo, un LAN9514 de Microchip, produciendo un cuello de botella. Tened esto en cuenta si planeáis usarlo como NAS. Dado el precio del integrado y el uso general al que se destina el producto me parece una decisión de diseño más que razonable.

Lo importante es que todas las versiones cuentan con una conexión GPIO (General Purpose Input Output) triestado. Es decir salida nivel alto, bajo y alta impedancia -input-, como las de un microcontrolador. Al fin y al cabo son los mismos pines del BCM expuestos para nosotros. Eso sí, importante, funcionan a 3.3v y no a 5v y carecen de cualquier tipo de protección. No suele haber problema en conectarlas a 5v con una resistencia, pero es algo que el datasheet prohíbe expresamente, así que allá vosotros.

 

 

Equipamiento

El adaptador, para un uso ocasional sirve perfectamente con un cargador de móvil de 5v. Eso sí, en cuanto queráis conectar un disco duro externo, por ejemplo, se os va a venir abajo. Recomiendan un cargador de 3 amperios, que también os puede servir para cargar un móvil que soporte carga rápida.

¿Disipador? No es malo pero tampoco lo necesita. Si queréis ponerlo tened en cuenta que las cajas como la de arriba sólo están preparadas para poner disipador en el chip principal.

El sistema operativo va en una tarjeta Micro SD, el tamaño no importa siempre que quepa el sistema operativo y el software que queráis instalar, el mínimo sin entorno gráfico diría que una de 2Gb.

Otros accesorios que considero muy útiles son un latiguillo de cable de red Ethernet para conectarla al router o al PC y un conector USB-Serie sobre todo para los que uséis portátil. Veremos por qué más adelante.

 

 

Primeros pasos

El SO probado es Raspbian. Hay versión con entorno gráfico y versión sin él. Como sólo me conecto por ssh puedo instalar la versión ligera.

Para instalar el sistema operativo basta descomprimirlo y copiar la imagen en una SD. Viene preconfigurada con un cliente dhcp y el demonio Avahi habilitado con el nombre raspberrypi.local. Lo cual, si usáis linux, os va permitir acceder a ella con ese nombre por ssh en cuanto la conectéis a la red cableada. ¿Y si uso Windows? Bueno pues Windows no soporta de manera nativa el protocolo mDNS (DNS por multicast) así que no reconocerá el nombre. Podéis mirar en el router para saber qué IP le ha asignado en la red.

Si el SSH no funciona o se estropea por lo que sea, o si no tenemos cable de red y sólo podemos conectarla por wifi nos quedan aún dos opciones para comunicarnos con la Raspberry. Una obvia es conectar un teclado por USB y un monitor HDMI.

La otra, si sólo tenemos portátil y no disponemos de teclado o de monitor HDMI. En ese caso sólo nos queda una opción: la consola serie. La versión de raspbian que he probado tiene habilitada la consola serie por defecto. Para eso os recomendaba antes contar con un conector usb-serie. La configuración serie es 115200-8N1.

 

 

Pinout GPIO

El chip BCM2835 tiene una serie de registros que son los que controlan las entradas y salidas de propósito general (gpio). Por hardware, esos registros se mapean en un rango de memoria accesible por el sistema operativo. De esta forma podemos interactuar con ellos desde nuestro programa.

Habitualmente el acceso a memoria sólo se podría hacer como root, sin embargo hay un driver llamado gpiomem, que se encarga de mapear ese rango concreto de forma que sea accesible por el usuario.

La conexión gpio de este modelo tiene 40pin, con un conector igual al que usaban los discos duros IDE hace tiempo. Venden cables para conectarlos con una protoboard, pero no os lo recomiendo a menos que sólo vayáis a usar la Raspberry para experimentar porque estas clavijas una vez encajadas cuesta mucho quitarlas y se rompen con facilidad. En su lugar es preferible que compréis cables con conectores Dupont hembra-hembra y también macho-hembra.

Conector GPIO de Raspberry Pi
Identificación de los pines dela Rasberry PI 3

Entre los 40 terminales tenemos

 

  • 24 terminales de entrada / salida de propósito general, con pull up y pull down independientes programables por software.
  • Un módulo UART, entrada y salida.
  • Dos canales PWM con DC independiente y dos modos de operación.
  • Un bus I2C.
  • Dos buses SPI.

 

Lógicamente todas estas funciones se pueden emular también por software en caso necesario, por supuesto con menor rendimiento que con el hardware nativo. Muchas librerías para Raspberry lo incluyen.

Por contra hemos de decir que no tenemos otros extras que incorporan algunos microcontroladores tales como entradas analógicas o comparadores accesibles desde el software.

 

 

Detalles de los pines:

 

Terminales de +5V. Van conectados a la alimentación, detrás del fusible térmico de protección. Hay una cosa curiosa y es que pasado el fusible, las pistas de 5V de alimentación y de USB van unidas, por lo que técnicamente podríais alimentar la Raspberry desde el USB o desde GPIO. No se recomienda ya que habréis anulado el fusible de protección y cualquier corto que ocasionéis podría tener graves consecuencias. El fusible es de 2.5A en los modelos modernos (de tipo MF-MSMF250), por lo que restando el consumo de la Raspberry que son unos 600mA, podemos consumir más de 1A de estos pines. Siempre y cuando el adaptador de red lo dé, claro está.

Terminales de +3.3V. En las versiones anteriores a la 3 esta tensión la proporcionaba el propio chip por lo que no podía suministrar más de 50mA y eso es lo que leeréis en multitud de foros. Sin embargo en las más modernas se utiliza un conversor conmutado PAM2306, el cual según su datasheet podría proporcionar hasta 1A. Es el mismo conversor al que va conectado el chip así que tened cuidado y no abuséis de él.

Terminales de GPIO. Es la conexión para periféricos del BCM.

Equivalente electrónico de un terminal GPIO

En general cada pin se puede configurar individualmente para funcionar como una salida o entrada de alta impedancia, con posibilidad de tener pull-up y pull-down ambas de 50kohm.

La tensión aplicada a una entrada no debería nunca ser superior ni inferior a la tensión de alimentación del integrado. Es decir, debe estar entre 0 y 3.3V. Los diodos que veis apenas llevan corriente y no serán capaces de mitigar una sobretensión en las entradas.

En caso de usar la patilla como salida, tendrá un nivel de entre 0 y 3.3V. Las especificaciones dicen que no debemos exceder los 50mA de consumo entre todas las salidas. Se refiere a cuando consumamos corriente de una salida que esté a nivel 1, por ejemplo alimentando un LED con el otro terminal a masa. La restricción no aplica cuando hablamos de nivel 0 y lo que hacemos es drenar corriente hacia masa, por ejemplo si el LED estuviera conectado entre el positivo y una salida GPIO. Esto es porque la pista interna del procesador que lleva la tensión positiva de 3.3V es mucho más débil que los mosfets que drenan la corriente hacia masa. La realidad es que estos chips suelen ser bastante resistentes, pero no olvidéis que carecen de protección.

Cada patilla, además de I/O puede tener funciones alternativas tal como I2C, UART o PWM.

El primer punto problemático es la numeración.

 

Básicamente hay 3 sistemas:

 

  • El etiquetado que sigue el BCM2837. Es decir los nombres GPIO4, GPIO7, etc. Es el que se indica en la caja Pibow.
  • El número de terminal físico del conector de 40 pin.
  • La numeración de wiringPi, que usa numeración propia pero a diferencia de las anteriores no varía entre versiones de Raspberry Pi.

Así pues, tenemos el GPIO7, que en numeración de BCM es el 4, corresponde al pin 7 del conector y lleva la numeración WiringPi 7.

O también tenemos el terminal número 3 del conector, cuyo nombre es SDA. En la revisión 1 de Raspberry fue GPIO0 y en la siguiente versión fue el 2. Mientras que en WiringPi se numera como 8.

Sí, es un jaleo sobre todo en nuestros primeros proyectos. Cuando utilicéis código de ejemplo de alguna página debéis estar atentos a la numeración que siguen porque será vuestra principal fuente de errores.

 

 

I/O directo

La forma más sencilla de activar y desactivar un puerto, o de leer el estado es utilizando el acceso a la memoria que nos expone gpiomem en forma de sistema de ficheros bajo la jerarquía /sys/class/gpio.

Dependiendo de la distribución de linux y su configuración podremos hacer este procedimiento como usuario o necesitaremos ser root.

Lo primero que haremos es “exportar” la patilla que queramos manejar. Así por ejemplo si queremos utilizar la GPIO11 (llamada SCLK, que corresponde al terminal número 23, y al WiringPi 14) ejecutaremos el comando:

 

echo 11 > /sys/class/gpio/export

 

Si ahora listamos el directorio /sys/class/gpio nos habrá creado un subdirectorio llamado /sys/class/gpio/gpio11. Si queremos que GPIO11 actúe como una entrada usaremos

 

echo in > /sys/class/gpio/gpio11/direction

 

Y leeremos su valor reflejado en el fichero value:

 

$ cat /sys/class/gpio11/value 0

 

Mientras que si queremos que sea una salida, usaremos

 

echo out > /sys/class/gpio/gpio11/direction

 

y escribiremos el valor donde antes lo leíamos:

 

echo 1 > /sys/class/gpio/gpio11/value

 

 

I/O básico con ayuda de gpio

El método anterior es muy sencillo para probar aunque está bastante limitado. No se puede activar la resistencia de pull up o pull down por hardware, por ejemplo.

La siguiente manera más sencilla es utilizando la interfaz por línea de comandos de WiringPi gpio. En Raspbian basta instalar el paquete llamado wiringpi. Incluye la línea de comandos y también las cabeceras C que usaremos en otros artículos. Hay más librerías, pero de momento los ejemplos los haremos con WiringPi.

La idea es tener una herramienta por linea de comandos, que sin programar nos permita hacer uso de ciertas características avanzadas de GPIO, tal como pull up/down, detección de flanco de subida/bajada, i2c, spi, etc.

Veamos cómo se haría para encender y apagar un LED a intervalos regulares (el programa equivalente a Hello World pero en electrónica). Sería fijar un pin como salida, ponerlo a 1, esperar un momento, ponerlo a 0, esperar un momento y repetir.

 

gpio mode 25 out
while (true)
do
   gpio write 25 0
   sleep 0.5
   gpio write 25 1
   sleep 0.5
done

 

En el ejemplo hemos elegido el pin 25, que equivale al 26 según la numeración del BCM, que también es la GPIO26 (aunque en algunos sitios también aparece como GPIO25) y que en el conector físico es el pin número 37.

Leer el estado es igual de fácil, fijando la patilla como entrada y configurando el pull up o pull down:

 

$ gpio mode 25 in
$ gpio mode 25 up
$ gpio read 25
1

$ gpio mode 25 down
$ gpio read 25
0

 

Quizá una de las características más útiles es leer el estado de toda la interfaz GPIO y mostrarlo en forma de tabla; además nos sirve como tabla de equivalencia entre las diferentes numeraciones:

Tabla de equivalencia obtenida al ejecutar gpio readall

Dispositivo programador para atmega

Este dispositivo programador para atmega soporta la programación de los microcontroladores de la familia Atmel, AVR 51, ATMega, ATtiny, ATMEGA8 ATMEGA128 y muchos más.

Trabaja a través del puerto USB, esto se logra a través de un procesador ATMEGA 8.

Este programador es bastante elegante y compacto, realmente portable y sencillo de usar, para diferentes proyectos de electrónica, robótica o escolares.

Configuración de Hardware dispositivo programador para atmega

Antes de que el firmware se escribe en el micro-controlador con USBasp, hay algunas configuraciones de hardware que necesitan ser entendidos.

Hay tres puentes en el hardware que se utiliza para la configuración, que son:

  • Puente 1 ( JP1 ) se utiliza para proporcionar alimentación de 5V a la diana a través de conector ISP . Si se conecta el puente , el objetivo no requiere alimentación externa , ya se ha obtenido de USBasp .
  • Jumper 2 ( JP2 ) se utiliza para realizar actualizaciones de firmware. Este puente debe estar conectado si usted quiere hacer la escritura / de actualización de firmware a .
  • Jumper 3 ( JP3 ) conectado con el pin PC2 como SCK ajuste. Si el objetivo tiene una velocidad de reloj más baja ( < 1,5 MHz) , entonces este puente debe ser conectada . SCK se reducirá de 375 kHz a 8 kHz.

Instalación del Firmware

El Firmware se puede instalar utilizando PonyProg 2000 con una interfaz de puerto paralelo.

Los pasos para instalar el Firmware es el siguiente:

  1. Conecte el Jumper 2 ( JP2 ) .
  2. Conecte USBasp con PC / ordenador portátil a través del puerto USB. Cuando conecte este , habrá una advertencia “USB no reconocido ” . Simplemente ignore esta advertencia.
  3. Cargar la versión del firmware utilizado de conformidad con el micro-controlador .
  4. Establecer y fijar H -Fuse configuración L- fusible para cristal externo de 12 MHz . Para el ATmega8 , H- fusible = 0xC9 y L- fusible = 0xEF , mientras que para el ATmega48,H- fusible = 0xdd y L- fusible = 0FF .
  5. Haga clic escritura para escribir los ajustes anteriores.
  6. Cuando haya terminado, retire la parte posterior Jumper 2 (JP2) y desconecte el cable USB.

Para el ATmega8 , estableciendo H- fusible y L- fusible en PonyProg de ​​la siguiente manera :

Tabla de configuración

Descargas de archivo del proyecto

Usbasp.2009-02-28.tar
Usbasp.2011-05-28.tar
Pony-Prog_V2.07c.zip

Control temperatura para ventiladores PC

Circuito para el control de temperatura para ventiladores de PC, es bastante precisión y puede usar ventiladores de cualquier tamaño. Sólo se deben de ajustar las resistencias asociadas a para un tipo diferente, como la resistencia R6 de 100 ohm, 2 vatios y el aparato ya está listo.

Control temperatura para ventiladores PC
Esquema eléctrico del control temperatura para ventiladores PC

El diagrama del circuito presentado es para un pequeño ventilador 12 voltios, con el tamaño y el tipo determinado por el usuario.

Funcionamiento del control temperatura para ventiladores PC

La temperatura se percibe a través de los tres diodos 1N4148 y presentado en las patillas 2 y 3 del tipo diferencial amplificador operacional 741. R7(10K) se utiliza para crear una diferencia de voltaje entre los pines de entrada invertida y no invertida 2 y 3 del U1.

Todas las señales presentes en el pin 2 será una señal invertida en el pin de salida 6. Obviamente, entonces, los pines de entrada son muy importantes.

Cuando el pin 2 es más positivo que el pin 3, el pin de salida 6 de la 741 pasa a nivel alto y con esto se lleva a cabo la polarización directa de la base del transistor Q1, que cambia en el transistor Q2 y el Led y pone 12V en los terminales de salida para el ventilador. R9 funciona como una retroalimentación para el 741.

Sólo ventiladores tipo DC se puede utilizar con este diagrama esquemático sin modificaciones adicionales. El sensor de temperatura se compone de tres diodos de señal fácilmente disponibles 1N4148 montados en paralelo.

Montar en una delgada de aluminio, o un tubo de plástico (dependiendo de su aplicación) para hacer de este sensor de temperatura a prueba de agua.

Como una nota adicional, he visto este tipo de sensor de temperatura, con los diodos, ya sea en paralelo o en serie, o bien los diodos 1 o más, en todo tipo de equipos de laboratorio tales como baños de agua caliente y otros.

Para un baño de agua ajuste la temperatura tomando en cuenta la temperatura ambiente hasta aproximadamente 100° centígrados. Tenga en cuenta que el uso del diodo 1N4148 como un sensor de temperatura es muy preciso cuando se usa dentro de sus especificaciones.

Lista de Componentes

ResistenciasCondensadoresVarios
R1 – 560ΩC1 – 2.2uF / 25vQ1 – 2N2907
R2, R9 – 100KΩC2 – 47uF / 25vQ2 – MJE521
R3, R8 – 10KΩ D1, D2, D3, D4 – 1N4148
R4, R7 – 1KΩ LD1 – led 5mm rojo
R5 – 470Ω IC1 – uA741
R6 – 100Ω S1 – interruptor
P1 – 100kΩ J1 – ventilador

Alimentación

  • V máx: simple 12Vdc
  • I  máx: 0.2A + consumo ventilador

Conversor señal rs232 a paralelo

Este conversor señal rs232 a paralelo, es un receptor de datos en serie compatible con la norma RS-232C. Se puede configurar la velocidad entre 1200, 2400, 4800 y 9600bps. El formato es fijo, a 8N1 y la adaptación de tensiones entre TTL y RS232C es pasiva.

Esquema eléctrico del conversor de señal rs232 a paralelo

Como se ve, todo el sistema se basa en el micro-controlador PIC16F84A y un puñado de resistencias y condensadores con funciones poco importantes. La recepción de los datos series y posterior conversión a paralelo se efectúa dentro del PIC así como la generación de los tiempos de retardo para las diferentes velocidades.

La resistencia de 10kΩ a la entrada de señal, se encarga de adaptar los niveles de tensión del bus RS232C a TTL. Dado que el estándar RS232 estipula que un uno lógico (o marca) corresponde a un voltaje negativo comprendido entre -3 y -25v y un cero lógico (o espacio) corresponde a un voltaje positivo comprendido entre 3 y 25 voltios a la entrada del PIC tendremos un estado lógico invertido, siendo el cero expresado por +V y el uno por 0V. Pero como aquí todo se resuelve por software esto no es para hacerse mala sangre.

Tabla de velocidad de conexión

La velocidad de conexión vendra condicionada por el switch de 4 posiciones marcado en el esquema como S1.

  • 1 a 8 pines cerrado 1200 Bps
  • 2 a 7 pines cerrado 2400 Bps
  • 3 a 6 pines cerrado 4800 Bps
  • 4 a 5 pines cerrado 9600 Bps

Nota: solo podrar esta conectada la linea de la velocidad que deseemos usar, las demas lineas deben permanecer abiertas.

Funcionamiento del conversor señal rs232 a paralelo

En el encabezado se aclaran los pines del puerto A para saber donde se conectan. Luego se definen las equivalencias. La clásica llamada org que indica a partir de que posición comienza a cargarse el programa en la memoria pasa saltear el vector de interrupción. 

Desde la etiqueta Start hasta el siguiente Retlw

Podemos ver la rutina de retardos, empleada para generar la temporización entre cada bit así como la inicial del bit de arranque. Recordemos que siempre es mejor leer el bit en su parte central por lo que si demoramos un tiempo total de bit y medio al bit de arranque al primer bit de datos le atinaremos en el medio del mismo.

Desde la etiqueta Recibir hasta el próximo Retlw

Tenemos la rutina que se encarga de recibir los datos por el pin serie y colocarlos en la variable recep, la cual actúa como un buffer de recepción. Empleamos una forma muy peculiar pero práctica para completar la palabra de 8 bits partiendo de uno solo seriado. Colocamos el estado de la línea serie en el indicador de Carry del CPU. Luego rotamos la palabra recep una posición a la derecha, con lo que conseguimos que todo su contenido se desplace. Pero como esta instrucción utiliza el carry como intermedio de un extremo al otro logramos que el bit recibido aparezca en la palabra recep. Esto ocho veces conforma la palabra total recibida.

Desde la etiqueta Inicio hasta el siguiente Clrf ptob

El programa configura los puertos, limpia el buffer de recepción y pone a cero todos los bits de la salida paralela.

Desde la etiqueta Sel hasta la instrucción Goto sel

El programa lee el selector de velocidad de comunicaciones y carga en las variables retsb y reteb los valores necesarios para lograr el timming adecuado a la velocidad escogida. Esto lo logra dirigiendo el programa hacia sel12, sel24, sel48 o sel96 según corresponda.

Luego de establecerse la velocidad de comunicación el programa queda en un pequeño ciclo infinito desde la etiqueta ciclo hasta la orden goto ciclo en lo cual lo que se hace es quedar a la espera de un dato vía serie, recibirlo y colocarlo sobre los pines del puerto B del micro.

Como sale a simple deducción el selector de velocidad solo es leído al arrancar el programa. Y una vez interpretado no es vuelto a consultar hasta que se reinicie el mismo. Por ello, si se cambia de velocidad será necesario o bien aplicar reset al micro o bien apagarlo y volverlo a encender.

Con resistencias de 470 Ω y diodos Led´s es posible indicar visualmente la palabra recibida. Si bien el microcontrolador es de tecnología CMOS, alimentado con 5V puede considerarse como que funciona en TTL y por ello puede ser instalado en un circuito de lógica TTL

Lista de componentes

ResistenciasCondensadoresVarios
R1.., R5 – 10kΩC1, C2 – 18pFPIC1 – PIC16F84A
 C3 – 100pFS1 – Interruptor 4 Posiciones
  Q1 – Cristal 4Mhz

Alimentación

  • V máx: simple 5Vdc
  • I  máx: 0.1A

Convertidor de analógico digital 12Bits

Vamos a realizar un convertidor de analógico a Digital ‘AD’ de 12Bits Serie, montado sobre el MAX187, este sencillo y a su vez economico circuito, nos permitirá digitalizar una señal analógica cuyo margen esté dentro de los 0 y los 5v de corriente continua (CC), con una resolución de 12 bits y con salida de datos SPI

El bus de interfaz de periféricos serie o bus SPI(Serial Peripheral Interface) es un estándar de comunicaciones, usado principalmente para la transferencia de información entre circuitos integrados en equipos electrónicos.

convertidor de analógico digital 12Bits
Esquema eléctrico del convertidor de analógico digital 12Bits

Los convertidores A/D son dispositivos electrónicos que establecen una relación biunívoca entre el valor de la señal en su entrada y la palabra digital obtenida en su salida. La relación se establece en la mayoría de los casos, con la ayuda de una tensión de referencia.

La conversión analógica a digital tiene su fundamento teórico en el teorema de muestreo y en los conceptos de cuantificación y codificación.

Una primera clasificación de los convertidores A/D, es la siguiente:

  • Conversores de transformación directa.
  • Conversores con transformación (D/A) intermedia, auxiliar.

Funcionamiento del convertidor de analógico a digital 12Bits

Montaremos el circuito dentro de un conector DB25 macho, el cual se conecta al puerto paralelo del PC. Alimentamos el sistema (poniendo en 1 los bits 4 y 5 del puerto) y de este modo el circuito digitalizara la señal proveniente de la entrada.

Luego, el programa del nuestro Computador Personal o portátil se encargará de poner en bajo la línea CS, con ello le indicara al chip que queremos disponer de el.

Seguidamente generaremos 12 pulsos de reloj en la línea SCLK, por cada bit de reloj que generemos, leeremos un bit proveniente de DOUT.

Recordemos que el protocolo SPI especifica que se comienza por el bit menos pesado (el 0) y se concluye por el mas pesado (en este caso el 11).

Lista de componentes

Resistencias Condensadores Varios
R1, R2 – 100Ω C1 – 100nF IC1 – MAX187
R3 – 1MΩ C2 – 10µF Di1 -1N4148
C3 – 4,7µF

Alimentación

  • V máx: 12Vdc
  • I  máx: 0.5A

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies