Está en la página 1de 48

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

Programa
Ingeniería Electrónica

Asignatura
Instrumentación Médica

Trabajo Colaborativo Unidad 2

Presentado a:
Tutor
SAULO A. GÓMEZ

Presentado por:

ALVARO J. GOMEZ HERNANDEZ COD. 91297153


JAVIER ALEXANDER COLMENARES MOLINA
DAVID STIVEL NOY VERGARA COD. 81754732
MARCO ALEXANDER HERNANDEZ RAMIREZ COD. 81754413
ARMANDO ROSALES R

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA - UNAD


INSTRUMENTACIÓN MÉDICA 299016
INGENIERÍA ELECTRÓNICA
Mayo de 2012
TABLA DE CONTENIDO

1. INTRODUCCION

2. OBJETIVOS

3. MARCO TEORICO

4. DESARROLLO DEL PROBLEMA

5. CONCLUSIONES

6. BIBLIOGRAFIA
1. INTRODUCCIÓN

A través de este informe escrito, se presenta el desarrollo del segundo trabajo colaborativo-práctico, del curso
Instrumentación Médica, en el cual se plantea el diseño y programación de un sistema TENS y TEMS a partir de
un microcontrolador para la generación y aplicación de cinco tipos de forma de onda a pacientes médicos. Con
este trabajo se detalla y profundiza otro de los conceptos importantes en instrumentación médica como lo es
la electroterapia, tema fundamental contemplado en esta unidad de la materia.

Para comprender un poco sobre el tema debemos saber que Suele existir cierto nivel de
confusión o falta de claridad en las diferencias entre un TENS y un EMS.
El TENS es un pequeño aparato generador de pulsos eléctricos destinado a conseguir
analgesia. El EMS es otro pequeño aparato destinado al trabajo muscular en conjuntos
neuromúsculo normales.

El TENS está basado en sus precursores estimuladores chinos y portátiles para aplicar
ELECTROPUNTURA, a la vez buscadores de puntos. Los TENS no poseen la cualidad de
busca-puntos y tampoco siguen totalmente las características de las corrientes generadas en
los estimuladores de electropuntura. Los electropuntores no solamente sirven para conectar
a las agujas, también se pueden aplicar a electrodos estándar.
El EMS, de posterior aparición al TENS, y como se dice más arriba, se destina a la electro
estimulación neuromuscular siempre que no estemos ante procesos patológicos, o si existen,
que sean muy moderados.
2. OBJETIVOS

 Profundizar y practicar los conceptos de la Unidad 2 del Curso Instrumentación Médica, teniendo en
cuenta la importancia de la electroterapia para el campo medico.

 Identificar y comprender la importancia de realizar un buen diseño debido a que la instrumentación de


medida de electroterapia ha de ser aplicada a pacientes médicos se debe realizar con sumo cuidado.

 Practicar y profundizar los conocimientos y la metodología a emplear en el circuito a implementar para


el correcto funcionamiento del sistema de generación de formas de ondas y trenes de pulsos, con los
requerimientos correctos, precisión y exactitud debida.

 Diseñar un prototipo de sistema microelectrónica móvil para el monitoreo de los signos vitales como
temperatura, y frecuencia cardiaca.
3. MARCO TEORICO

¿CÓMO ACTUA LA EEM (ELECTROESTIMULACION)?

La electricidad está en nuestro cuerpo, es utilizada para transmitir las órdenes del sistema nervioso. Para
entender la acción de la EEM debemos compararla a la acción muscular voluntaria. En una acción voluntaria el
sistema nervioso central envía un mensaje en forma de estímulo eléctrico hasta la placa motora que se halla en
el músculo y éste se contrae. La EEM envía el estímulo directamente a la placa motora y logra el mismo
resultado: la contracción de las fibras.

Algunos estudios recientes (LIEBER, 1996) demuestran que a una cantidad y naturaleza de trabajo idénticas,
sea hecho en voluntario o por EEM, el resultado para el músculo es el mismo.

La EEM permite hacer trabajar selectivamente el tipo de fibras musculares. El parámetro que permite
seleccionar el tipo de fibras a reclutar es la frecuencia del estímulo, se mide en Hercios “Hz”. La frecuencia
representa el número de impulsos por segundo. En función de la frecuencia (en Hz) aplicada, se obtienen
resultados distintos.

EFECTOS DE LAS DISTINTAS FRECUENCIAS


1 a 3 Hz - Tiene un efecto descontracturante y relajante, es ideal para contracturas musculares. Algunos electro
estimuladores lo denominan programa descontracturante. Provoca un efecto descontracturante en los grupos
musculares aplicados. La utilización médica de la EEM para disminuir el tono muscular existe desde hace años.
Este efecto descontracturante se mantiene varias horas después de la sesión de electro estimulación y permite
un mejor control de los movimientos efectuados. Está indicada su aplicación en molestias o dolores musculares
ocasionados por contracturas. Se puede utilizar en cualquier momento y si el dolor es importante o
persistente, se recomienda consultar a un médico.

4 a 7 Hz - Aumenta la segregación de endorfinas y encefalinas, logrando una disminución del dolor y la


ansiedad. En el electro estimulador se suele encontrar como programa de relajación o recuperación activa.
Logra un efecto endorfínico máximo (5 Hz) provocando una anestesia local natural, una disminución del dolor
(efecto antálgico) así como una relajación general de la musculatura y una disminución de la ansiedad. Facilita
el sueño. A 7 Hz se consigue un aumento del flujo sanguíneo y una hiperoxigenación. Su aplicación es idónea
para evitar calambres, re oxigenar tejidos, acelerar el retorno venoso, eliminar edemas y los metabolitos
acumulados.

8 a 10 Hz - El aumento del flujo sanguíneo es máximo, se multiplica por cinco. Los electro estimuladores suelen
tenerlo con el nombre de capilarización. Crea nuevos capilares, permite una restauración de los tejidos y un
verdadero drenaje venoso y parece ser que linfático. Al aumentar los capilares evita tener contracturas
musculares. Es particularmente eficaz para el cansancio localizado y en la disminución del lactato. Este
aumento del riego sanguíneo facilita la restauración de tejidos y, bajo consejo médico o fisioterapéutico, es de
gran ayuda en problemas articulares.

10 a 33 Hz - Recluta las fibras ST, lentas, (tipo I) y aumenta la resistencia de las mismas. Los electro
estimuladores tienen este programa con el nombre de resistencia aeróbica o firmeza muscular. “Las
investigaciones demuestran la transformación de fibras FTa, rápidas, (tipo IIa) en ST, lentas, (tipo I) con lo que
aumenta el VO2 localizado” L. W. STEPHENSON y otros 1987 Es idónea para el aumento del tono muscular y en
la mejora de la resistencia muscular localizada. Su aplicación para la mejora estética (abdominales o glúteos)
conjuntamente con un entrenamiento que gaste calorías, cardiovascular (correr, bicicleta,…) permite aunar
esfuerzos y aumentar el tono a la vez que se utiliza la grasa como mecanismo de energía.

33 a 50 Hz – Solicita fibras intermedias, concretamente las IIa. Logra el mayor aumento de resistencia a la
fatiga, es ideal para deportes de resistencia. En los electro estimuladores se encuentran estos programas con el
nombre de resistencia aeróbica o firmeza muscular a niveles altos. Proporciona un mayor aumento del tono
muscular sin desarrollar la musculatura. La sensación de potencia de contracción en grupos musculares
determinados (glúteos, aductores, abdominales,…) es inalcanzable con ejercicios voluntarios.

50 a 75 Hz – Se estimulan preferentemente las fibras intermedias tipo IIb, proporciona un aumento de la fuerza
y de la resistencia localizada. En los electro estimuladores hallamos los términos “body building” o fuerza-
resistencia. ”Los estudios que comparan la EEM con el entrenamiento voluntario muestran un mayor aumento
de la fuerza, de la potencia y de la muscular en la EEM y todo ello sin sobrecargar las articulaciones” G.
COMETTI, J. TUROSTOWSKI, M. CORDANO, 1999.

La hipertrofia es máxima a 70-75Hz y los resultados se pueden comprobar en pocas semanas, las
investigaciones así lo demuestran. Combinar el entrenamiento voluntario en sala de Fitness con la EEM en la
misma sesión, proporciona un eficaz aumento de volumen muscular y preserva las articulaciones. La EEM
posibilita aumentar determinadas zonas musculares difíciles de localizar con entrenamiento voluntario. “La
EEM selectiva del pectoral alto es indicada en todos los casos en los que es necesario estabilizar la clavícula
como la subluxación acromio-clavicular. En estas circunstancias la EEM tiene una ventaja con respeto a los
ejercicios voluntarios…Un buen campo eléctrico permite un aislamiento igual o mejor que el que se obtiene
con ejercicios convencionales” A. LANZANI, 2000

75 a 120 Hz – Consigue una supratetanización de las fibras FT, rápidas, (tipo IIm). Las mejoras en fuerza y
explosividad son mayores que las conseguidas con esfuerzos voluntarios y todo ello sin lesionar. Algunos
electro estimuladores tienen programas con el nombre de fuerza y fuerza explosiva. En determinados deportes
como el esquí alpino, el concepto de entrenamiento es reemplazar parte de la musculación clásica por la EEM.
Esta tendencia es seguida por otros deportes. Es así como en Italia, los equipos de voleibol disminuyen los
entrenamientos muy traumáticos de pliometría o musculación con cargas pesadas en provecho de la EEM. Las
lesiones han disminuido y los equipos italianos alinean jugadores con 110 cm de salto vertical. El fútbol es otro
deporte que se beneficia de las ventajas de entrenar con la EEM para proteger los ya castigados cartílagos
articulares.

”Es de crucial importancia para mejorar la fuerza en altas velocidades de contracción” (V. ORTIZ, 1996).

“Impone regímenes de actividad a las fibras musculares que habitualmente sólo se pueden conseguir de forma
voluntaria con esfuerzos brutales y de fuerza máxima, es decir, muy traumatizantes” (P. Rigaux, 1999)

Los electro estimuladores más avanzados tienen pues ya programados los Hercios para facilitar el uso y en
función de la frecuencia, poseen una terminología apropiada para la mejora del rendimiento deportivo (fuerza
explosiva, fuerza, fuerza-resistencia,…), la búsqueda de una mejora estética (firmeza muscular, body-
building,…), la recuperación funcional y la mejora de la calidad de vida (recuperación activa, capilarización,
relajación,…)

DIFERENCIA ENTRE TENS Y EMS

TENS EMS

Destinado a analgesia. Destinado a trabajo muscular.

Suelen tener 2 salidas. Suelen tener 2 salidas.

Intensidad hasta 50 mA. Intensidad hasta 80 ó 100 mA.

Modos de trabajo en burst, FF frecuencia fija y Modos de trabajo en trenes (algunos ofrecen la
modulaciones (algunos ofrecen una opción de trenes). posibilidad de frecuencia fija FF).

Frecuencia regulable entre 1 a 150 ó 200 Hz. Frecuencia regulable entre 10 a 100 Hz (algunos
ofrecen frecuencia por debajo de 10 Hz).

El tiempo de sesión tiende a ser relativamente largo (15, El tiempo de sesión tiende a ser más corto que en el
20, 30 minutos). TENS (10, 15, 20 minutos).

En modulaciones pueden modularse la anchura de pulso No tiene modulaciones.


AP, modulaciones en amplitud AM, y modulaciones de
frecuencia MF.

En las modulaciones de frecuencia, debiéramos tener la


opción de ajustar sus límites con FRECUENCIA MENOR y
FRECUENCIA MAYOR.

Algunos (raros) ofrecen posibilidad de trenes. Los trenes son regulables entre 1 y 20 segundos. Las
pausas entre trenes son regulables desde 1 a 60
segundos.

La RAMPA de subida del tren debe regularse para


que se establezca más o menos bruscamente. Unos
ajustan el tiempo de subida y otros un porcentaje
del tiempo ocupado por el tren.

Los BURST son pequeñas ráfagas, 2 por segundo, que Es muy interesante que los ENS posean frecuencia
pueden utilizarse para vibración muscular. fija muy baja (entre 1 y 10 Hz) para aplicar
vibraciones musculares.

Suelen alimentarse con una pila de 9 Volt. Suelen alimentarse con una o dos pilas de 9 Volt.

Algunos ofrecen la opción de que los trenes surjan


simultáneamente por ambas salidas o que se
alternen para trabajar los antagonistas cuando los
agonistas se relajan.

Trabajan en voltaje constante (VC). Trabajan en voltaje constante (VC).

Las formas de pulso pretenden ser monofásicas Las formas de pulso pretenden ser monofásicas
cuadrangulares con algún pico negativo procedente de cuadrangulares con algún pico negativo procedente
las deformaciones propias de los transformadores de de las deformaciones propias de los
salida. transformadores de salida. Algunos poseen ondas
cuadrangulares bifásicas digitales. En general los
EMS cuidan más las ondas de salida.

Los electrodos suelen ser pequeños e iguales. Es importante que el tamaño de electrodos sea
variado para combinarlos y adaptarlos a los
diferentes músculos y métodos de estimulación.

Los TENS suelen ser más baratos. Los EMS suelen ser bastante más caros, sin causa
tecnológica razonable, salvo que se venden menos.
(Debieran ser algo más caros).
Con el TENS no se debe superar las respuestas motoras Con el EMS se supera el umbral motor para tonificar
salvo cuando se genere alternancia en el trabajo y potenciar musculatura, excepto cuando se aplique
muscular. frecuencia fija, que solamente debe quedarse en
estímulo sensitivo.

El TENS se destina al estímulo de fibras nerviosas El EMS se destina al estímulo de fibras nerviosas
sensitivas. motoras.

Tiempo de pulso regulable entre 0,05 a 0,3 msg Tiempo de pulso regulable entre 0,1 a 0,75 msg (dos
(pasando por toda la gama). o tres opciones).

DURACIÓN DE LOS PULSOS

Es fundamental combinar la forma, la intensidad y la duración de los pulsos, ya que (dependiendo de la


normalidad o patología del conjunto neuromuscular) las respuestas serán diferentes en cada circunstancia. La
exploración de las curvas (I/T) - (A/T) nos indicarán el estado y los mejores parámetros para utilizar en
tratamientos e, igualmente, para diseñar las corrientes que pretendemos utilizar. En las siguientes figuras
podemos observar las curvas características de normalidad y de severa denervación parcial:
l

Por otra parte, es interesante saber que de estos fenómenos se basan los generadores de estímulos eléctricos
destinados a estimulación transcutánea. Así los TENS ofrecen una gama de tiempos algo diferente a los EMS o a
los estimuladores estándar.

Los TENS y los EMS poseen una gama de pulsos pensados para estímulo de las fibras nerviosas
.

Los faradizadores estándar deben estimular tanto a fibra nerviosa como a muscular.

Los estimuladores clásicos (además de cubrir las posibilidades de los anteriores) amplían sus posibilidades para
poder tratar las parálisis con su banda de anchura en los pulsos característica.
Todo esto se ha referido a baja frecuencia, pero también aplicamos media y alta.

CLASIFICACIÓN DE LAS CORRIENTES

Las corrientes en electroterapia podemos clasificarlas de varias formas:

 Según metodología
 Según los efectos generados
 Según las frecuencias
 Según las formas

Según metodología

Todas las corrientes se aplican en general de acuerdo a cuatro métodos regulables en los equipos:

 Como pulsos aislados


 En ráfagas o trenes
 Frecuencia fija
 Modulaciones o cambios constantes y repetitivos

Según los efectos generados

Cuando aplicamos electroterapia en todas sus posibilidades podemos buscar efectos de:

 Cambios bioquímicos
 Estímulo sensitivo en fibra nerviosa
 Estímulo motor en fibra nerviosa o fibra muscular
 Aporte energético para que el organismo absorba la energía y la aproveche en sus cambios
metabólicos.

Según las frecuencias

 Baja frecuencia.- de 0 a 1000 Hz (aproximadamente)


 Media frecuencia.- de 2.000 a 10.000 Hz
 Alta frecuencia.- de 500.000 hasta el límite de las radiaciones no ionizantes en los ultravioletas tipo UV-
A.

Los límites de la baja frecuencia son muy relativos y depende de unos aparatos a otros. Algunos de baja
(combinando pulsos con reposos) generan corrientes consideradas de media frecuencia, mientras que otros no
van más allá de los 200 Hz.

La banda de media frecuencia es muy amplia, pero en la actualidad únicamente se emplean desde los 2.000
hasta los 10.000 Hz.

En alta frecuencia aplicamos puntos concretos de la banda, aunque disponemos de un espectro muy amplio,
solamente podemos usar puntos controlados por la legislación.

Según las formas

Además de lo aclarado anteriormente en la introducción, referente a baja frecuencia, debemos clasificar las
corrientes en grandes grupos en lugar de dispersarlas para estudiarlas de una en una porque ello conducirá a
confusión:

 Galvánica
 Interrumpidas galvánicas
 Alternas
 Interrumpidas alternas
 Moduladas

Galvánica

La galvánica tiene polaridad, es única en su grupo y se destina a provocar cambios electroquímicos en el


organismo.

Interrumpidas galvánicas

Todas aquellas que están conformadas por pulsos positivos o negativos, pero todos en el mismo sentido, luego,
poseen polaridad. Los pulsos pueden ser de diferentes formas y frecuencias, así como agrupados en trenes,
impulsos aislados, modulados o frecuencia fija. Son las más características de la baja frecuencia. Veamos
algunos ejemplos:

Alternas

Reciben el nombre de alternas porque su característica fundamental se manifiesta en el constante cambio de


polaridad, en consecuencia, no poseen polaridad. La forma más característica es la sinusoidal perfecta de
mayor o menor frecuencia, empleada en media y alta frecuencia. Existen otras corrientes cuya forma no es la
típica sinusoidal, sino que pueden dibujarse como cuadrangulares, triangulares, etcétera, pero que, aunque
siguen manteniendo la alternancia en la polaridad, realmente se les denomina como bifásicas.
Interrumpidas alternas

En este grupo entran un gran conjunto de corrientes no bien definidas y difíciles de clasificar, pero que
normalmente consisten en aplicar interrupciones en una alterna para formar pequeñas ráfagas o paquetes
denominados pulsos. Es muy frecuente encontrar estos pequeños paquetes de alterna en magnetoterapia, alta
frecuencia, pulsos de láser, media frecuencia e incluso en algunos TENS.
Moduladas

Las moduladas son corrientes que están sufriendo cambios constantes durante toda la sesión. Pueden
pertenecer al grupo de las interrumpidas galvánicas o al de las alternas. Las modulaciones más habituales son
las de amplitud, modulaciones en frecuencia y modulaciones en anchura de pulso.

Por lo que se refiere a la forma de la modulación, en media frecuencia las más habituales son la sinusoidal y la
cuadrangular.
1. DESARROLLO DEL PROBLEMA
DISEÑO N° 1

El grupo debe desarrollar el software de programación de un microcontrolador PIC16F87 en


lenguaje asembler, simulado con Proteus, aplicado al modulo de puente H de un equipo de
electroterapia del capítulo 10, numeral 10.5 para generar las ondas electro terapéuticas de
las figuras 121 a 125.
Para iniciar el diseño del circuito que pueda aplicar los tipos de onda dispuestos para el
equipo TENS y TEMS, debemos disponer como primera medida que son cuatro tipos de
onda que se deben generar. Para ello contamos con los programas: Proteus Ver. 7.7 SP2,
con licencia autorizada para este servidor, con sus paquetes Isis y Ares. El programa MPLAB
IDE Ver. 8.84.00, paquete libre de Microchip, el cual nos permite programar en lenguaje
ensamblador, y el software freeware PIC C Compiler, Ver. 4.104, el cual nos permite realizar
la programación inicial en lenguaje C, compilar y enlazar con MPLAB para realizar
ensamblado y desensamblado del programa, y generación del archivo hexadecimal, que es
el archivo que finalmente se debe vincular con el microcontrolador a simular en el pad de
trabajo de Proteus. Estos paquetes ya los tenemos instalados y disponibles con motivo del
trabajo de la Unidad 1.
Hecho esto, y conocidas las características técnicas del dispositivo, y set de instrucciones,
procedemos a ubicar dentro de Proteus el microcontrolador PIC16F877, con su respectiva
fuente de poder a 5 Volts. DC, su reloj interno con un cristal a 4 MHz, y un par de
condensadores a tierra de 15 pF cada uno.
Como ya hemos tenido acceso a la estructura del programa en lenguaje C, directivas,
funciones y conjunto de instrucciones a emplear en este programa, procedemos a realizar la
programación en lenguaje C. Debemos definir tipos de datos, constantes, declaraciones de
control, variables, y operadores a emplear que nos definan cada tipo de forma de onda a
generar de manera individual.
Junto a lo anterior debemos analizar el circuito o aplicación a realizar. Una de las
características más importantes del equipo generador de pulsos para TENS y TEMS, es que
la botonera o mando en donde se escoja el tipo de onda, debe dar una orden única, y se
garantice la independencia de las funciones. Se debe evitar generar mezcla de ondas. Por
tanto el tipo de función que usaremos en el programa debe ser exclusiva o excluyente, de tal
manera que si el usuario presiona más de un botón o tipo de onda, la salida se haga cero o
quede deshabilitada. En este orden de ideas, los pulsadores que hemos usado en el
programa –cuatro-, también se pueden usar con retención. Simplemente en el momento de
activarlos con el puntero del mouse, se pulsa la tecla de espaciado en el mismo instante y el
pulsador queda retenido, o se utiliza el punto rojo de activación que está al lado derecho
superior de cada botón como podemos observar en la siguiente imagen del pad de Proteus.
Para el ajuste variable, dinámico y en tiempo real de la duración de los pulsos, disponemos
un potenciómetro RV1, con el cual podemos establecer el ajuste de los tiempos de trabajo
Ton y descanso Toff, para ello habilitamos la primera entrada analógica RA0, y el conversor
DAC de 8 bits, y con el podemos guardar constantemente el valor de la entrada, como
realizamos en trabajo de Unidad 1, para adquirir la variable de temperatura. En la
configuración que habíamos realizado, obteníamos una variable con extrusión entre 0 y 5,
que guardamos en la variable p, garantizando su valor máximo, en 5 milisegundos. Pero de
igual manera se pueden establecer memorias para alterar el tiempo, utilizando
multiplicadores/demultiplicadores, para ajustar a las lecturas correctas y exactas de las
formas de onda en el osciloscopio. Tal es el caso de la variables on, off, y off2.
Por tanto el programa en lenguaje C queda así (se adjunta el archivo .C):
#if defined(__PCM__)
#include <16f877.h> //se determina el modelo de PIC
#device ADC=8 //se ajusta el ADC con 8 bits
#use delay(clock = 4000000) //se ajusta el oscilador
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use standard_io(A)
#use standard_io(B)
int valor=0x00; //se inicializa la memoria valoron
int p; //se declara variable para tiempo on
int on;
int off;
int off2;
void toma_adc(void) //programa de toma de ADC
{
setup_adc(ADC_CLOCK_INTERNAL); //configura el conversor
setup_adc_ports(RA0_analog); //entrada 0 como analógica
set_adc_channel(0);
valor=read_adc(); //se asocia la lectura con la memoria valor
}
void main() //programa principal
{
do
{
p = (5.0*valor/256.0); //se establece formula de valor
on = (p*1.4);
off = (p*4.25);
off2 = (p*0.4);
if ((input(PIN_A2) == 1)&&(input(PIN_A3) == 0)&&(input(PIN_A4) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
delay_ms(off);
}
if ((input(PIN_A3) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A4) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B1);
delay_ms(on);
output_low(PIN_B1);
delay_ms(off);
}
if ((input(PIN_A4) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A3) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
delay_ms(off2);
}
if ((input(PIN_A5) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A3) == 0)&&(input(PIN_A4) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
output_high(PIN_B1);
delay_ms(on);
output_low(PIN_B1);
delay_ms(off);
}
toma_adc();
}
while(true);
}
Y el código Assembler a tres columnas, queda así (se adjunta el archivo .asm):
0000: DECF 0x17,F L006C
L0001 SUBWF L0038 ADDWF L006D
0xA,W 0x18,F IORLW 0xB1
L0002 ADDWF 0x19,F IORLW 0xFA
NOP ADDWF 0x1A,F L0071 IORLW 0xF9
DECF 0x17,F RETLW 0x26 IORLW 0xF8
RETLW 0x26 SUBWF 0x11,F L0073 INCFSZ
DECF 0x18,F L003D 0x17,F
RETLW 0x25 RETLW 0x27 L0074
DECF 0x19,F SUBWF 0x10,F L0078 GOTO L00FA
ADDWF 0x1A,F RETLW 0x28 L007A
RETLW 0xF8 L0041 SUBWF L007B GOTO L00F9
RETLW 0x79 0xF,F L007C
L000F DECF 0x18,F SUBWF 0xD,F L007E GOTO L00F8
ADDWF 0x19,F L0044 XORWF MOVLW 0xF8
DECFSZ 0x17,F 0xE,F MOVLW 0xF9
RETLW 0xF8 L0047 RETLW 0x2C MOVLW 0xFA
L0015 BTFSS 0x1A,7 GOTO L00F7
ADDWF 0x17,F L004A L0085
L0017 GOTO L00F9 L0086
L0018 L004C RETLW 0x26
L001A L004D SUBWF 0xE,F
IORLW 0xF9 GOTO L00F8 RETLW 0x2A
IORLW 0xF8 L004F BTFSC 0xE,5
INCFSZ 0x17,F RETLW 0x2B L008B
??? BTFSS 0x19,7 L008D
RETLW 0x25 GOTO L00F8 L0091 ADDWF
L0022 L0056 0x17,F
L0023 L0058 RETLW 0x2A L0092 ADDWF
SUBWF 0xD,F SUBWF 7,F 0x18,F
RETLW 0x29 L005A ADDWF 0x19,F
L0026 RETLW 0x27 L0094 ADDWF
L0027 BTFSS 0x18,7 0x1A,F
BTFSS 0xD,5 IORLW 0xAE ???
L002A MOVLW 0xF8 RETLW 0x29
INCF 0xD,F L0061 MOVLW 0xF9 L0097
L002D MOVLW 0xFA L0098
L002F MOVLW 0xB1 SUBWF 0x15,F
L0031 MOVLW 0xB0 RETLW 0x2D
BTFSS 0xD,5 MOVLW 0xAF L009B
L0035 GOTO L00AD
RETLW 0x2D BTFSS 0x17,7
L009C BTFSS 0x12,5 IORLW 0xB4
INCF 0x15,F RETLW 0x30 RETLW 0x30
BTFSS 0x15,5 L00DE BTFSS INCF 0x11,F
L00A3 0x11,5 INCF 0x12,F
L00A5 L00E0 INCF 0x13,F
INCF 0x15,F GOTO L00B2 INCF 0x14,F
L00A8 L00E3 RETLW 0x2F
L00A9 GOTO L00B3 INCF 0x12,F
L00AA L00E6 INCF 0x13,F
RETLW 0x35 GOTO L00B4 INCF 0x14,F
DECF 0x17,F L00E8 RETLW 0x2E
ADDWF 0x18,F RETLW 0x2E INCF 0x13,F
ADDWF 0x19,F INCF 0x13,F INCF 0x14,F
ADDWF 0x1A,F INCF 0x14,F GOTO L00FA
XORWF 0x14,F GOTO L00B4 GOTO L00F9
RETLW 0x2A RETLW 0x2E GOTO L00F8
L00B2 SUBWF BTFSS 0x13,5 GOTO L00F7
0x13,F RETLW 0x2F MOVLW 0xF8
L00B3 L00F7 BTFSS MOVLW 0xF9
L00B4 RETLW 0x2B 0x12,5 MOVLW 0xFA
SUBWF 0x12,F L00F8 RETLW 0x2A
RETLW 0x2C L00F9 SUBWF
SUBWF 0x11,F L00FA GOTO 0x15,F
SUBWF 0x15,F L00B3 RETLW 0x2E
RETLW 0x30 GOTO L00B4 BTFSC
INCF 0x11,F GOTO L00B5 0x15,5
INCF 0x12,F IORLW 0xB1 ADDWF
INCF 0x13,F IORLW 0xB2 0x17,F
INCF 0x14,F IORLW 0xB3 ADDWF
GOTO L00B4 IORLW 0xB4 0x18,F
GOTO L00B3 IORLW 0xFA ADDWF
GOTO L00B2 IORLW 0xF9 0x19,F
RETLW 0x30 IORLW 0xF8 ADDWF
BTFSS 0x11,5 IORLW 0xB6 0x1A,F
L00CD MOVLW 0xF8
RETLW 0x2F MOVLW 0xF9
INCF 0x12,F MOVLW 0xFA
INCF 0x13,F MOVLW 0xB6
INCF 0x14,F INCFSZ 0x17,F
GOTO L00B4 IORLW 0xB1
GOTO L00B3 IORLW 0xB2
RETLW 0x2F IORLW 0xB3
DECF 0x17,F SUBWF 0xA,F SUBWF 7,F
RETLW 0x25 RETLW 0x77 L0205 RETLW
DECFSZ 0x17,F SUBWF 9,F 0x78
RETLW 0x26 RETLW 0x77 SUBWF 6,F
DECF 0x19,F SUBWF 5,F RETLW 0x77
RETLW 0x27 RETLW 0x78 SUBWF 5,F
DECF 0x18,F SUBWF 6,F RETLW 0x78
RETLW 0xF7 RETLW 0x79 SUBWF 2,F
RETLW 0xF9 SUBWF 7,F XORWF 6,F
RETLW 0xF8 RETLW 0x7A RETLW 0x21
MOVLW 0xF9 SUBWF 8,F SUBWF 5,F
MOVLW 0xF8 SUBWF 0xC,F RETLW 0x7A
GOTO L00F7 RETLW 0x79 SUBWF 8,F
CALL L00F8 SUBWF 0xB,F RETLW 0x79
CALL L00F9 RETLW 0x78 SUBWF 7,F
GOTO L00F8 SUBWF 0xA,F RETLW 0x78
GOTO L00F9 RETLW 0x77 SUBWF 6,F
L0180 ??? SUBWF 9,F
SUBWF 4,W XORWF 0x10,F
RETLW 0 XORWF 0xF,F
DECF 0x18,F XORWF 0xE,F
ADDWF 0x17,F SUBWF 0xD,F
GOTO L00F7 RETLW 0x7A
GOTO L00F8 SUBWF 8,F
DECF 0x17,F RETLW 0x79
GOTO L00F7 SUBWF 7,F
GOTO L0080 RETLW 0x78
??? SUBWF 6,F
DECF 0x18,F RETLW 0x77
RETLW 0x1F SUBWF 5,F
BCF 0x18,3 RETLW 0x78
SUBWF 0x1F,W SUBWF 1,F
RETLW 0x1E XORWF 6,F
SUBWF 0,F RETLW 0x21
L01AD SUBWF 5,F
XORWF 4,W RETLW 0x7A
BSF 3,4 SUBWF 8,F
XORWF 0,F RETLW 0x79
L01B5 SUBWF 7,F
L01B6 RETLW 0x78
XORWF 6,F L01F7 SUBWF
RETLW 0x20 6,F
SUBWF 5,F L01F8 RETLW
XORWF 8,F 0x77
XORWF 7,F SUBWF 5,F
SUBWF 6,F SUBWF 0xC,F
SUBWF 5,F SUBWF 0xB,F
RETLW 0x7A SUBWF 0xA,F
SUBWF 0xC,F SUBWF 9,F
RETLW 0x79 RETLW 0x7A
SUBWF 0xB,F SUBWF 8,F
RETLW 0x78 RETLW 0x79
RETLW 0x77
SUBWF 5,F
XORWF 0xC,F
XORWF 0xB,F
SUBWF 0xA,F
SUBWF 9,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
RETLW 0x78
SUBWF 3,F
XORWF 6,F
RETLW 0x21
SUBWF 5,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
SUBWF 0xC,F
SUBWF 0xB,F
SUBWF 0xA,F
SUBWF 9,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
RETLW 0x78
SUBWF 4,F
L0252
RETLW 0x22
SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L026C
L0274
RETLW 0x22
L0285 SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L028E
L0296
L029B
RETLW 0x22
SUBWF 5,F
RETLW 0x24
SUBWF 5,F
L02B0
L02B8
L02BD
RETLW 0x22
SUBWF 5,F
RETLW 0x22
SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L02DD
L02DE
CLRF 3
2007: 3F71
1. DESARROLLO DEL PROBLEMA
DISEÑO N° 1

El grupo debe desarrollar el software de programación de un microcontrolador PIC16F87 en


lenguaje asembler, simulado con Proteus, aplicado al modulo de puente H de un equipo de
electroterapia del capítulo 10, numeral 10.5 para generar las ondas electro terapéuticas de
las figuras 121 a 125.
Para iniciar el diseño del circuito que pueda aplicar los tipos de onda dispuestos para el
equipo TENS y TEMS, debemos disponer como primera medida que son cuatro tipos de
onda que se deben generar. Para ello contamos con los programas: Proteus Ver. 7.7 SP2,
con licencia autorizada para este servidor, con sus paquetes Isis y Ares. El programa MPLAB
IDE Ver. 8.84.00, paquete libre de Microchip, el cual nos permite programar en lenguaje
ensamblador, y el software freeware PIC C Compiler, Ver. 4.104, el cual nos permite realizar
la programación inicial en lenguaje C, compilar y enlazar con MPLAB para realizar
ensamblado y desensamblado del programa, y generación del archivo hexadecimal, que es
el archivo que finalmente se debe vincular con el microcontrolador a simular en el pad de
trabajo de Proteus. Estos paquetes ya los tenemos instalados y disponibles con motivo del
trabajo de la Unidad 1.
Hecho esto, y conocidas las características técnicas del dispositivo, y set de instrucciones,
procedemos a ubicar dentro de Proteus el microcontrolador PIC16F877, con su respectiva
fuente de poder a 5 Volts. DC, su reloj interno con un cristal a 4 MHz, y un par de
condensadores a tierra de 15 pF cada uno.
Como ya hemos tenido acceso a la estructura del programa en lenguaje C, directivas,
funciones y conjunto de instrucciones a emplear en este programa, procedemos a realizar la
programación en lenguaje C. Debemos definir tipos de datos, constantes, declaraciones de
control, variables, y operadores a emplear que nos definan cada tipo de forma de onda a
generar de manera individual.
Junto a lo anterior debemos analizar el circuito o aplicación a realizar. Una de las
características más importantes del equipo generador de pulsos para TENS y TEMS, es que
la botonera o mando en donde se escoja el tipo de onda, debe dar una orden única, y se
garantice la independencia de las funciones. Se debe evitar generar mezcla de ondas. Por
tanto el tipo de función que usaremos en el programa debe ser exclusiva o excluyente, de tal
manera que si el usuario presiona más de un botón o tipo de onda, la salida se haga cero o
quede deshabilitada. En este orden de ideas, los pulsadores que hemos usado en el
programa –cuatro-, también se pueden usar con retención. Simplemente en el momento de
activarlos con el puntero del mouse, se pulsa la tecla de espaciado en el mismo instante y el
pulsador queda retenido, o se utiliza el punto rojo de activación que está al lado derecho
superior de cada botón como podemos observar en la siguiente imagen del pad de Proteus.
Para el ajuste variable, dinámico y en tiempo real de la duración de los pulsos, disponemos
un potenciómetro RV1, con el cual podemos establecer el ajuste de los tiempos de trabajo
Ton y descanso Toff, para ello habilitamos la primera entrada analógica RA0, y el conversor
DAC de 8 bits, y con el podemos guardar constantemente el valor de la entrada, como
realizamos en trabajo de Unidad 1, para adquirir la variable de temperatura. En la
configuración que habíamos realizado, obteníamos una variable con extrusión entre 0 y 5,
que guardamos en la variable p, garantizando su valor máximo, en 5 milisegundos. Pero de
igual manera se pueden establecer memorias para alterar el tiempo, utilizando
multiplicadores/demultiplicadores, para ajustar a las lecturas correctas y exactas de las
formas de onda en el osciloscopio. Tal es el caso de la variables on, off, y off2.
Por tanto el programa en lenguaje C queda así (se adjunta el archivo .C):
#if defined(__PCM__)
#include <16f877.h> //se determina el modelo de PIC
#device ADC=8 //se ajusta el ADC con 8 bits
#use delay(clock = 4000000) //se ajusta el oscilador
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use standard_io(A)
#use standard_io(B)
int valor=0x00; //se inicializa la memoria valoron
int p; //se declara variable para tiempo on
int on;
int off;
int off2;
void toma_adc(void) //programa de toma de ADC
{
setup_adc(ADC_CLOCK_INTERNAL); //configura el conversor
setup_adc_ports(RA0_analog); //entrada 0 como analógica
set_adc_channel(0);
valor=read_adc(); //se asocia la lectura con la memoria valor
}
void main() //programa principal
{
do
{
p = (5.0*valor/256.0); //se establece formula de valor
on = (p*1.4);
off = (p*4.25);
off2 = (p*0.4);
if ((input(PIN_A2) == 1)&&(input(PIN_A3) == 0)&&(input(PIN_A4) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
delay_ms(off);
}
if ((input(PIN_A3) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A4) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B1);
delay_ms(on);
output_low(PIN_B1);
delay_ms(off);
}
if ((input(PIN_A4) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A3) == 0)&&(input(PIN_A5) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
delay_ms(off2);
}
if ((input(PIN_A5) == 1)&&(input(PIN_A2) == 0)&&(input(PIN_A3) == 0)&&(input(PIN_A4) ==
0))
{
output_high(PIN_B0);
delay_ms(on);
output_low(PIN_B0);
output_high(PIN_B1);
delay_ms(on);
output_low(PIN_B1);
delay_ms(off);
}
toma_adc();
}
while(true);
}
Y el código Assembler a tres columnas, queda así (se adjunta el archivo .asm):
0000: DECF 0x17,F L006C
L0001 SUBWF L0038 ADDWF L006D
0xA,W 0x18,F IORLW 0xB1
L0002 ADDWF 0x19,F IORLW 0xFA
NOP ADDWF 0x1A,F L0071 IORLW 0xF9
DECF 0x17,F RETLW 0x26 IORLW 0xF8
RETLW 0x26 SUBWF 0x11,F L0073 INCFSZ
DECF 0x18,F L003D 0x17,F
RETLW 0x25 RETLW 0x27 L0074
DECF 0x19,F SUBWF 0x10,F L0078 GOTO L00FA
ADDWF 0x1A,F RETLW 0x28 L007A
RETLW 0xF8 L0041 SUBWF L007B GOTO L00F9
RETLW 0x79 0xF,F L007C
L000F DECF 0x18,F SUBWF 0xD,F L007E GOTO L00F8
ADDWF 0x19,F L0044 XORWF MOVLW 0xF8
DECFSZ 0x17,F 0xE,F MOVLW 0xF9
RETLW 0xF8 L0047 RETLW 0x2C MOVLW 0xFA
L0015 BTFSS 0x1A,7 GOTO L00F7
ADDWF 0x17,F L004A L0085
L0017 GOTO L00F9 L0086
L0018 L004C RETLW 0x26
L001A L004D SUBWF 0xE,F
IORLW 0xF9 GOTO L00F8 RETLW 0x2A
IORLW 0xF8 L004F BTFSC 0xE,5
INCFSZ 0x17,F RETLW 0x2B L008B
??? BTFSS 0x19,7 L008D
RETLW 0x25 GOTO L00F8 L0091 ADDWF
L0022 L0056 0x17,F
L0023 L0058 RETLW 0x2A L0092 ADDWF
SUBWF 0xD,F SUBWF 7,F 0x18,F
RETLW 0x29 L005A ADDWF 0x19,F
L0026 RETLW 0x27 L0094 ADDWF
L0027 BTFSS 0x18,7 0x1A,F
BTFSS 0xD,5 IORLW 0xAE ???
L002A MOVLW 0xF8 RETLW 0x29
INCF 0xD,F L0061 MOVLW 0xF9 L0097
L002D MOVLW 0xFA L0098
L002F MOVLW 0xB1 SUBWF 0x15,F
L0031 MOVLW 0xB0 RETLW 0x2D
BTFSS 0xD,5 MOVLW 0xAF L009B
L0035 GOTO L00AD
RETLW 0x2D BTFSS 0x17,7
L009C BTFSS 0x12,5 IORLW 0xB4
INCF 0x15,F RETLW 0x30 RETLW 0x30
BTFSS 0x15,5 L00DE BTFSS INCF 0x11,F
L00A3 0x11,5 INCF 0x12,F
L00A5 L00E0 INCF 0x13,F
INCF 0x15,F GOTO L00B2 INCF 0x14,F
L00A8 L00E3 RETLW 0x2F
L00A9 GOTO L00B3 INCF 0x12,F
L00AA L00E6 INCF 0x13,F
RETLW 0x35 GOTO L00B4 INCF 0x14,F
DECF 0x17,F L00E8 RETLW 0x2E
ADDWF 0x18,F RETLW 0x2E INCF 0x13,F
ADDWF 0x19,F INCF 0x13,F INCF 0x14,F
ADDWF 0x1A,F INCF 0x14,F GOTO L00FA
XORWF 0x14,F GOTO L00B4 GOTO L00F9
RETLW 0x2A RETLW 0x2E GOTO L00F8
L00B2 SUBWF BTFSS 0x13,5 GOTO L00F7
0x13,F RETLW 0x2F MOVLW 0xF8
L00B3 L00F7 BTFSS MOVLW 0xF9
L00B4 RETLW 0x2B 0x12,5 MOVLW 0xFA
SUBWF 0x12,F L00F8 RETLW 0x2A
RETLW 0x2C L00F9 SUBWF
SUBWF 0x11,F L00FA GOTO 0x15,F
SUBWF 0x15,F L00B3 RETLW 0x2E
RETLW 0x30 GOTO L00B4 BTFSC
INCF 0x11,F GOTO L00B5 0x15,5
INCF 0x12,F IORLW 0xB1 ADDWF
INCF 0x13,F IORLW 0xB2 0x17,F
INCF 0x14,F IORLW 0xB3 ADDWF
GOTO L00B4 IORLW 0xB4 0x18,F
GOTO L00B3 IORLW 0xFA ADDWF
GOTO L00B2 IORLW 0xF9 0x19,F
RETLW 0x30 IORLW 0xF8 ADDWF
BTFSS 0x11,5 IORLW 0xB6 0x1A,F
L00CD MOVLW 0xF8
RETLW 0x2F MOVLW 0xF9
INCF 0x12,F MOVLW 0xFA
INCF 0x13,F MOVLW 0xB6
INCF 0x14,F INCFSZ 0x17,F
GOTO L00B4 IORLW 0xB1
GOTO L00B3 IORLW 0xB2
RETLW 0x2F IORLW 0xB3
DECF 0x17,F SUBWF 0xA,F SUBWF 7,F
RETLW 0x25 RETLW 0x77 L0205 RETLW
DECFSZ 0x17,F SUBWF 9,F 0x78
RETLW 0x26 RETLW 0x77 SUBWF 6,F
DECF 0x19,F SUBWF 5,F RETLW 0x77
RETLW 0x27 RETLW 0x78 SUBWF 5,F
DECF 0x18,F SUBWF 6,F RETLW 0x78
RETLW 0xF7 RETLW 0x79 SUBWF 2,F
RETLW 0xF9 SUBWF 7,F XORWF 6,F
RETLW 0xF8 RETLW 0x7A RETLW 0x21
MOVLW 0xF9 SUBWF 8,F SUBWF 5,F
MOVLW 0xF8 SUBWF 0xC,F RETLW 0x7A
GOTO L00F7 RETLW 0x79 SUBWF 8,F
CALL L00F8 SUBWF 0xB,F RETLW 0x79
CALL L00F9 RETLW 0x78 SUBWF 7,F
GOTO L00F8 SUBWF 0xA,F RETLW 0x78
GOTO L00F9 RETLW 0x77 SUBWF 6,F
L0180 ??? SUBWF 9,F
SUBWF 4,W XORWF 0x10,F
RETLW 0 XORWF 0xF,F
DECF 0x18,F XORWF 0xE,F
ADDWF 0x17,F SUBWF 0xD,F
GOTO L00F7 RETLW 0x7A
GOTO L00F8 SUBWF 8,F
DECF 0x17,F RETLW 0x79
GOTO L00F7 SUBWF 7,F
GOTO L0080 RETLW 0x78
??? SUBWF 6,F
DECF 0x18,F RETLW 0x77
RETLW 0x1F SUBWF 5,F
BCF 0x18,3 RETLW 0x78
SUBWF 0x1F,W SUBWF 1,F
RETLW 0x1E XORWF 6,F
SUBWF 0,F RETLW 0x21
L01AD SUBWF 5,F
XORWF 4,W RETLW 0x7A
BSF 3,4 SUBWF 8,F
XORWF 0,F RETLW 0x79
L01B5 SUBWF 7,F
L01B6 RETLW 0x78
XORWF 6,F L01F7 SUBWF
RETLW 0x20 6,F
SUBWF 5,F L01F8 RETLW
XORWF 8,F 0x77
XORWF 7,F SUBWF 5,F
SUBWF 6,F SUBWF 0xC,F
SUBWF 5,F SUBWF 0xB,F
RETLW 0x7A SUBWF 0xA,F
SUBWF 0xC,F SUBWF 9,F
RETLW 0x79 RETLW 0x7A
SUBWF 0xB,F SUBWF 8,F
RETLW 0x78 RETLW 0x79
RETLW 0x77
SUBWF 5,F
XORWF 0xC,F
XORWF 0xB,F
SUBWF 0xA,F
SUBWF 9,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
RETLW 0x78
SUBWF 3,F
XORWF 6,F
RETLW 0x21
SUBWF 5,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
SUBWF 0xC,F
SUBWF 0xB,F
SUBWF 0xA,F
SUBWF 9,F
RETLW 0x7A
SUBWF 8,F
RETLW 0x79
SUBWF 7,F
RETLW 0x78
SUBWF 6,F
RETLW 0x77
SUBWF 5,F
RETLW 0x78
SUBWF 4,F
L0252
RETLW 0x22
SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L026C
L0274
RETLW 0x22
L0285 SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L028E
L0296
L029B
RETLW 0x22
SUBWF 5,F
RETLW 0x24
SUBWF 5,F
L02B0
L02B8
L02BD
RETLW 0x22
SUBWF 5,F
RETLW 0x22
SUBWF 5,F
RETLW 0x23
SUBWF 5,F
L02DD
L02DE
CLRF 3
2007: 3F71
DISEÑO N° 2

Con el diseño Numero 2, se realizan 8 Formas de onda diferentes con un periodo aproximado de duración de
30 minutos en los cuales se seleccionara inicialmente el tipo de onda y después se iniciara con el proceso de
terapia con un pulsador. También cuenta con dos pulsadores uno de ascenso de nivel y otro de descenso.

Arranca Sube
Baja
R2
10k

R1
R3
10k
10k
U1
16 17
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1
1
RA2/AN2/VREF A
4 2
RA5/MCLR RA3/AN3/CMP1
3
RA4/T0CKI/CMP2 A B
6
B
RB0/INT
7
Punto C C
RB1/RX/DT
8
D
RB2/TX/CK
9
E D
RB3/CCP1
10
F
RB4
11
RB5
12
G
RB6/T1OSO/T1CKI
13
RB7/T1OSI
PIC16F87

Forma de onda N° 1
Forma de onda N°2

Forma de Onda N° 3

Forma de Onda N° 4
Forma de onda N° 5

Forma de onda N°6


Forma de onda N° 7

A continuación se muestra la programación en C y el archivo en .Asm se encuentra en un block de notas con los
archivos adjuntos.

#include <16F628A.h>

#FUSES NOWDT // No para el Watch Dog Timer


#FUSES INTRC_IO // Reloj interno RC Osc, no CLKOUT

#FUSES NOPUT // No para el Power Up Timer

#FUSES NOPROTECT // No para protección de lectura del código

#FUSES NOBROWNOUT // No para el brownout reset

#FUSES MCLR // MCLR habilitado para Reset por botón

#FUSES NOLVP // No para programado por bajo voltaje. El Pin se usa como I/O

#FUSES NOCPD // No para proteción de lectura de EEprom

#use delay(clock=4000000) // Se informa la frecuencia del reloj

#use fast_io(A) // Para trabajar con la memoria

#use fast_io(B) // Para trabajar con la memoria

// = Números del registro (Memoria) que le corresponden

#bit Arranque = 0x005.1 // RA1 Señal de arranque

#bit OndaPositiva = 0x005.2 // RA2 Salida

#bit OndaNegativa = 0x005.3 // RA3 Salida

#bit PulsadorSube = 0x005.4 // RA4 Pulsador Sube (Entrada)

#bit PulsadorBaja = 0x005.0 // RA0 Pulsador Baja (Entrada)

#byte Mostrar = 0x006 // Todo PortB Salida al Display

void Display(void); // Muestra código de programa

void GenerarTrenPulsos(void); // Genera un tren de pulsos

void SesionCompleta(void); // Genera la sesión completa de por ejemplo 30 minutos

int PulsadorPulsado = 0; // Pulsador seleccionador de programa

int Programa; // Número del programa de 1 en adelante

long Ancho; // Ancho del pulso pos o neg en mseg, de 1 a 5

long Separacion; // Separación entre pulsos pos y neg en mseg, de 0 a 5

int Frecuencia; // Frecuencia de una Onda de 66 a 2 Hz

long Periodo; // Período de una onda se calcula a partir de la frecuencia

long Descanso; // Tiempo de descanso es 2000, 1500 o 1000 milisegundos


int Bifasica; // Selecciona Onda Bifásica

int t; // Contador de FOR

long Ciclos; // Contador de ciclos de sesión completa

long x; // Variable transitoria para cálculos

long y; // Variable transitoria para cálculos

long z; // Variable transitoria para cálculos

long Tiempo1; // Tiempo 1 de aplicación, de 1 a 30 minutos

long Tiempo2; // Tiempo 2 de aplicación, de 0 a 15 minutos

long Tiempo3; // Tiempo 3 de aplicación, de 0 a 15 minutos

int CantProgramas = 8; // Cantidad de programas usados

void main()

//////////// 76543210

set_tris_a(0b00010011); // 1 entrada 0 salida

set_tris_b(0b00000000); // 1 entrada 0 salida

OndaPositiva = 0; OndaNegativa = 0; // Arrancar en cero

Mostrar = 0b00000000; // Todos apagados

Programa = read_eeprom(0); // Lee de la EEPROM el valor de Programa. 0 es la dirección

Display(); // Muestra el número de programa seleccionado al arrancar

// Después de grabar el PIC no muestra Programa porque se borra la EEPROM

while(true)

if(PulsadorSube == PulsadorPulsado )

// La primera vuelta la da con el Programa de la EEPROM

delay_ms(800);

Programa = Programa + 1;
if (Programa > CantProgramas){Programa = 1;}

Display();

write_eeprom(0,Programa); // Escribe en la EEPROM el valor de Programa. 0 es la dirección

if(PulsadorBaja == PulsadorPulsado )

// La primera vuelta la da con el Programa de la EEPROM

delay_ms(800);

Programa = Programa - 1;

if (Programa < 1){Programa = CantProgramas;}

Display();

write_eeprom(0,Programa); // Escribe en la EEPROM el valor de Programa. 0 es la dirección

if (Arranque == 1) {delay_ms(800);SesionCompleta();}

//if (Arranque == 1) {GenerarTrenPulsos();} // Para Pruebas

void Display(void)

switch(Programa)

{ // ABCDEFG. letras de la barrita LED

case 1: Mostrar = 0b01100000;

Ancho=5;Separacion=0;Frecuencia=3;Descanso=3000;Bifasica=1;

Tiempo1=10;Tiempo2=10;Tiempo3=10; Periodo=1000/Frecuencia;break; // número 1

case 2: Mostrar = 0b11011010;

Ancho=5;Separacion=0;Frecuencia=5;Descanso=3000;Bifasica=1;
Tiempo1=10;Tiempo2=10;Tiempo3=10; Periodo=1000/Frecuencia;break; // número 2

case 3: Mostrar = 0b11110010;

Ancho=5;Separacion=0;Frecuencia=10;Descanso=3000;Bifasica=1;

Tiempo1=10;Tiempo2=10;Tiempo3=10; Periodo=1000/Frecuencia;break; // número 3

case 4: Mostrar = 0b01100110;

Ancho=1;Separacion=1;Frecuencia=255;Descanso=0;Bifasica=1;

Tiempo1=1;Tiempo2=0;Tiempo3=0; Periodo=1000/Frecuencia;break; // número 4

case 5: Mostrar = 0b10110110;

Ancho=333;Separacion=333;Frecuencia=1;Descanso=0;Bifasica=1;

Tiempo1=1;Tiempo2=0;Tiempo3=0; Periodo=1000/Frecuencia;break; // número 5

case 6: Mostrar = 0b10111110;

Ancho=100;Separacion=100;Frecuencia=3;Descanso=0;Bifasica=0;

Tiempo1=1;Tiempo2=0;Tiempo3=0; Periodo=1000/Frecuencia;break; // número 6

case 7: Mostrar = 0b11100100;

Ancho=10;Separacion=10;Frecuencia=33;Descanso=0;Bifasica=1;

Tiempo1=1;Tiempo2=0;Tiempo3=0; Periodo=1000/Frecuencia;break; // número 7

case 8: Mostrar = 0b11111110;

Ancho=100;Separacion=100;Frecuencia=3;Descanso=0;Bifasica=1;

Tiempo1=1;Tiempo2=0;Tiempo3=0; Periodo=1000/Frecuencia;break; // número 8

void SesionCompleta(void) // Genera la sesión completa de por ejemplo 30 minutos

// Tiempo1

Mostrar = 0b01100001; // número 1 con punto

x=Tiempo1*60*10;
y=(Descanso+1000)/100; //(Descanso+1000)=Período de un tren de pulsos

z=x/y;

for(Ciclos=1;Ciclos<=z;Ciclos++)

GenerarTrenPulsos();

// Descanso del tren de pulsos según programa elegido

delay_ms(Descanso);

// Tiempo2

Mostrar = 0b11011011; // número 2 con punto

// Descanso fijo = 2500

x=Tiempo2*60*10;

y=(2500+1000)/100; //(2500+1000)=Período de un tren de pulsos

z=x/y;

for(Ciclos=1;Ciclos<=z;Ciclos++)

GenerarTrenPulsos();

// Descanso del tren de pulsos. Descanso fijo de 2500 mseg

delay_ms(2500);

// Tiempo3

Mostrar = 0b11110011; // número 3 con punto

// Descanso fijo = 2000

x=Tiempo3*60*10;

y=(2000+1000)/100; //(2000+1000)=Período de un tren de pulsos

z=x/y;

for(Ciclos=1;Ciclos<=z;Ciclos++)
{

GenerarTrenPulsos();

// Descanso del tren de pulsos. Descanso fijo de 2000 mseg

delay_ms(2500);

Mostrar = 0b10001111; // carácter F (Final de los tiempos) con punto

void GenerarTrenPulsos(void)

for(t=1;t<=1000/Periodo;t++)

// Onda Positiva en un pulso

OndaPositiva = 1;

delay_ms(Ancho);

OndaPositiva = 0;

// Separación entre ondas en un pulso

delay_ms(Separacion);

// Onda Negativa

if (Bifasica == 1)

OndaNegativa = 1; delay_ms(Ancho); OndaNegativa = 0;

// Descanso en un pulso

delay_ms(Periodo-2*Ancho-Separacion);

else {delay_ms(Periodo-Ancho-Separacion);}

}
}
4. CONCLUSIONES

Esta es una de las temáticas más importantes en este curso, que se convierte en base para el desarrollo futuro
a lo largo de nuestras carreras, en la aplicación de las habilidades, conocimientos y competencias, para un buen
desempeño en el área profesional específica.

Si fuese requisito para el sistema poder manipular independientemente los tiempos de trabajo y descanso,
sería menester habilitar el segundo DAC, conversor análogo digital AN1 en RA1, para poder adquirir y ajustar
dos variables independientes para modo de aplicarlos a la variación de los tiempos Ton y Toff.

Como en la electroterapia es muy importante garantizar la seguridad al paciente, en cuanto a los tiempos de
ciclos de trabajo. Si bien sería nocivo y peligroso para el paciente soportar tensiones de más de 100 Volts. En
DC., por tiempos más prolongados, a los ya establecidos por estas formas y tipos de ondas, creo que es
conveniente, aunque se sacrifica un poco la linealidad del ajuste, el instalar en la entrada, entre el
potenciómetro de 5 Volts. Y el conversor DAC un circuito de protección en base a un zener de 5 Volts. De DC.,
que nos garantice que en presencia de ruido, de daño de la fuente, o daño del o los potenciómetros, la máxima
tensión fijada a la entrada del conversor o conversores nunca sea mayor a 5.

La forma correcta de ver la caída de tensión en la resistencia de carga en el puente H Mosfet, es como se
encuentra configurado el osciloscopio en la simulación. Sucede que los canales del osciloscopio, están
chequeando la caída de tensión entre el vivo –cable que se conecta- y la referencia o tierra del circuito, pero lo
que nos interesa es ver la caída de tensión en la resistencia de carga, la cual está simulando al paciente. Por
tanto se requiere, invertir el canal que se conecte a la derecha de la resistencia, y ese restárselo al canal que se
ubica a la izquierda de la resistencia. Así obtenemos la ddp en el tiempo sobre el paciente.

Pese a que no fue posible implementar el diseño en el microcontrolador PIC 16F87, debido a que al parecer no
se encontraba cargado en las librerías, se trabajo con el PIC 16F877, el cual es más generoso en características,
puertos y memoria, y si bien se pudiera decir que al realizarlo con este modelo se incurre en un desperdicio de
recursos, se puede aprovechar la disponibilidad de puertos adicionales, para instalar una pantalla o display en
el puerto RD para monitorear el tipo de señal escogida por el usuario y que se está produciendo, informar si se
ha pulsado más de un botón al tiempo -incluyendo un zumbador-, y el ajuste regulado en milisegundos de los
tiempos de trabajo y descanso, lo cual hace más interesante el ejercicio.

Falta la quinta forma de onda en donde se envían trenes de 5 pulsos con un tiempo de descanso largo. La
forma de implementar esta forma de onda es con un contador que vaya decrementando dentro del ciclo de
generación de los tiempos Ton y Toff, y generando por ultimo un tiempo de off muy largo.

Para terminar cabe destacar el papel protagónico que desempeña el programa Proteus, al permitirnos realizar
toda la simulación del dispositivo microcontrolador, solo vinculando el archivo hexadecimal generado al
ensamblar el programa. La bondad radica en que podemos chequear y probar hasta estar

Completamente seguros de que el programa funciona de manera adecuada, realizando ajustes, adiciones o
correcciones al programa, antes de quemarlo en el dispositivo real definitivamente.
Las característica de diseño de de estos instrumentos los hacen extraordinarios utiles para la calibrar los
conductos. La ausencia de conicidad nos permitirá en todo momento saber cual es el diámetro menor de la
porción apical del conducto, así como determinar la existencia o no de un tope epical claro con determinado
calibre de instrumentos. Para ello pueden utilizar se los instrumentos manualmente.
BIBLIOGRAFIA

 Jorge E. Quintero Muñoz, (2012) Módulo 299016 Instrumentación Médica, Unidad 1 – Instrumentación
Diagnostica, Unidad 2 – Instrumentación Terapéutica, Unidad 3 – Instrumentación de Imágenes
Médicas, Universidad Nacional Abierta y a Distancia, Bogotá D.C.

 José Ma. Angulo U., Susana Romero Y., Ignacio Angulo M., (2000) Microcontroladores PIC, Diseño
Práctico de Aplicaciones, Mc Graw Hill Interamericana, Madrid, España.

Eduardo García Breijo, (2008) Compilador C CCS y Simulador Proteus para Microcontroladores PIC, Marc

También podría gustarte