Controlador motores DC con python

Controlando 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.

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.

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.

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.

Identificando el Pin 1 (está en la esquina inferior izquierda)

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 18 del L29eD y por ultimo el tercer cable se conectara desde el pin 16 (GPIO 23) al pin 7 del L293D.

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 al pin 3 del L293D y seguidamente conectaremos el cable 2 del motor al pin numero 6 del L293D.

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 adicionales y otro motor. La conexión 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.

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.

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

Conectando el LCD PC1602F-B
a la
Raspberry PI

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

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

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…

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.

Cable programación decodificador engel 4800HD

Cable
programación
para
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 serila 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.

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.

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

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”.

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.

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

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.

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.

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.

Abriendo la carcasa superior del receptor 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.

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.

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.

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 de antena del receptor 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.

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 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.

Antena externa acoplada al receptor engel
Puerto usb añadido receptor engel

Y ya para terminar, te mostramos el resultado final.

Receptor engel con antena externa en el puerto usb añadido

Dispositivo programador para atmega

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

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.

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 – 560C1 – 2.2uF / 25vQ1 – 2N2907
R2, R9 – 100KC1 – 47uF / 25vQ2 – MJE521
R3, R8 – 10K D1, D2, D3, D4 – 1N4148
R4, R7 -1K LD1 – led 5mm rojo
R5 – 470 U1 – uA741
R6 – 100 SW1 – interruptor
Vr1 – Potenciómetro 100k MT1 – ventilador

Alimentación

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

Conversor señal rs232 a paralelo

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.

conversor 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.

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

Alimentación

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

Convertidor de analógico digital 12Bits

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 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).

Dispositivo electrónico para glitch Unlooper

Dispositivo electrónico
para
glitch Unlooper

En este proyecto vamos a realizar un dispositivo electrónico para glitch como es el Unlooper, herramienta que tiene efectos tanto legales como ilegales.

Usado por los desarrolladores de software de tarjetas inteligentes para recuperación de errores de programación, y por los que tratan de piratear los sistemas de seguridad de las tarjetas inteligentes.

 

Dispositivo electrónico para glitch Unlooper

Descripción del dispositivo electrónico para glitch Unlooper

El unlooper es un dispositivo parecido al lector ISO que siempre hemos usado solo que con la adicion de un procesador AVR (AT90S2313) y una serie de circuitos adicionales para poder controlar algunas caracteristicas electricas de como se trata la visa.

Que son el voltaje y la señal de clock. La funcion del AVR es ir sincronizado con la card en una relacion por lo general de 2:1 (que significa que por cada clock de la visa el avr da 2) y ultimamente nuestro nuevo intento de usar la relacion 8:1.

Todo esto es para aprovechar algunos GLITCH en las visas, aplicando esas alteraciones en puntos especificos.

¿que es un glitch?

pues es una respuesta no esperada pero predecible del procesador interno de visa causado por algunos agentes externos como caracteristicas electricas (voltaje, frecc) o ambientales (temperatura,luz,microondas, ect), un ejemplo practico, es por ejemplo que la visa tuviera un code asi en un punto x:

breq $45 (lo hariamos comportarse como un jmp $45)

Con esta instruccion (la cual es fictisia claro esta, solo es demostrativo), el procesador de la visa, haria un salto condicional (dependiente de alguna bandera como la z) a una direccion $45, pero el salto como lo dice su nombre es “condicional”, sin embargo con la aplicacion de algun glitch de voltaje por ejemplo, podemos convertir ese salto “condicional” en un salto “absoluto”, de esa manera podemos ir haciendo nuestro camino atravez del code para hacer algo que queramos, si necesidad de depender completamente de su comportamiento original.

Prototipo de montaje

Vista componentes de dispositivo
Vista pistas de dispositivo

Lista de componentes

ResistenciasCondensadoresSemiconductoresVarios
R1 – 100KΩC1, C2 – 22pfB1 -= Puente Rectificador 1AJ1 = Ficha 2,1mm Alim. PC
R2 – 4K7C3 – 470pfDL1 – LED RojoJ2 = Conector DSUB 9 hembra
R3, R6 – 47KΩC4, C5, C6, C7 – 1μF/16v ElectrolíticoDL2 – LED VerdeY1 = Cristal 18.432Mhz 20PF
R4, R5 – 470ΩC8, C12 A C19 – 100nF 63VU1 – L7805CVS1 = 1 interruptor DIP 4 Pos.
P1 = 500Ω Pot. verticalC9 – 22nF 100vU2 – MAX232NLector Smartcard ISO 7816
 C10 – 220µf 25vU3 – MC74HC04H 
 C11 – 100µf 16vU4 – M74HC00B1 
 C12, C13,C14, C15, C16, C71, C18, C19 – 100nF 16vU5 – M74HC74B1 
  U6, U7 – MAX4619CPE 
  U8 – LM358 
  U9 – ATMEL AT90S2313-10PC 
  U10 – ATMEL ATMEGA88 
    

Alimentación

  • V máx: simple 12 Vdc
  • I  máx: 1A

Dispositivo electrónico de programación willem

Dispositivo electrónico
de
programación willem

En esté proyecto vamos a realizar un dispositivo electrónico de programación como es el willem, diseñado para programar micro-controladores y memorias eeprom.

Desde hace largo tiempo el programador Willem ha sido uno de los mas populares programadores de memorias Eprom, con el tiempo este programador fue evolucionando y soportando una gran variedad de tipos de memorias y microcontroladores, se han hecho multitud de variaciones en el diseño original del mismo, en la web del fabricante Sivava (www.sivava.com).

Dispositivo electrónico de programación willem
Vista de los componentes del willem

Descripción de dispositivo electrónico de programación willem

Como se muestra en la se puede ver el circuito terminado y las partes del programador el cual cuenta con:

  1. Un socket ZIF32 (del inglés Zero Insertion Force) de la marca 3M el cual se utiliza para colocar los diferentes tipos de chip (circuito integrado (CI)) a programar.
  2. Tres zócalo DIP8 (Dual in-line package por sus siglas en inglés) para memorias 24xxx, 93xxx y 25xxx.
  3. Zócalo DIP18 para Microcontroladores PIC de la serie 10,12 y 16.
  4. Conector DB25 (del inglés D-subminiature) Macho el cual se utiliza para la conexión a la computadora.
  5. Un conector tipo Jack (conector) Macho para la conexión de la fuente de alimentación externa entre 15 y 20 volt de Corriente Alterna como mínimo.
  6. Un DIPSWITCH de doce posiciones para seleccionar según el tipo de memoria a programar los datos a transferir a la misma. Tres diodos Leds los cuales indican.
  7. Power (Led Verde).
  8. Rojo led (Vpp).
  9. Amarillo led (Vdd).
  10. Varios Jumpers (J1..J5) los cuales se usan para seleccionar los ajustes correspondientes como se muestra.
  11. DIP-SWITCH de cuatro posiciones los cuales sirven para ajustar los voltajes de Vpp entre 12, 15, 21 y 25 volt, además Vdd entre 5, 5.7 y 6.2 volt.

Configuración jumpers

Configuración de los jumpers

Utilización

Este programador suporta una gran cantidad de memorias EPROMS, EEPROMS, SERIALES, FLAHS, Microcontroladores (ATMEL, Microchip, Intel, Etc.) y son soportados directamente sin adaptadores, alguno de los mismos son muy utilizados como los Microcontroladores PIC (aunque generalmente se utiliza como Peripheral Interface Controller (controlador de interfaz periférico)) de todas las diferentes series.

En relación costo beneficio es excelente porque se puede hacer casi totalmente con componentes reciclados de partes de equipos antiguos y placas descontinuadas que tengan en su poder en cambio podrán programar casi cualquier tipo de chip. 

Automotor ECU tuning, reset de airbag, kilometraje, dispositivos satélites, flasheo de BIOS, Flasheo de BIOS, xBox, duplicación de eeprom de consolas como Wii, Altera Xilinx JTAG, PIC/MCU, etc..

descargas de los archivos del proyecto

Programador Willem
Esquema willem_SCH
Placa willem_PCB3
Configuraciones_overlay

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