A partir de la versión 0.5.6 de la librería RPi.GPIO es posible utilizar rutinas de interrupción externas. Como los usuarios de microcontroladores experimentados deben saber, una rutina de interrupción permite ejecutar una o una serie de instrucciones sin perder tiempo en bucles de lectura. Es decir que si el procesador se encuentra ejecutando una tarea, éste pausará el proceso en curso y ejecutará la rutina de interrupción ante un flanco de subida o bajada ocurrido en un pin GPIO. Si no has comprado tu Raspberry recientemente y no has actualizado su software es recomendable hacerlo:
sudo apt-get update
sudo apt-get upgrade #(Esto podría tardar hasta más de una hora)
El siguiente código es un ejemplo sencillo sobre el uso de interrupciones. Tenemos dos rutinas de interrupción CuentaA() y CuentaB() asociadas a GPIO23 y GPIO24 respectivamente. Cada una incrementan una variable de conteo y muestran el resultado en consola. El programa se detiene cuando el contador A es mayor o igual a 5. Para más detalles sobre interrupciones pueden revisar la documentación de la librería RPi.GPIO. Para evitar el el efecto de rebote se utilizan capacitores de entre 22 o 10 uF conectados en paralelo con las resistencias pulldown de 10K como se muestra en el circuito [aunque también puede utilizarse un debounce vía software agregando el argumento bouncetime=200 a la función add_event_detect()]:
import RPi.GPIO as GPIO
import os
contaA = 0
contaB = 0
#Setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(23,GPIO.IN)
GPIO.setup(24,GPIO.IN)
#Callbacks
def CuentaA(channel):
global contaA
contaA += 1
os.system("clear")
print "Contador A: ", contaA
print "Contador B: ", contaB
def CuentaB(channel):
global contaB
contaB += 1
os.system("clear")
print "Contador A: ", contaA
print "Contador B: ", contaB
#Interrupciones
GPIO.add_event_detect(23, GPIO.RISING, callback = CuentaA)
GPIO.add_event_detect(24, GPIO.RISING, callback = CuentaB)
print "Contador A: ", contaA
print "Contador B: ", contaB
#Bucle principal
while(contaA < 5):
pass
GPIO.cleanup()
lunes, 28 de septiembre de 2015
sábado, 19 de septiembre de 2015
jueves, 17 de septiembre de 2015
Filtro de Notch de 60 Hz
Debido a la restricción de los valores comerciales para los resistores y capacitores, este circuito tiene una frecuencia central de 58.94 Hz. Sin embargo, como se puede ver en una simulación, se tiene una atenuación de -34 dB (un factor de de 0.0004) para la componente de 60 Hz.
Para más detalles sobre este tipo de filtros pueden consultar éste artículo.
Para más detalles sobre este tipo de filtros pueden consultar éste artículo.
Etiquetas:
Electrónica,
Instrumentación Biomédica
domingo, 13 de septiembre de 2015
Circuito para electrocardiografía (ECG/EKG)
En este video utilizan un circuito con ganancia de 100 con buenos resultados (el cual no funcionó en mi caso), lo que me hace sospechar que existen varios factores que afectan el voltaje de entrada. Posiblemente este circuito no funcionará en condiciones diferentes por lo que recomiendo experimentar con diferentes valores de ganancia.
Un segundo circuito que también funciona muy bien es una modificación del que pueden encontrar en The Biosignal How-To:
Etiquetas:
Electrónica,
Instrumentación Biomédica
Suscribirse a:
Entradas (Atom)