Você está na página 1de 64

// DESCARGA GRATUITA // "int año = 2 , número 7" /* NOVIEMBRE 2009 */

Estudio de las ondas fotopletismograficas de un oximetro


de pulso para monitorizar de forma no invasiva la
saturación de la hemoglobina arterial

Tercera parte de este curso de programación de PICs. En


esta entrega abordaremos los módulos de temporización
timer0, timer1, timer2 y el módulo de comunicación serial
Esta página está esperando
tu anuncio. Comunicate a
revista.ucontrol@gmail.com
.staff

número = 7; año = 2;

Dirección, Redacción y Corrección:


Ariel Palazzesi
Argentina
revista.ucontrol@gmail.com

Diseño y Diagramación:
Lucas M. Treser
Argentina
lmtreser@gmail.com

Consejo Editorial:
Mario Sacco
.indice
Argentina
service.servisystem@gmail.com

Alejandro Casanova
Argentina
inf.pic.suky@live.com.ar

Washington Zarate Rospigliosi El amplificador operacional 0x05


Perú Historia de la informática 0x0C
washi_w_z_r@hotmail.com Tutorial PCB Wizard 0x13
Modulo ADC en PICs 0x18
Diego Ferrari Oxímetro de pulso 0x1F
Argentina Kernel, escuela de inventores 0x2B
ad-ferrari@hotmail.com PIC16F628A en assembler (iii) 0x30

Descarga Gratuita.
Este contenido se rige por la licencia
de Creative Commons “Licencia Creative
Commons Atribución-No Comercial-Sin
Obras Derivadas 3.0”
.editorial
Estás leyendo el último ejemplar del año de la Revista
uControl. Las cercanías del fin de año por lo general nos
obligan a hacer un balance y un repaso de lo acontecido en
los últimos doce meses. En el caso de está pequeña
publicación, dicho balance arroja un resultado absolutamente
positivo. Es que a pesar de haber estado casi un año sin
publicar ningún ejemplar, el “regreso” de la revista tuvo una
muy buena acogida, y por los comentarios que recibimos
sabemos que los lectores la siguen esperando con el mismo
entusiasmo de siempre.
Hemos visto con orgullo como, a lo largo de los tres
ejemplares publicados en 2009, la calidad de los artículos se
ha ido incrementando. Obviamente, en este caso “calidad”
no es sinónimo de “dificultad”: es posible tratar con calidad
temas que sirven perfectamente a un principiante, y eso es
lo que intentamos hacer cada 64 días.
Hemos recibido varios mensajes solicitando les
brindemos la dirección de un lugar en el que puedan
comprar la revista, u ofreciendo pagar por la misma en su
formato digital. Bien, por el momento -y quizás siempre sea
de esta manera- la revista no existe como un documento
impreso. Nos parece mucho más simple de distribuir (y
“ecológicamente amigable”) mantener la Revista uControl
como un ebook. Por otra parte, la idea que tenemos desde el
momento en que concebimos este proyecto es que fuese un
producto gratuito para el lector, y en ese camino seguimos
andando.
Esto no quiere decir que no existan formas en la que
puedes colaborar con el proyecto. De hecho, nos vendría
muy bien tu ayuda. Si tienes un proyecto interesante que
quieres compartir con tus colegas, o crees que puedes
colaborar en la edición (diagramación, corrección de textos,
etc.) de la revista, escríbenos a revista.ucontrol@gmail.com
y con mucho gusto te contaremos como puedes ser parte del
equipo. También puede sernos de utilidad que nos
recomiendes como sitio en el que hacer publicidad. Si tienes
confianza con tu proveedor de componentes electrónicos y
crees que seria beneficioso para el publicitar en este medio,
puedes darle nuestro correo. De esa manera, la revista
permanecerá con un costo nulo para todos.
Estamos trabajando en los artículos del numero
siguiente. No adelantaremos nada -queremos sorprenderte-
pero desde ya te avisamos que el 2010 será un año muy
importante para nuestra comunidad. Nos vemos en Enero.

/ / página 0x04
el amplificador operacional
Presentes en casi todo circuito moderno, ya se trate de un dispositivo de
electrónica digital o analógica, el amplificador operacional es el pilar de la mayoría
de los diseños electrónicos.

// por: Ariel Palazzesi //


arielpalazzesi@gmail.com

Un amplificador opera- plicación, división, integración,


cional (comúnmente abrevia- derivación, etc) en calculadoras
do A.O. u op-amp), es un cir- analógicas. De ahí su nombre.
cuito electrónico (normalmen-
te se presenta como circuito El A.O. ideal tiene una
integrado) que tiene dos en- ganancia infinita, una impedan-
tradas y una salida. cia de entrada infinita, un ancho
La salida es la diferencia de banda también infinito, una
de las dos entradas multiplicada impedancia de salida nula, un
por un factor (G) (ganancia): tiempo de respuesta nulo y
ningún ruido. Como la impedan-
cia de entrada es infinita tam-
bién se dice que las corrientes
El primer amplificador de entrada son cero.
operacional monolítico, que da-
ta de los años 1960, fue el
Fairchild μA702 (1964), diseña-
do por Bob Widlar. Le siguió el De manera informal un
Fairchild μA709 (1965), también amplificador operacional es un
de Widlar, y que constituyó un circuito electrónico, generalmen-
gran éxito comercial. Más tarde te se obtiene en forma de
sería sustituido por el popular circuito integrado o chip, que
Fairchild μA741(1968), de David consta de dos entradas: V+ (no
Fullagar, y fabricado por nume- inversora) y V- (inversora) y
rosas empresas, basado en tec- una sola salida (Vout).
nología bipolar. Esta salida es la diferen-
Originalmente los A.O. se cia entre las dos entradas,
empleaban para operaciones multiplicada por un factor de
matemáticas (suma, resta, multi- potencia, que a lo largo de

/ / página 0x05
estas paginas llamaremos G.
Por lo tanto:

Un amplificador opera-
cional ideal tiene una ganan-
cia (G) infinita, una impedan-
cia de entrada infinita, un
ancho de banda (rangos de
frecuencias a los cuales
puede operar) también infini-
to, una impedancia de salida
igual a cero, y ningún ruido. mo una caja negra con cortocircuitos.
Como consecuencia características ideales, lo
del hecho de tener impedan- que simplifica mucho su inter-
cia de entrada infinita, se pretación. Sin embargo, es
puede asumir que las corrien- importante entender la forma
tes de entrada son nulas. en que funciona, de esta Veremos a continua-
En la practica, y forma se podrá entender ción como se comporta un
dependiendo del fabricante mejor las limitaciones que amplificador operacional en
(que brinda hojas de datos presenta. corriente continua (CC) y
de cada modelo de chip que Los diseños varían corriente alterna (CA).
fabrica), un amplificador ope- entre cada fabricante y cada
racional “real” tiene un ancho producto, pero todos los am-
de banda del orden de los plificadores operacionales tie-
MHz, impedancias de entra- nen básicamente la misma
da de algunos megaohms, y estructura interna, que con- El primer caso a ana-
una ganancia típica de siste en tres etapas: lizar es la configuración a
100.000, lo que permite que lazo abierto (sin realimenta-
una diferencia de tensión de 1) Amplificador diferencial: ción) en corriente continua.
50 millonésimas de volts en es la etapa de entrada que En estas condiciones,
sus entradas genere 5 volts proporciona una baja amplifi- la salida del amplificador
en su salida. cación del ruido y gran operacional será la resta de
La figura 1 nos mues- impedancia de entrada. Sue- sus dos entradas, multiplica-
tra el símbolo generalmente len tener una salida diferen- das por el factor G, tal como
utilizado para representar cial. se explico antes.
estos dispositivos, donde se Con ganancias supe-
ven las entradas y la salida, 2) Amplificador de tensión: riores a 100.000, es muy
además de las dos conexio- proporciona una ganancia de fácil, aun con variaciones
nes para la alimentación tensión. muy pequeñas de tensión en
(Vs+ y Vs-). Estas tensiones sus entradas, que la tensión
en general son de entre 5 y 3) Amplificador de salida: de salida supere la tensión
15 Volts, con signos opues- proporciona la capacidad de de alimentación.
tos. suministrar la corriente ne- En ese caso, se dice
En los esquemas cesaria, tiene una baja impe- que el amplificador operacio-
electrónicos se presenta al dancia de salida y, usual- nal esta saturado. Si la
amplificador operacional co- mente, protección frente a tensión mas alta es la aplica-

/ / página 0x06
da a la entrada V+, la salida respecto del comportamiento quier momento. Esta caracte-
(Vout) será igual a Vs+. Si la del amplificador operacional rística hace que un ampli-
entrada V- es la mas alta, la en CC puede aplicarse a ficador operacional sea útil
salida toma el valor de Vs-. corriente alterna (CA), pero como elemento para adaptar
debemos tener en cuenta niveles lógicos.
que a partir de ciertas frecu- Matemáticamente, te-
encias aparecen limitacio- nemos:
nes.
El segundo caso es Debido a que al
un lazo cerrado en corriente amplificador operacional típi-
continua. Supondremos una co también se le conoce
realimentación negativa, me- como amplificador realimen-
diante una conexión entre la tado en tensión (VFA) hay
salida y la entrada V-. una importante limitación
Para analizar esta respecto a la frecuencia: el
situación, supondremos que producto de la ganancia en
inicialmente ambas entradas tensión por el ancho de
están sometidas a la misma banda es constante.
tensión. Si la tensión aplica- Como la ganancia en
da a la entrada V+ comienza lazo abierto es del orden de
a subir, la tensión en la 100.000 un amplificador con
salida también subirá, ya que esta configuración sólo ten-
como vimos antes, es dría un ancho de banda de Si conectamos un
función de la diferencia de unos pocos Hz. amplificador operacional de
las tensiones en las entra- Al realimentar negati- la manera que nos muestra
das. vamente se baja la ganancia la figura 3, obtenemos lo que
Como existe la reali- a valores del orden de 10 a se conoce como segui-dor.
mentación entre la salida y V- cambio de tener un ancho de En esta configuración
, la tensión en esta entrada banda aceptable. Existen se lo puede utilizar como
también subirá, con lo que la modelos de diferentes ampli- buffer, para eliminar efectos
diferencia entre V+ y V- se ficadores operacionales para de cargas importantes en
reduce, disminuyendo tam- trabajar en frecuencias supe- salidas que no las soporten,
bién la tensión de salida. riores, en estos amplificado- o para adaptar impedancias
Este proceso se estabiliza res se busca mantener las diferentes (conectar un dis-
rápidamente, y se tiene que características a frecuencias positivo con una gran impe-
la salida es la necesaria para más altas que el resto, dancia a otro con una impe-
mantener las dos entradas, sacrificando a cambio un dancia pequeña o vicever-
idealmente, con el mismo menor valor de ganancia u sa).
valor. otro aspecto técnico. En este caso la
Siempre que hay reali- tensión de salida será igual a
mentación negativa se apli- la tensión de la entrada, y la
can estas dos aproxima- impedancia de entrada es
ciones para analizar el El amplificador opera- infinita.
circuito: cional se puede utilizar como Matemáticamente:
un comparador. En efecto, si
lo configuramos como se ve
en la figura de mas abajo, la
salida será Vs+ o Vs-
dependiendo de cual de ellas
En principio, lo visto sea la mayor en cual-

/ / página 0x07
Por lo que:

La figura 4 ilustra la
configuración básica del am-
plificador operacional como Luego la ganancia del ampli-
amplificador inversor. ficador inversor será:
En este circuito, la en-
trada (+) está a masa, y la se-
ñal se aplica a la entrada (-)
a través de Rin, con Deben observarse o-
realimentación desde la sali- tras propiedades adicionales
da a través de Rf. del amplificador inversor
Aplicando las propie- ideal. La ganancia se puede
dades anteriormente estable- variar ajustando bien Rin, o
cidas del amplificador opera- bien Rf. Si Rf varía desde
cional ideal, podemos hacer cero hasta infinito, la ganan-
un análisis de las caracte- cia variará también desde
rísticas distintivas de este cero hasta infinito, puesto
circuito. que es directamente propor- de referencia”.
Puesto que el amplifi- cional a Rf. La impedancia Esta propiedad puede
cador tiene ganancia infinita, de entrada es igual a Rin. aún ser o no ser obvia, a
desarrollará su tensión de Vin y Rin únicamente deter- partir de la teoría de tensión
salida, Vout, con tensión de minan la corriente Iin, por lo de entrada de diferencial
entrada nula. Ya que la que la corriente que circula nula. Es, sin embargo, muy
entrada diferencial Vd es: por Rf es siempre Iin, para útil para entender el circuito
cualquier valor de dicha Rf. del amplificador operacional
La entrada del amplifi- ver la entrada V+ como un
cador, o el punto de cone- terminal de referencia, el
Tenemos que Vd = 0, y si Vd xión de la entrada y las cual controlará el nivel que
= 0, entonces toda la tensión señales de realimentación, ambas entradas asumen.
de entrada Vin, deberá apa- es un nudo de tensión nula, Luego esta tensión puede
recer en Rin, obteniéndose independientemente de la ser masa o cualquier poten-
una corriente Iin igual a: corriente Iin. Luego, esta cial que se desee.
conexión es un punto de
tierra virtual, un punto en el
que siempre habrá el mismo
V- está a un potencial cero, potencial que en la entrada
es un punto de tierra virtual. V+. Por tanto, este punto en La segunda configura-
Toda la corriente Iin que el que se suman las señales ción del amplificador opera-
circula por Rin pasará por Rf, de salida y entrada, se cional, en este caso como
puesto que no se derivará conoce también como nudo amplificador no inversor es la
ninguna corriente hacia la suma. que vemos en la figura 5. En
entrada del opera-cional Esta última caracterís- este circuito, la tensión Vin
(suponemos una impe- tica conduce un axioma bá- se aplica a la entrada V+, y
dancia infinita), así pues el sico de los amplificadores una fracción de la señal de
producto de Iin por Rf será operacionales, el cual se apli- salida, Vout, se aplica a la
igual a - Vout: ca a la operación en bucle entrada V- a través del
cerrado: “En bucle cerrado, divisor de tensión R1 - R2.
la entrada V- será regulada Puesto que, no fluye
al potencial de entrada V+ o

/ / página 0x08
corriente de entrada en de un amplificador ideal.
ningún terminal de entrada, y
ya que Vd = 0, la tensión en
R1 será igual a Vin. Veamos
un poco de matemática: Utilizando la caracte-
rística de tierra virtual en el
nudo suma V- del amplifi-
cador inversor, se obtiene
Y como : una útil modificación, el su-
mador inversor, que vemos
junto a sus formulas funda-
mentales en la figura 6. En
Tenemos que : este circuito, como en el
amplificador inversor, la
tensión V+ está conectada a
masa, por lo que la tensión V-
Condición que expresada en estará a una masa virtual, y
términos de ganancia nos como la impedancia de
queda: entrada es infinita toda la
corriente I1 circulará a través
de RF y la llamaremos I2.
Lo que ocurre en este
Que es la ecuación caracte- caso es que la corriente I1
rística de ganancia para el es la suma algebraica de las La ganancia global del
amplificador no inversor ide- corrientes proporcionadas circuito la establece Rf, la
al. por V1, V2 y V3. Las cual, en este sentido, se
formulas correspondientes a comporta como en el ampli-
También se pueden I1 e I2 también se pueden ficador inversor básico.
deducir propiedades adicio- consultar en la figura 6. A las ganancias de los
nales para esta configura- Como ambas corrien- canales individuales se les
ción. El límite inferior de tes son iguales, si trabaja- aplica independientemente
ganancia se produce cuando mos algebraicamente igua- los factores de escala RG1,
R2 = 0, lo que da lugar a una lando ambos términos, pode- R G2, R G3,... etc. Del
ganancia igual a 1. mos obtener la ultima fórmu- mismo modo, R G1, R G2 y
En el amplificador in- la de la figura 6, que nos R G3 son las impedancias
versor, la corriente a través permite calcular el valor de de entrada de los respecti-
de R1 siempre determina la Vout. Esta establece que la vos canales.
corriente a través de R2, tensión de salida es la suma Otra característica in-
independientemente del va- algebraica invertida de las teresante de esta configu-
lor de R2, esto también es tensiones de entrada multi- ración es el hecho de que la
cierto en el amplificador no plicadas por un factor co- mezcla de señales lineales,
inversor. rrector, que en el caso en en el nodo suma, no produce
Luego R2 puede que: interacción entre las entra-
utilizarse como un control de das, puesto que todas las
ganancia lineal, capaz de fuentes de señal alimentan el
incrementar la ganancia des- punto de tierra virtual.
de el mínimo unidad hasta Nos permiten simplificar obte- El circuito puede
un máximo de infinito. La niendo: acomodar cualquier número
impedancia de entrada es de entradas añadiendo resis-
infinita, puesto que se trata tencias de entrada adiciona-

/ / página 0x09
les en el nodo suma.

En este artículo intentamos


presentar los amplificadores
operacionales sin caer en el
uso de demasiada cantidad
de formulas matemáticas
que dificulten su lectura. La
idea es que sirva como base
para artículos posteriores, en
los que se verán aplicacio-
nes practicas de los amplifi-
cadores operacionales utiliza-
dos como Amplificadores de
Aislamiento, Amplificadores
de Instrumentación, de
Transconductancia Variable,
etc., cada uno de los cuales
amerita un artículo propio.

Este espacio está esperando tu anuncio.


Comunicate a revista.ucontrol@gmail.com

/ / página 0x0A
historias de la informática
Érase una vez un mundo lleno de ordenadores con tétricas pantallas de color
negro, en las que se mostraban unas pequeñas letritas de color verde. No
existían, en ese mundo, ni el color, ni los juegos ni Internet. Todos los
ordenadores eran prácticamente iguales, y tenían un triste color beige. La idea de
“ordenador personal” prácticamente no había nacido, y solo las grandes empresas
utilizaban equipamiento informático. Como regla general, se tenía un ordenador
central caro y poderoso, al que se conectaban decenas de terminales “bobas”. A
la hora de obtener documentos impresos, ruidosas impresoras que golpeaban
contra una cinta entintada dibujaban caracteres sobre el papel.
// por: Ariel Palazzesi //
arielpalazzesi@gmail.com

Hoy día disfrutamos de sólo tres décadas? Pues de esa


ordenadores (a menudo más breve pero apasionante historia
de uno en cada casa) equi- trata este artículo.
pados con microprocesado-
res de múltiples núcleos y
frecuencias de trabajo que
superan los 3 GHz. Guarda- Lo que más tarde se convirtió
mos nuestros datos en discos en una despiadada carrera para
duros cuya capacidad de ver quien tiene más bits, mas
almacenamiento se mide en colores o mas GHz comenzó en
cientos de Gigabytes, y la realidad en 1973. En ese año, el
memoria RAM de nuestras editor de la revista "Popular
maquinas supera el GB. Electronics", Leslie Solomon,
Nuestros monitores, casi publicó un concurso en el que
siempre de tecnología LCD, que invitaba a sus lectores a
pueden mostrar millones de crear un ordenador. El ganador
colores en resoluciones altísi- fue Ed Roberts, que había
mas, con dimensiones que en fundado una empresa llamada
algunos casos superan las 20 MITS (Micro Instrumentation
pulgadas. Y ya no imprimimos Telemetry System) en la que se
más utilizando una cinta: nues- fabricaban emisores de radio
tras impresoras usan inyección para aviones y coches radiocon-
de tinta o tecnología láser para trolados. Roberts presentó un
proporcionarnos brillantes imá- proyecto basado en un micropro-
genes que a veces resultan cesador 8080 de Intel funcionan-
indistinguibles de una fotografía. do a 2 MHz, que Popular
¿Cómo hemos pasado Electronics distribuiría más
de aquellas primitivas máquinas tarde en forma de kit para
a los ordenadores actuales en armar, con el nombre de “Altair”.

/ / página 0x0C
Si lo comparamos con
los estándares actuales, el
Altair era un ordenador abso-
lutamente ridículo: se vendía
como un kit que el propio
usuario tenía que montar,
carecía de pantalla y de
teclado (en su lugar usaba
conmutadores y luces) y te-
nía una memoria principal de
solo 256 bytes (unas cuatro
mil veces menos que un
Megabyte). Sin embargo, fue
el primer “ordenador perso-
nal” comercializado masiva-
mente. Durante el primer día
de ventas, se entregaron
unos 200 equipos, a 397
dólares cada uno. Nada mal, de todas las diferencias que Altair de verdad, los 4Kb de
si tenemos en cuenta que la han mantenido a lo largo de código del intérprete funcio-
mayoría de los compradores más de 30 años, los cuatro naron sin problemas al pri-
no tenían mucha idea de que fueron “infectados” con el mer intento. Allen y Gates
iban a hacer con eso una “virus” de la informática más abandonaron sus estudios
vez que llegaran a casa. o menos en el mismo para fundar la compañía "Taf-
A partir del Altair, si momento. O-Data", la misma que más y
querías utilizar un ordenador Bill Gates tiene el con el agregado de Steve
en casa, podías hacerlo. indudable mérito de haber Ballmer pasaría a llamarse
Aunque todavía casi nadie sido el primero en darse "Microsoft Corporation".
se daba cuenta de ello, la cuenta que para que el Altair En 1976, fruto del
informática personal tal co- sirviese para algo tenia que trabajo de Steve Jobs y (fun-
mo la concebimos hoy aca- ser programado. Y había que damentalmente) Steve Woz-
baba de nacer. hacerlo mediante un sistema niak aparece el “Apple I”,
En esa época, cuatro que resultase simple para los que se parecía bastante más
de las personas que más usuarios. Así, junto a Paul a lo que hoy día entendemos
hicieron por el desarrollo de Allen, creó un intérprete del por “ordenador”. Se basaba
la informática personal eran lenguaje BASIC (Beginner's en un microprocesador 6502
jóvenes estudiantes. El hijo All-purpose Symbolic Instruc- de MOS Technologies (bas-
de un prestigioso abogado, tion Code, o Código de tante más sencillo que el
Bill Gates, y su amigo y Instrucciones Simbólicas de 8080 de Intel) y disponía de
compañero Paul Allen cursa- Propósito General para los todo el software necesario
ban estudios de derecho en Principiantes) en 1975, que para funcionar incluido en
la elitista y muy privada Uni- podía correr en el 8080 del una memoria ROM. En lugar
versidad de Harvard. Steve Altair. Para lograrlo, primero de las patéticas luces del
Jobs y Steve Wozniak, con escribieron un emulador de Altair, se podía utilizar un
cuna mucho más humilde 8080 que se ejecutaba en aparato de TV normal como
que Gates, trabajan en el uno de los ordenadores PDP- monitor, en el que se
garaje del segundo. Los dos 10 de la Universidad de dibujaban 24 filas de 40
primeros personajes acaba- Harvard. caracteres de tamaño fijo.
rían fundando Microsoft, y Cuando a mediados Disponía de una RAM
los otros dos Apple. A pesar de 1975 lo probaron en un separada para el video,

/ / página 0x0D
nocidas hasta entonces, pa-
ra fabricar sus propios micro-
ordenadores.
A fines de los setenta
y principios de los ochenta
aparecieron productos que
más tarde llegaron a conver-
tirse en máquinas de culto,
tales como el Commodore
PET, el TRS 80, el Osborne,
el DAI o el LISA (de Apple, y
antecesor del MacIntosh).
Algunos modelos, como el
Commodore 64 o el Sinclair
ZX-Spectrum se vendieron
por millones. La mayoría de
estos ordenadores tenían su
propio interprete BASIC, casi
siempre incompatible con los
modelos de la competencia
(y muy frecuentemente con
los otros modelos de la pro-
pia empresa), aunque mu-
chos de ellos (como los
MSX, Atari, etc.) empleaban
versiones de BASIC compra-
das a Microsoft Corp. La
interfaz para un teclado, mercado, era de 666.66 informática, estaba claro,
4KB. (ampliables) de memo- dólares. Ese precio era una había abandonado el reducto
ria RAM principal y podia muestra más del sentido del de las grandes empresas
utilizar una unidad de cinta humor de una empresa que, para instalarse definitivamen-
de casete como dispositivo fundada en el día de los te en los hogares. Pero el
de almacenamiento externo. inocentes anglosajón (el pri- reinado de los 8 bits estaba
Jobs y Wozniak tuvieron que mero de abril de 1976), nos llegando a su fin, ya que sus
vender respectivamente su deleitaría con varias campa- limitaciones tecnológicas no
furgoneta Volkswagen y su ñas publicitarias sumamente alcanzaban para satisfacer
calculadora programable HP ocurrentes. las necesidades de un mer-
(sus más preciadas posesio- cado que demandaba cada
nes) para poder fabricar el día más prestaciones. La era
primer Apple I. de los 16 bits estaba a la
La ROM del Apple I vuelta de la esquina.
tenia, además del sistema A pesar de que Apple
operativo, un intérprete de tuvo poco éxito con el Apple I
BASIC llamado “Apple Ba- y tuvieron que esperar al año
sic”. Los usuarios no tenían siguiente para alcanzar la En octubre de 1980 la
que pagar a Gates (ni a gloria con el Apple II, habían empresa IBM, que hasta ese
nadie más) para poder crear puesto la piedra fundamental momento se había especia-
sus propios programas. El sobre la que se basarían lizado en la fabricación de
precio de venta del ordena- decenas de pequeñas empre- grandes ordenadores (main-
dor, al momento de salir al sas, muchas de ellas desco- frames), creó un proyecto

/ / página 0x0E
secreto llamado "Chess".
Bajo la dirección de Philip
Estridge y William Lowe,
once ingenieros fueron envia-
dos a Boca Ratón, en Flo-
rida, con el encargo de crear
un “ordenador personal”. En-
tre las especificaciones míni-
mas del nuevo equipo se
contaban la necesidad de
dotarlo de un Sistema Ope-
rativo sencillo aunque poten-
te y la posibilidad de utilizar
más de 64KB de RAM. El
corazón del ordenador seria
un microprocesador Intel
8088, un híbrido con arqui-
tectura interna de 16 bits y
bus de direcciones de 8 bits.
Esto le proporcionaría la
potencia de un procesador
de 16 bits a la vez que le
permitía aprovechar todos
los periféricos de bajo precio
disponibles, que trabajaban
con 8 bits. Para que dispusie-
se de mucho software desde
su nacimiento, el ordenador
utilizaría el BASIC de Micro-
soft.
En cuanto al sistema
operativo, el primer candi-
dato fue el muy popular (por
esa época) CP/M-86 de Gary
Kildall, aunque por una serie
de motivos y manejos que
tranquilamente podrían con-
vertirse en el argumento de
una novela, Microsoft termi-
nó haciéndose con el contra-
to. En ese entonces Micro-
soft, aunque estaba lejos de
ser lo que sería en un futuro,
ya era una empresa mediana
con más de 20 empleados
que facturaba anualmente 4
millones de dólares. IBM PC, que no era más que en funcionamiento. El siste-
A principios de 1981 un “Frankenstein electrónico” ma operativo que le dio vida
un prototipo del que se cableado de cualquier ma- fue el MS-DOS, que en solo
transformaría en el primer nera y sin carcasa, es puesto 5 años sería instalado más

/ / página 0x0F
de 20 millones de máquinas
convirtiéndose en el domina-
dor absoluto del mercado y
haciéndole ganar a Microsoft
los primeros centenares de
millones de dólares. En el
número de enero de 1982 de
la revista Time, el IBM PC es
elegido como "personaje del
año".

No solo en Microsoft e
IBM se inventaban cosas. La
empresa Xerox, especializa-
da en el desarrollo y fabrica-
ción de maquinas fotocopia-
doras, vaticinó que el empleo mejores investigadores del creado PARC, supo que esa
masivo de ordenadores en mundo, 58 trabajaban en era la tecnología que harían
algún momento haría posible Palo Alto. A pesar de que en famo-sos sus ordenadores.
una “oficina sin papeles”: los PARC se crearon muchos de En esa época Apple
documentos se transferirían los estándares actuales, Xe- estaba comenzado a trabajar
directamente entre ordena- rox fracasó al intentar con- en los proyectos Lisa y
dores, siendo muy pocos los vertirlos en productos co- MacIntosh. Si bien las inter-
casos en que se justificase merciales. Los iconos, las faces de ambas empresas
que la información fuese ventanas y los gráficos de no eran idénticas, el concep-
impresa sobre papel. Para mapas de bits tuvieron su to era básicamente el mismo.
una empresa que fabricaba origen en Palo Alto. El ratón, Apple llevó todo esto mucho
fotocopiadoras, este no era el mando de juegos, la red más lejos, pero sin copiar el
un futuro agradable. Lejos de Ethernet, las primeras impre- código de Xerox. Solo tomó
desanimarse frente a este soras láser y la programa- ideas, el diseño de ambas
panorama, Xerox decidió for- ción orientada a objetos interfaces y sistemas fue radi-
mar parte de las oficinas del también son inventos de calmente distinto. Todos los
futuro, diseñando ordenado- Xerox, que invirtió más de sistemas operativos posterio-
res más pequeños que un 100 millones de dólares en res de Apple, incluso los
mainframe, pero más pode- este proyecto. derivados de NEXTSTEP,
rosos que una “PC”. Creó A pesar del fracaso tienen algo de lo creado por
una división especial llamada comercial, Xerox y sus inves- PARC.
PARC (Palo Alto Research tigadores estaban destina- A su vez, Microsoft
Center), en California, que dos a cambiar la historia de fue una de las primeras
en poco tiempo se converti- la informática. Jef Raskin, compañías en desarrollar
ría en el lugar de nacimiento uno de los integrantes del software para Apple. Es que
del paradigma de la interfaz equipo de trabajo de Palo Steve Jobs tenía muy claro
gráfica de usuario. Alto, se pasó a la joven que necesitaba (mucho) soft-
PARC se dedicaba a Apple. Raskin convenció a ware para que el MacIntosh
las innovaciones en hardwa- Steve Jobs de que debía fuese un éxito, y Microsoft lo
re, software y otras ciencias visitar Palo Alto para ver lo tenía. Pero para poder es-
relacionadas. En un momen- que allí se investigaba. Cuan- cribir un programa de orde-
to determinado, de los 100 do Jobs vio los que había nador, es necesario conocer-

/ / página 0x10
lo todo sobre él, así que hoy tengamos un ordenador
Jobs le tuvo que mostrar a la miles de veces más potente.
gente de Gates los primeros Como fuese, el resul- La aparición de Internet ha
prototipos de MacIntosh. A tado de esta carrera por hecho que el acceso a la
Microsoft le encantó el sis- tener el hardware más poten- información sea más fácil
tema operativo de Apple. te y el sistema operativo más que nunca, y los nuevos
Tanto, que rapidamente co- simple de utilizar es que hoy, usuarios disfrutan de una
menzó a buscar la forma de solo un puñado de años más cantidad de programas y
emplear los iconos, ventanas tarde, el ordenador se ha contenidos que una o dos
y mouse en la plataforma convertido en una herra- décadas atrás eran inima-
IBM PC. mienta accesible a todo el ginables. Todo esto se lo
Según cuenta la leyen- mundo. Sin una interfaz gra- debemos a estos pioneros,
da, Bill Gates presionó a fica sencilla de usar, solo que con su trabajo e imagina-
Steve Jobs para que le per- pequeño porcentaje de los ción nos han traído hasta
mitiese utilizar partes de la actuales usuarios podría aquí.
interfaz de los Macintosh en manejar un ordenador.
el IBM PC a cambio de no El desarrollo
demorar el lanzamiento de tecnológico ha hecho que
las aplicaciones que Apple por mas o menos el mismo
necesitaba. Estos serían los dinero que se pagaba hace
cimientos de lo que más treinta años por un Altair, hoy
tarde se llamaría Windows
1.0. Todas las futuras deman-
das legales de Apple contra
Microsoft por el uso de
algunos elementos de la GUI
se vieron debilitadas debido
a este antiguo acuerdo entre
ambas empresas. También
se dice que Microsoft se
llevó el mejor programador
de Mac para que tomara las
principales decisiones de
diseño de la primera versión
de Windows, y se asegura
que Bill Gates le dijo “la PC
debe verse y trabajar tal
como una Mac”.

/ / página 0x11
nuevos componentes
en PCB Wizard
Unas de las falencias de PCB Wizard a la hora de trabajar es la falta de
componentes en sus librerías. Pero con un poco de paciencia y siguiendo paso a
paso este tutorial podremos saltar esta limitación. ¡Manos a la obra!

// por: Lucas Martin Treser //


lmtreser@gmail.com

Este tutorial es una rectángulo.


traducción del original, que se El próximo paso será
encuentra en la ayuda del seleccionar los tres objetos y
software, y nos guiará paso a elegir la opción
paso en la creación de un desde el menú .
símbolo de circuito con su Esto colocará cada objeto en la
correspondiente modelo PCB. capa utilizada para dibujar
El componente que crea- diagramas de circuitos.
remos a modo de ejemplo es Ahora deberemos indicar
una resistencia de 1 pulgada en qué lugar se encuentran los
que actualmente no existe en puntos de conexión del símbolo.
las librerías originales. Elegimos desde el
A lo largo del tutorial menú y hacemos
aprenderemos a: clic en la parte superior de la
primer línea vertical.
• Crear nuevos símbolos de cir- A continuación aparecerá
cuito. una ventana en la que especifi-
• Crear nuevos modelos PCB. caremos el número de pin.
• Agregar símbolos a una li- Ingresamos el número 1 y acep-
brería. tamos. Repetimos este paso
para agregar el pin número 2 en
la otra línea vertical de nuestro
componente.
Ya estamos listos para
Utilizando las herramien- poder crear nuestro símbolo.
tas de dibujo desde el menú Seleccionamos todos los obje-
, dibujaremos la tos (incluyendo los pines) y ele-
forma de la resistencia usando gimos la opción
dos líneas verticales y un desde el menú .

/ / página 0x13
Aparecerá una venta-
na como la de la figura núme-
ro 4. En ella podremos espe-
cificar varios parámetros de
nuestro nuevo componente.

determina la categoría
del símbolo. Debemos selec-
cionar .

es un identificador
único que será usado por el
software para acceder al
símbolo. Este campo normal-
mente es nombrado como el
símbolo que se esta crean-
do, y deberemos recordarlo
para luego enlazarlo con el
correspondiente modelo
PCB.

descri-
ben al símbolo. En nuestro
ejemplo .

especifica cuál
será el modelo PCB que se
utilizará al convertir el circui-
to en un diseño de circuito
impreso. Llenaremos el cam-
po con el mismo identificador
utilizado para el símbolo
PCB que crearemos luego,
en nuestro ejemplo
.

Por último aceptamos


los cambios haciendo clic en
y continuamos con la
segunda parte.

Una vez que tenemos


terminado el símbolo de
circuito, podremos dibujar y
asociar con él un modelo
PCB del componente. Este
proceso es muy parecido al
anterior.

/ / página 0x14
Primero colocaremos
dos pads y un rectángulo
para representar el cuerpo
del resistor. La herramienta
para hacer esto la encontra-
mos en el menú
. Los pads deberán
estar separados 1 pulgada
uno del otro (podemos
ayudarnos activando la grilla
con una trama de 0,1
pulgada).
Luego seleccionare-
mos el rectángulo y elegire-
mos la capa
desde el menú .
Si también deseamos incluir algunos aspectos indispen- está opción
una vista real del componen- sables: aplica únicamente a los
te, deberemos dibujar el símbolos de circuito y se
encapsulado en la capa determina la categoría encuentra deshabilitada.
correspondiente ( del símbolo creado. Debe-
). mos seleccionar “ Finalmente hacemos
El paso siguiente será ”. clic en para terminar el
especificar donde se encuen- proceso. En la próxima nota
tran los puntos de conexión. es un identificador úni- veremos como agregar el
Para esto utilizamos la co utilizado por el software símbolo a una librería y
función desde el para acceder al símbolo. como utilizarlo en nuestros
menú . Hace- Esta clave deberá coincidir diagramas.
mos clic en cada pad y listo. con la ingresada en el Una vez que hemos
Ya estamos en con- campo del sím- terminado de crear el nuevo
diciones de crear el símbolo. bolo de circuito creado componente tendremos que
Seleccionamos todos los anteriormente. En nuestro agregarlo en una librería
objetos (incluyendo los pi- ejemplo el valor adoptado es para poder utilizarlo.
nes) y elegimos la opción .
desde el
menú . son
Aparecerá una venta- usados para describir el
na similar a la figura número símbolo creado. Debemos Comenzamos con el
6 donde podremos configurar ingresar . símbolo de circuito. Para

/ / página 0x15
esto creamos una nueva
librería eligiendo
desde el menú
. En la ventana que
aparece ingresamos
como nombre,
seleccionamos
como tipo y apretamos
el boton .
El próximo paso será
seleccionar el símbolo crea-
do y elegir la función
desde el menú
. Aparecerá
otra ventana. Nos asegura-
mos que este seleccionada
la nueva librería
y hacemos clic en .
Y listo, ya tenemos el nuevo
componente en la galería.
Ahora repetiremos el
proceso para agregar el
modelo PCB.
Creamos una segun-
da librería con la opción
desde el menú
. En la venta-
na que aparecerá ingresa-
mos
como nombre y
como tipo. Hace-
mos clic en .
Seleccionamos el sím-
bolo creado anteriormente y
elegimos nuevamente la
opción desde
el menú . En
la ventana que aparecerá
comprobamos que la librería
a utilizar sea
y hacemos clic
en .
Una vez terminado
este proceso tendremos los
componentes listos para utili-
zar en nuestros proyectos.

/ / página 0x16
módulo de ADC en
PIC16F87xA y PIC18Fxxxx
Algunos microcontroladores PICs de la familia 16F y todos los de las familias 18F
tienen incorporado un módulo de conversión analógica/digital de 10 bits
(Exceptuado algunos de la familia 18F que son módulos de 12 bits).
Aprenderemos su estructura, configuración y aplicación práctica.
// por: Alejandro Casanova //
inf.pic.suky@live.com.ar

El módulo comprende trolado por medio de los


de varias entradas analógicas registros ADCONx en donde se
multiplexadas (El número de- puede seleccionar que pines
pende del PIC), un capacitor serán usados como entradas
de muestro y retención, y un analógicas, determinar el reloj
convertidor analógico/digital para la conversión, seleccionar
de aproximaciones sucesivas. canal de conversión, poner en
Todo convertidor ADC funcionamiento la conversión,
requiere voltajes de referencia etc. Luego tenemos 2 registros
que determinan el valor de más ADRESH y ADRESL en
mínima escala (Vref-) y el de donde se guarda el resultado de
plena escala (Vref+), de manera la conversión.
que la conversión de un valor de El convertidor A/D tiene
voltaje analógico Vin en el rango la característica de poder funcio-
de Vref- a Vref+ producirá un nar mientras que el dispositivo
valor equivalente binario en el está en modo sleep. Al funcio-
rango de 0 a 2n, donde n es la nar en sleep, el reloj de
resolución del convertidor (n = conversión A/D debe derivar del
10). Estas tensiones de referen- oscilador interno RC A/D.
cias pueden seleccionarse por
software, entre Vdd y Vcc o
entradas positivas colocadas en
los pines RA2/Vref- y RA3/-
VRef+ en donde se deben ADCON0:
cumplir ciertos requisitos con-
templados en las características Bit 7-6 ADCS1:ADCS0: Bits de
eléctricas del convertidor ADC selección de reloj para la
del PIC utilizado. conversión A/D.
El modulo ADC está con-

/ / página 0x18
Si ADCS2=0
00=Fosc/2
01=Fosc/8
10=Fosc/32
11=Frc

(Oscilador interno RC)

Si ADCS2=1
00=Fosc/4
01=Fosc/16
10=Fosc/64
11=Frc

(Oscilador interno RC)

Bit 5-3 CHS2:CHS0: Bits de


selección de canal analógico.

000: Canal 0 (AN0)


001: Canal 1 (AN1)
010: Canal 2 (AN2) ADCON1: Bit 7-6 Unimplemented: Es
011: Canal 3 (AN3) leído como ‘0’
100: Canal 4 (AN4) Bit 7 ADFM: Bit de selección
101: Canal 5 (AN5) de formato de la conversión Bit 5-2 CHS3:CHS0: Bits de
110: Canal 6 (AN6) A/D. selección de canal analógico.
111: Canal 7 (AN7)
1 = Justificación derecha. 0000: Canal 0 (AN0)
Bit 2 GO/DONE: Bit de Los 6 bits más significativos 0001: Canal 1 (AN1)
estado de la conversión A/D. de ADRESH se leen como 0. 0010: Canal 2 (AN2)
0 = Justificación izquierda. 0011: Canal 3 (AN3)
Cuando ADON=1: Los 6 bits menos significati- 0100: Canal 4 (AN4)
1 = conversión A/D en mar- vos de ADRESL se leen 0101: Canal 5 (AN5)*
cha (Cuando la conversión como 0. 0110: Canal 6 (AN6)*
termina se borra automática- 0111: Canal 7 (AN7)*
mente) Bit 6 ADCS2: Bit adicional 1000: Canal 8 (AN8)
0 = A/D en reposo para la selección del reloj 1001: Canal 9 (AN9)
para la conversión A/D. 1010: Canal 10 (AN10)
Bit 1 Unimplemented: Es 1011: Canal 11 (AN11)
leído como ‘0’ Bit 5-4 Unimplemented: Es 1100: Canal 12 (AN12)
leído como ‘0’ 1101: Unimplemented
Bit 0 ADON: Bit de habilita- 1110: Unimplemented
ción de A/D. Bit 3-0 PCFG3:PCFG0: Bits 1111: Unimplemented
de control de configuración
1 = El modulo de conversión del puerto A/D. Bit 1 GO/DONE: Bit de esta-
A/D es alimentado. do de la conversión A/D.

0 = El modulo de conversión Cuando ADON=1:


A/D no esta en operación. 1 = conversión A/D en mar-
(No consume corriente) ADCON0: cha (Cuando la conversión

/ / página 0x19
del puerto A/D.

ADCON2:

Bit 7 ADFM: Bits de selec-


ción de formato de la
conversión A/D
1 = Justificación derecha.
Los 6 bits más significativos
de ADRESH se leen como 0.
0 = Justificación izquierda.
Los 6 bits menos significati-
vos de ADRESL se leen
como 0.

Bit 6 Unimplemented: Leí-


do como ‘0’

Bit 5-3 ACQT2:ACQT0: Bits


de selección del tiempo de
adquisición A/D

111 = 20 TAD
110 = 16 TAD
101 = 12 TAD
100 = 8 TAD
011 = 6 TAD
010 = 4 TAD
001 = 2 TAD
000 = 0 TAD*

Bit 2-0 ADCS2:ADCS0: Bits


de selección de reloj para
conversión A/D .

111 = FRC (reloj A/D deriva-


termina se borra automáticamente) Bit 5 VCFG0: Bit de configu- do del oscilador RC)
0 = A/D en reposo ración de referencia (VREF- 110 = FOSC/64
source) 101 = FOSC/16
Bit 0 ADON: Bit de habilitación de 1 = VREF- (AN2) 100 = FOSC/4
A/D 0 = VSS 011 = FRC (reloj A/D deriva-
1 = El modulo de conversión A/D do del oscilador RC)
es habilitado. Bit 4 VCFG0: Bit de configu- 010 = FOSC/32
0 = El modulo de conversión A/D ración de referencia (VREF+ 001 = FOSC/8
no esta habilitado. source) 000 = FOSC/2
1 = VREF+ (AN3)
ADCON1: 0 = VDD Observando los registros se
ve una diferencia importante,
Bit 7-6 Unimplemented: Es Bit 3-0 PCFG3:PCFG0: Bits en la familia 18F el tiempo
leído como ‘0’ de control de configuración de adquisición se puede

/ / página 0x1A
realizar por hardware configu- por software. tiempo de adquisición.
rándolo automáticamente. d) Habilitar módulo de con-
versión A/D.

2. Configurar interrupción pa-


El tiempo por bit de la ra el convertidor A/D si se
Para que el converti- conversión A/D se define desea.
dor posea la exactitud especi- como TAD. La conversión 3. Seleccionar canal a con-
ficada, se debe contemplar A/D necesita un mínimo de vertir.
la carga del condensador 12TAD para la serie 16F o 4. Serie 16F o si en serie
CHOLD de manera que 11TAD para la serie 18F por 18F ACQT2, ACQT0=00: Es-
entre el nivel de tensión del 10 bits de conversión. perar por lo menos el mínimo
canal. La impedancia de la La fuente de reloj A/D de tiempo de adquisición.
fuente (RS) y la impedancia de la conversión es seleccio- 5. Iniciar conversión setean-
del cambio del muestreo nable por software. Hay siete do el bit GO/DONE.
interno (RSS) afectan directa- opciones posibles para el 6. Esperar a que termine la
mente al tiempo requerido TAD: conversión:
para cargar el condensador a) Por polling, testeando el
CHOLD. La impedancia reco- • 2 TOSC bit GO/DONE.
mendada máxima para las • 4 TOSC b) Por interrupción.
fuentes analógicas es de • 8 TOSC
2,5kΩ. Cuando la impedan- • 16 TOSC 7.Leer el valor convertido en
cia decrece, el tiempo de • 32 TOSC ADRESH-ADRESL.
adquisición también decrece. • 64 TOSC 8.Para la siguiente conver-
Después de que el canal • Oscilador interno RC sión esperar mínimo 2TDA.
analógico haya sido seleccio-
nado este tiempo de adquisi- Para las conversiones
ción debe tenerse en cuenta A/D correctas, el reloj de
antes de arrancar la conver- conversión A/D (TAD) debe El par de registros
sión. ser tan corto como sea ADRESH:ADRESL son car-
El calculo detallado posible pero mayor que un gados con el dato resultante
puede observarse en el mínimo TAD (para más de una conversión analógico
datasheet del PICs utilizado, información véase datasheet / digital. Cada uno de estos
a modo de ejemplo vemos del PIC utilizado) dado por registros es de 8 bits, por lo
que en un 16F87XA el míni- ejemplo para la serie 16F en tanto, juntos pueden guardar
mo tiempo de adquisición es 1.6us y para la serie 18F en hasta 16 bits. Sin embargo,
de 19.72us el cual debe ser 0.7us. como el resultado es de 10
generado por software cada bits, el módulo de conversión
vez que se seleccione un A/D permite justificarlo en la
canal (Cambiando). parte izquierda o derecha de
En cambio para los los 16 bits disponibles. Esto
PIC18F2455/2550/4455/4550 Pasos a seguir: nos da la posibilidad de ele-
el tiempo mínimo de adquisi- gir la resolución del conver-
ción se reduce a 2.45us, los 1. Configurar el módulo A/D. sor entre 10 bits (Justificado
cuales podemos configurarlo a) Configurar los pines analó- a la derecha) u 8 bits (Justifi-
por hardware dependiendo gicos y las tensiones de refe- cado a la izquierda) trabajan-
del reloj de conversión selec- rencia. do solamente con el registro
cionado. Cuando se selec- b) Seleccionar el reloj de con- ADRESH.
ciona ACQT2:ACQT0: 00 la versión.
demora se debe generar por c) Serie 18F: Seleccionar el

/ / página 0x1B
;Implementación en assembler:

List p=16f877A ; list directive to define processor


#include <p16f877A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_ON & _CPD_OFF
; NOTA:
; Oscilador utilizado 4MHz.-

; ************************************************
ByteAlto equ 0x20 ; Registro para guardar Byte alto de la conversión.-
ByteBajo equ 0x21 ; Registro para guardar Byte bajo de la conversión.-
Contador equ 0x22 ; registro utilizado en demora.-
; ************************************************

org 0x00
bsf STATUS,RP0 ; Banco 1
movlw 0x8E ; Justificado a la derecha, Fosc/8,
movwf ADCON1 ; RA0 analógico, VDD, VSS.-
bcf STATUS,RP0 ; Banco 0
movlw 0x41 ; Fosc/8, Canal 0, módulo habilitado.-
movwf ADCON0
call Demora_20us ; Demora de adquisión.-
bsf ADCON0,GO

Espera
btfsc ADCON0,GO ; Espera a que termine conversión.-
goto Espera
movf ADRESH,W ; Movemos resultado de la conversión.-
movwf ByteAlto
bsf STATUS,RP0 ; Banco 1
movf ADRESL,W
movwf ByteBajo
bcf STATUS,RP0 ; Banco 0.-
bsf ADCON0,ADON ; Apago modulo de conversión.-

Bucle
goto Bucle

;**** Demora ****


Demora_20us
movlw 0x05 ;
movwf Contador ; Iniciamos contador1.-

Repeticion
decfsz Contador,1 ; Decrementa Contador1.-
goto Repeticion ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-

end

/ / página 0x1C
/* Implementación en CCS: */

#include <16F877A.h>
/* ********************* Conversor A/D de 8 bits *************************** */
#device adc=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD,
NOWRT
#use delay(clock=4000000)

void main()
{
int16 Conversion;

setup_adc_ports(AN0); // Para saber los parámetros posibles ver 16F877A.h


setup_adc(ADC_CLOCK_DIV_8); // Para saber los parámetros posibles ver 16F877A.h
set_adc_channel(0);
delay_us(20);
Conversion=read_adc();
setup_adc(ADC_OFF);

while(1){

}
}

// Implementación en C18:

#include <p18f2550.h>
#include <adc.h>

#pragma config FOSC = XT_XT, CPUDIV = OSC1_PLL2

void main(void){
unsigned int Conversion;

TRISA=0xFF;
ADCON0=0x01; //Canal 0, Modulo habilitado.-
ADCON1=0x0E; // AN0, Vdd, Vss.-
ADCON2=0x94; // Justificado a la derecha, 4Tad, Fosc/4

SetChanADC(0); // Selecciono canal a convertir.-


ConvertADC(); // Comienza conversión.-
while(BusyADC()==1){} // Hasta que se finalice conversión.-
Conversion= ReadADC(); // Realizo lectura.-
CloseADC();
while(1){
}
}

/ / página 0x1D
oxímetro de pulso
El artículo presentado se trata de un proyecto de tesis que trata el estudio de las
ondas fotopletismograficas de un oximetro de pulso y su aplicación no invasiva
para monitorear la saturación de la hemoglobina arterial.

// por: Washington Zarate Rospigliosi //


washi_w_z_r@hotmail.com

El oximetro de pulso tada por muchas variables, por


monitorea de forma no ejemplo la luz ambiental, ruido,
invasiva la saturación de la niveles anormales de hemoglo-
hemoglobina arterial, estos bina, función del ritmo y pro-
se basan en la absorción medio del pulso cardíaco, tez
diferencial de la luz para del paciente, movimiento no
determinar el porcentaje de controlado del cuerpo, lo cual
saturación de oxigeno de la influye en el monitoreo y diag-
hemoglobina en la sangre nostico del estado del paciente.
arterial. Estas ondas se muestran en la
Para obtener esta absor- figura 2.
ción diferencial de la luz se Teniendo esta pequeña
utiliza un sensor que transmite introducción para el proyecto
dos longitudes de onda: Luz roja que a continuación les presen-
de 660nm y Luz infrarroja de to, nuestros objetivos serán:
905nm.
Lo que haremos es incidir - Diseñar un circuito capaz de
una luz (roja ó infrarroja) sobre recibir una señal através del
el dedo indice de la mano iz- fotodiodo detector.
quierda, como muestra la figura - Realizaremos adaptación de
1, del cual obtendremos las on- señal proveniente del fotodiodo.
das fotopletismograficas. - Realizaremos cálculos para
La onda fotopletismografi- diseñar los filtros analógicos.
ca del oximetro de pulso repre- - Realizaremos una etapa de
senta el cambio de volumen del amplificación y suma de señal.
flujo sanguíneo. - Realizaremos un programa
La onda fotopletismografi- en el PIC18F4550 para adquirir
ca del oximetro de pulso en un datos analógicos y enviarlos
órgano o extremidad se ve afec- mediante USB.

/ / página 0x1F
- Finalmente realizaremos
un programa que adquiera
datos provenientes del PIC.

Antes de nada, usaremos :

- Un sensor para adultos de


la empresa DOLPHIN.
- TL082 para las diferentes
etapas (filtrado amplificacion
y suma).
- Una fuente ATX del cual
obtendremos los voltajes
simetricos +-12V para los
OPAM, +5V para el PIC.
- Un PIC18F4550.
- El programa C# 2005.
- Pickit 2, para programar el
PIC.
- Usaremos el lenguaje C
para realizar el soft del PIC.

La señal proveniente
del fotodiodo produce una co-
rriente que es función lineal
de la intensidad de la luz,
siendo esta corriente medida
como densidad de potencia
óptica incidente, para ello
necesitaremos convertir esta
“corriente” a voltaje, conse-
guiremos ello mediante un
conversor de corriente a ten-
sión (ver figura 3).
Para obtener la re-
sistencia Rf tenemos que
definir cuanto deseamos ob-
tener a la salida del OPAM,
seria ideal obtener una señal
entre 0V a 5V para efectos
de la adquisición y con-
versión con el ADC del PIC,
veamos entonces:

- En primera instancia los


OPAMs TL082 estarán ali-
mentados con voltaje de 0V

/ / página 0x20
(pin4) y 5V (pin8).
- ¿Esta alimentación produce
una salida de 200mV con Rf
=20M?.
- ¿Cómo halle esta resisten-
cia? De la siguiente manera:

Veamos el cuadro de la figu-


ra 4 que nos da algunas ca-
racteristicas del sensor. Co-
mo observamos en el esque-
ma del conversor de corri-
ente a tensión se tiene las
siguientes ecuaciones:

Se tiene configuracion inver-


sora por ello:
Vs = RfIs - Vd
-Vd = RfIf + Vo

Se tiene que Vd=0 , por ello:


Vo = -RfIs = -RfIf

Por otro lado para determi-


nar la corriente que incide en
el fotodiodo se tiene:

La potencia producida por el


fotodiodo es:
P = Dpa = (3,149nW/cm2) * ción en los OPAMs TL082 - ¿Por qué uso ±12V? Mas
(12,5mm*25,4mm) = 9,99nW con una fuente simple, y al adelante veremos que al
ver experimentalmente que usar filtros, estos atenúan la
La corriente producida por el se atenua la señal a medida señal.
diodo es: que esta entra en dichos
Is = P*Di = (1A/W)*(9,99nW) filtros, ademas que si la En la figura 6 observamos
= 9,99nA etapa de filtrado es alta (me que nuestra onda fotopletis-
refiero a etapas de mayor a mografica esta "MODULA-
Consideramos una tensión octavo orden) esta atenuará DA" con otra frecuencia de
de salida de 200mW, por ello la señal. Por ejemplo yo 44khz, se ve claramente en
se tiene: obtuve 2V a la salida del la parte inferior es la onda
Vo = -200mW conversor tensión / corriente que buscamos.
Rf = -Vo/Is = -200mW / y a la salida de los filtros
9,99nA = 20,02 Mohms obtuve 200mV o menos en
algunos casos. Por ello se
Por ello escogemos una re- debe tener cuidado en Observando la señal
sistencia de 20Mohms (valor colocar etapas de amplifica- del fotodiodo en la cual se
comercial), con lo que nues- ción ya que estas tambien encuentra nuestra onda foto-
tro esquema quedará como amplifican tanto la señal DC pletismografica.
el de la figura 5. como la señal AC en este Nuestro objetivo es ob-
Siendo la alimentación caso. tener la onda fotopletismogra-

/ / página 0x21
ra bien la ventaja de esta
configuración SALLEN KEY
es que podemos colocar
resistencias y capacitores de
la misma magnitud nominal
y con ello nos enfocamos en
el denominador con el obje-
tivo de igualarlo a cero ob-
teniendo:

En ambos casos se obtiene


una frecuencia de resonan-
cia f0, para el caso del filtro
pasa altos se tiene:

fica, sabemos que el cuerpo En la siguiente figura, la


humano produce una fre- número 8, tenemos un filtro Para las frecuencias anterior-
cuencia de 60Hz, la red eléc- pasa-alta de segundo orden y mente especificadas los va-
trica en Perú es de 60Hz, luego en la figura 9 las fun- lores de las resistencias son
además si ampliamos la se- ciones de transferencia. demasiadas altas del orden
ñal de la figura 6 vemos que Respectivamente, aho- de los megaohm, ello trae la
nuestra onda esta modulada
con otra de 44KHz.

Para eliminar estas frecuen-


cias necesitamos realizar fil-
traje:

- filtro pasa-altas: con el fin


de eliminar la componente
DC, la frecuencia de corte se
fija en 0.5Hz.

- filtro pasa-bajas: con el fin


de eliminar las frecuencias
altas , la frecuencia de corte
se fija en 3.5Hz.

Bien como ya definimos las


frecuencias de corte, empe-
zamos a diseñar los filtros
analogicos, para ello usare-
mos la configuracion SA-
LLEN KEY veamos para un
filtro pasa-baja de segundo
orden la figura 7.

/ / página 0x22
la perdida de la señal.
Los valores que yo u-
se son:

- Filtro pasa-altas 2º orden,


R=150k y C=440nF. Obte-
niendo la señal de la figura
10.
- Filtro pasa-bajas 2º orden,
R=360k y C=440nF. Obte-
niendo la señal de la figura
11.
- Filtro pasa-altas de 8º
orden, R=130k y C=440nF.
Obteniendo la señal de la
figura 12.

Aclaraciones:

- Al sensor se envía una


señal para que encienda el
fotodiodo emisor rojo, con
ello obtenemos una señal
fotoletismografica AC y otra
DC, lo mismo sucede cuan-
do encendemos el fotodiodo
emisor infrarrojo.
- La señal AC nos muestra el
cambio en flujo sanguineo
(en este caso el dedo indice
de la mano izquierda). Esta
señal AC es la que vemos en
los diferentes figuras.
- La señal DC, si bien para
nuestros propositos la elimi-
namos, contiene la variación
de la respiración.
- La señal AC fue obtenida
siguiendo las etapas:

/ / página 0x23
Conversor I-V > Filtro pasa-
altas 2º orden > Filtro pasa-
bajas 2º orden > Etapa de
preamplificado > Filtrado de
8º orden. como observamos
en la figura 12.
- Como estamos realizando
un tratamiento a esta señal
observamos en el oscilos-
copio que nuestra señal
alcanza los 200mV, en este
punto lo dejamos con este
valor, al cual le añadiremos
uan etapa de suma y otra de
amplificacion, para obtener
un voltaje adecuado para la
captura en el ADC del PIC.

En líneas generales:

- Se utiliza el PIC18F4458,
que posee un ADC de 12-
bits. Se puede reemplazar
sin problemas por el PIC-
18F4550.
- Lo que hace el codigo es
que cada vez que el PC le
pida valores del ADC este
leera 4 valores y lo enviará la
PC.
- Algunas de la directivas
como #define CONTROL_0
PIN_D0 y #define CON-
TROL_1 PIN_D1 son debido
a que en mi proyecto yo
requiero visualizar las cuatro
ondas. Es decir: del foto-
emisor rojo las ondas AC y
DC , del fotoemisor infrarrojo
las ondas AC y DC. Para ello
uso un multiplexor analogico
ADG411 con el cual
selecciono la onda deseada.
- Para el presente proyecto
solo visualizaremos la señal
Rojo_AC.

/ / página 0x24
/////////////////////////////////////////////////////////////////////////////
//DECLARANDO DISPOSITIVO A USAR
////////////////////////////////////////////////////////////////////////////
#include <18f4458.h>
/////////////////////////////////////////////////////////////////////////////
//DECLARANDO ADC
////////////////////////////////////////////////////////////////////////////
#device ADC=12 // ADC DE 10 BITS
/////////////////////////////////////////////////////////////////////////////
//DECLARANDO FUSES : 20MHZ DE OSC
////////////////////////////////////////////////////////////////////////////
#fuses
HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV2,VREGEN
,NOPBADEN,NOBROWNOUT
/////////////////////////////////////////////////////////////////////////////
//CONFIGURANDO A 48MHZ NECESARIOS PARA USAR EL USB 2.0
////////////////////////////////////////////////////////////////////////////
#use delay(clock=48000000)

/////////////////////////////////////////////////////////////////////////////
//LIBRERIAS DE CONFIGURACION DEL USB
/////////////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN
bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT
bulk/interrupt transfers
#define USB_EP1_TX_SIZE 8 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 3 //size to allocate for the rx endpoint 1 buffer

/ / página 0x25
///////////////////////////////////////////////////////////////////////////////
#define USB_CON_SENSE_PIN PIN_E3
/////////////////////////////////////////////////////////////////////////////
//
// If you are using a USB connection sense pin, define it here. If you are
// not using connection sense, comment out this line. Without connection
// sense you will not know if the device gets disconnected.
// (connection sense should look like this:
// 100k
// VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
// |
// +----/\/\/\/\/\-----GND
// 100k
// (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////

#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <USB_ADC_TESIS.h> //Configuración del USB y los descriptores para este
dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
/////////////////////////////////////////////////////////////////////////////
//DEFINICION DE VARIABLES PARA EL USO ADC
////////////////////////////////////////////////////////////////////////////
#define DERECHA 0

#byte TRISA = 0xF92


#byte TRISD = 0xF95
#byte ADCON2 = 0xFC0
#byte ADCON0 = 0xFC2
#byte ADCON1 = 0xFC1
#byte ADRESL = 0xFC3
#byte ADRESH = 0xFC4
#byte ValorH = 0x028
#byte ValorL = 0x029
////////////////////////////////////////////////////////////////////////////
// DEFINICION DE VARIABLES PARA CONTROL DE CONEX USB
//////////////////////////////////////////////////////////////////////////
//*** CONTROL DE CONEX USB ***//
#define LEDV PIN_B6
#define LEDR PIN_B7

//*** CONTROL LED SENSOR ***//


#define LED_ROJO PIN_C1
#define LED_INFR PIN_C0
//*** CONTROL DE SEÑALES AC-DC***//
#define CONTROL_0 PIN_D0 //SEÑAL ROJO_AC_4
#define CONTROL_1 PIN_D1 //SEÑAL INFR_AC_4
#define CONTROL_2 PIN_D2 //SEÑAL ROJO_DC

/ / página 0x26
#define CONTROL_3 PIN_D3 //SEÑAL INFR_DC

//*** ESTADOS SALIDA DE PINES ***//


#define LED_ON output_high
#define LED_OFF output_low

///////////////////////////////////////////////////////////////////////////
// PARAMETROS: ENVIO Y RECEPCION DATOS ATRAVES DEL USB
//////////////////////////////////////////////////////////////////////////
#define modo recibe[0]
#define param1 recibe[1]
#define param2 recibe[2]

/////////////////////////////////////////////////////////
void main(void) {
///////////////////////
//VARIABLES PARA EL ADC
///////////////////////
int recibe[3]; //declaramos variables
long value;
int i;
int8 Buffer_ADC[8];
int SPO_1[3]=
{
255,254,20
};

LED_OFF(LEDV); //encendemos led rojo


LED_ON(LEDR);
// CONFIGURANDO CANALES ANALOGICOS
setup_adc_ports(AN0_TO_AN1_ANALOG);
// CONFIGURANDO RELOJ DE CONVERSION
setup_adc(ADC_CLOCK_DIV_64 );
//CONFIGURANDO TIPO DE JUSTIFICACION
#asm
bcf 0xFC0,7 // ADFM <- 0 justificacion derecha
#endasm
//CONFIGURANDO TIEMPO DE ADQUISICION
#asm // configura Tacq = 2Tad
bsf 0xFC0,3
bsf 0xFC0,4
bsf 0xFC0,5
#endasm

usb_init_cs(); // inciamos y apagamos el modulo USB , ahora depende de usb_task();

while (TRUE)
{

/ / página 0x27
usb_task(); //habilita periferico usb e interrupciones

if(usb_enumerated()) //si el PicUSB está configurado


{
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{
usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y
almacenamos en recibe
switch (modo)
{

case 0:
{
if (param1 == 0) {LED_OFF(LEDV); LED_OFF(LEDR);} //apagamos los leds
if (param1 == 1) {LED_ON(LEDV); LED_OFF(LEDR);} //encendemos led verde
if (param1 == 2) {LED_OFF(LEDV); LED_ON(LEDR);} //encendemos led rojo
break;
}

case 1:
{
usb_put_packet(1,SPO_1,3,USB_DTS_TOGGLE); //probar si envia un paquete
break;
}

case 2:
{
//LED_ON(LEDV);
/////////////////////////////////////////////////////////
/// CONTROL DE MUX ROJO ///
/////////////////////////////////////////////////////////
/// ENCENDIDO LED ROJO - ACTIVAR MUX ROJO_AC_4 ///
/////////////////////////////////////////////////////////
LED_ON(LED_ROJO); // ENCIENDO LED ROJO
LED_OFF(LED_INFR); // APAGO LED INFRARROJO
/////////////////////////////////////////////
LED_OFF(CONTROL_0); // ACTIVO MUX_ROJO_AC_4
LED_ON(CONTROL_1); // DESACTIVO MUX_INFR_AC_4
LED_ON(CONTROL_2); // DESACTIVO MUX_ROJO_DC
LED_ON(CONTROL_3); //DESACTIVO MUX_INFR_DC
///////////////////////////////
/// configurar canal AN0 //
///////////////////////////////
set_adc_channel(0); // elegimos canal a convertir
delay_us(50);
value=read_adc(); // LEEMOS LA CONVERISION DEL ADC
Buffer_ADC[0]=ValorH; //ALMACENAMOS BITS MSB
Buffer_ADC[1]=ValorL; //ALMACENAMOS BITS LSB
delay_us(50);
set_adc_channel(0); // elegimos canal a convertir

/ / página 0x28
delay_us(50);
value=read_adc(); // LEEMOS LA CONVERISION DEL ADC
Buffer_ADC[2]=ValorH; //ALMACENAMOS BITS MSB
Buffer_ADC[3]=ValorL; //ALMACENAMOS BITS LSB
delay_us(50);
set_adc_channel(0); // elegimos canal a convertir
delay_us(50);
value=read_adc(); // LEEMOS LA CONVERISION DEL ADC
Buffer_ADC[4]=ValorH; //ALMACENAMOS BITS MSB
Buffer_ADC[5]=ValorL; //ALMACENAMOS BITS LSB
delay_us(50);
set_adc_channel(0); // elegimos canal a convertir
delay_us(50);
value=read_adc(); // LEEMOS LA CONVERISION DEL ADC
Buffer_ADC[6]=ValorH; //ALMACENAMOS BITS MSB
Buffer_ADC[7]=ValorL; //ALMACENAMOS BITS LSB
set_adc_channel(0); // elegimos canal a convertir
delay_us(50);
usb_put_packet(1,Buffer_ADC,8,USB_DTS_TOGGLE);
//LED_OFF(LEDV);
break;
}

}
}
}
}
}

/ / página 0x29
/ / página 0x2A
kernel: escuela de
jovenes inventores
KERNEL es una escuela para pequeños inventores, que nace como una iniciativa
particular de Diego Ferrari. En esta escuela, los niños pequeños toman contacto
con la electricidad y la electrónica, construyendo dispositivos como los que ves en
las fotos. Hemos recibido una carta de Diego en la que nos cuenta sobre el origen
y el trabajo que realizan, y queriamos compartirla con ustedes.

// por: Diego Ferrari //


ad-ferrari@hotmail.com

Alla por fines del 2007, tecnologia, y de mis hijos,


luego de dar una conferencia quienes estuvieron de acuerdo
sobre Mapas Mentales, nos en encarar el proyecto y colabo-
ponemos con algunos de los raron de diversas maneras.
participantes a charlar acerca Necesitabamos un espa-
de la necesidad de ofrecerles cio fisico para el KERNEL, luego
a los jovenes de la ciudad de de buscar sin resultado dicho
Alta Gracia diferentes opcio- espacio, decidi no bajar los
nes en cuanto a actividades brazos y ver la manera de dividir
educativas, sobre todo aque- mi casa, a fin de conseguir un
llas con alguna orientacion espacio para armar dos aulas.
con salida laboral. Teniamos en ese momen-
Hacia ya unos años que to solo el dinero para adquirir
venia realizando actividades de parte de los materiales para rea-
capacitacion laboral en el area lizar la obra, en diciembre del
tecnologica, precisamente elec- 2008 comenzamos con Nico, mi
tricidad y electronica industrial, hijo mayor, a realizar las tareas
lo que me habia facilitado cier- de albañileria para dividir
tos contactos con gente del area nuestra casa.
de la educacion tecnologica. Nos llevo casi seis meses
A principios del 2008 ya terminar dicha obra. Nicolas
contaba con el apoyo de mu- tenia en ese momento solo quin-
chos profesionales de la educa- ce años y colaboro hasta el final
cion o de algun area relaciona- de la obra. No te puedo descri-
da con la tecnologia para armar bir el orgullo como padre por su
un centro de capacitacion. Pero noble actitud y compromiso para
fundamentalmente, tuve el apo- con el proyecto del KERNEL.
yo incondicional de mi esposa, Puedo decir que KER-
quien es tambien docente de NEL nacio no solo de un sueño

/ / página 0x2B
mio, fue un sueño de toda mi
familia.
Lo que hoy son la au-
las del KERNEL, antes eran
la cochera y el living de la
casa.
Una vez terminada la
obra civil, largamos una cam-
paña de difusion de la Es-
cuela de Jovenes Inventores
a traves de correos electro-
nicos y afiches pegados en
las vidrieras de los comer-
cios de la ciudad.
Captamos tambien la
atencion de algunos medios
locales que publicaron nues-
tro proyecto como de interes
general para la comunidad.
Actualmente esta sien-
do tratado en el Consejo Deli-
berante de la ciudad para
declararlo de interes munici-
pal.
Al dia de hoy en la es-
cuela de jovenes Inventores
de Kernel estamos enseñan-
do ecotecnologia, aplicacio-
nes electronicas e informati-
cas a un grupo de alumnos
con el objetivo de formar futu-
ros tecnologos capacitados
para crear nuevos disposi-
tivos tecnologicos, e incluso
gestionar las patentes de sus
inventos o modelos de utili-
dad bajo nuestra tutoria.
Hemos llevado adelan-
te y cotinuamos actualmente
con una campaña de RECI-
CLADO ECOTECNOLOGI-
CO, donde hemos instalado
con el apoyo de un comer-
ciante de la ciudad, un
receptaculo para pilas y
baterias que luego llevamos
a la empresa que realiza su
tratamiento, y un contenedor
donde recibimos donaciones
de todo tipo de artefacto

/ / página 0x2C
electrico, electronico, electro-
mecanico, funcione o no,
para realizar las practicas en
el KERNEL y reciclar partes
y componentes de los mis-
mos.
De esta manera nues-
tros alumnos han aprendido
desarmando muchos disposi-
tivos que son costosos y
resultaria muy honeroso
realizar dichas practicas si
tuvieramos que comprarlos,
por ejemplo comprender el
funcionamiento y arquitec-
tura de un disco duro de PC
a partir del desarme de un
disco roto.
Se proveen ademas a
traves de esta metodologia
de gran parte de los com-
ponentes necesarios para
armar los proyectos.
Quiero agradecer a los
conocidos y amigos que nos
han apoyado en esta cam-
paña de reciclado, y a la
poblacion en general, ya que
la respuesta obtenida a
traves de la misma ha sido
excelente.
Cabe destacar tam-
bien el trabajo y el apoyo
incondicional del Profesor
Leandro Alem, quien es mi
co-equiper en el dictado de
las clases de electronica. Su
labor ha sido fundamental
para el desarrollo de los
proyectos de dicha area.
Estamos reciclando
placas de PC y armando
muy de a poco las computa-
doras que equiparan el labo-
ratorio de informatica, dode
funcionara ademas una
biblioteca virtual.
Estamos realizando
las PRIMERAS JORNADAS
ESCOLARES DE DIFUSION

/ / página 0x2D
Y SENSIBILIZACION AMBI-
ENTAL, DESARROLLO SUS-
TENTABLE Y ECOTECNO-
LOGIAS KERNEL en escue-
las primarias y secundarias
de la ciudad y zonas de
influencia.
Las mismas consisten
en una charla debate de dos
horas dirigida a los alumnos
de estas instituciones y
orientadas en cada caso a
temas particulares de su
curricula y a la problematica
ambiental local y regional y
global.
Recientemente hemos
realizado un acuerdo de vin-
culacion con el Radio Club
Alta Gracia, este consiste en
el lanzamiento de un curso
de Electronica en la sede del
radioclub, la puesta en mar-
cha de una biblioteca virtual
abierta al publico en dicha
sede, y la creacion de un
centro de actividades cultura-
les a cargo de un grupo de
profesores de musica y tea-
tro de nuestra localidad.
Esperamos para el
año proximo poder realizar
algunos trabajos practicos de
microcontroladores basando-
nos en tus publicaciones,
tener listo nuestro laboratorio
de informatica y poder relizar
un ciclo de conferencias con
nuestros mentores del area
tecnologica.
El presente me demu-
estra que lo que ayer fue un
sueño utopico hoy es posible
gracias al trabajo, la fe y el
apoyo de aquellos que creen
que una sociedad mejor es
posible a traves del camino
de la educacion de las futu-
ras generaciones. Apuesto
todo en ello.

/ / página 0x2E
PIC16F628A en assembler
tercera parte
Siguiendo con el tutorial de assembler y el PIC16F628A abordaremos los módulos
de temporización Timer0, Timer1, Timer2 y el módulo USART, y como es
costumbre con ejemplos para su utilización.

// por: Alejandro Casanova //


inf.pic.suky@live.com.ar

El microcontrolador cual puede ser dividida opcional-


PIC16F628A cuenta con tres mente por el preescalador. Este
módulos muy importantes e modo es seleccionado al limpiar
indispensables para gran el bit T0CS (OPTION_REG<5>).
cantidad de circuitos. Ellos En este modo si se realiza una
son los temporizadores y el escritura al registro TMR0, su
módulo de comunicación incremento es inhibido por los
serial (USART). siguientes dos ciclos de ins-
trucción (Tcy) y si el prees-
calador está asignado se pierde
la cuenta pero no su asignación.
El Timer0 es un
temporizador/contador de 8 bits.
El registro principal de este
módulo es TMR0 (0x01) el cual En el modo contador, la
se incrementa continuamente a señal que controla los incremen-
una frecuencia seleccionable tos del registro TMR0 es una
manejada por un preescalador y señal externa que proviene de
el reloj interno Fosc/4 (modo la patita T0CKI poniendo el bit
temporizador) o bien, por un T0CS en alto. Se puede
preescalador y una señal ex- seleccionar la transición que pr-
terna (modo contador). ovoca los incrementos mediante
el bit “Timer0 Source Edge
Select“ T0SE (OPTION_REG
<4>), limpiando este bit se
En el modo temporizador selecciona la transición de
la señal de reloj que controla el subida, mientras que al ponerlo
incremento del registro TMR0 en alto se selecciona la de
es la frecuencia Fcy = Fosc/4, la bajada.

/ / página 0x30
Observación: En este modo,
la señal conectada a TOCKI
es muestreada durante los
ciclos Q2 y Q4 del reloj
interno, por ello es necesario
que permanezca en alto al
menos por 2 Tosc más un
pequeño retardo de 20nseg
y lo mismo en bajo. (Es
decir, señales demasiado
rápidas no podrán ser detec-
tadas).

El preescalador es un
divisor de frecuencia del
módulo seleccionable. Pero
este está compartido entre el
timer0 y el módulo Watch-
dog, sin embargo sólo puede
conectarse a uno de los dos
y esto se establece mediante
el bit PSA (OPTION_REG
<3>). Con este bit en alto el
preescalador es asig-nado al
reloj del Watchdog, mientras
que con un nivel bajo en
PSA el preescalador dividirá
la frecuencia que maneja al
Timer 0.
La selección del valor
de división de frecuencia del
preescalador se puede rea-
lizar mediante los bits PS2,
PS1, PS0 (OPTION_REG
<2:0>) de acuerdo a la
siguiente tabla:

PS2 PS1 PS0 Divisor


000 1/2
001 1/4
010 1/8
011 1/16
100 1/32
101 1/64
110 1/128
111 1/256

/ / página 0x31
Frecuencia en 256, lográn- así sucesivamente, al reci-
dose unos 65.5 ms aprox. clarse se activa (en alto) la
La interrupción de Para un cristal de 4MHz.- bandera TMR1IF (PIR1<0>),
TMR0 se genera cuando el Para ejemplificar el la cual puede ser utilizada
registro TMR0 se desborda uso de esta interrupción hare- para generar una interrup-
pasando del 255 a 0. Este mos titilar un led conectado ción, o bien, para ser consul-
desbordamiento activa el bit al PIN RB0 cada 200 ms, tada por poleo.
T0IF (INTCON<2>) que ge- para ello haremos una
nerará una interrupción si temporización con TMR0 de
esta habilitada mediante el 50ms y contaremos 4 desbor-
bit T0IE (INTCON<5>). La des del mismo para lograr Este modo se selec-
interrupción TMR0 no puede los 200 ms necesarios. Lo ciona limpiando el bit
sacar a la CPU del estado interesante de usar interrup- TMR1CS (T1CON<1>) y el
SLEEP ya que el tempori- ción es que con el micro se Timer se incrementa (si no
zador está bloqueado duran- puede estar ejecutando cual- se considera preescalador)
te este estado. quier tarea y no ocupar este en cada ciclo de instrucción
tiempo en un bucle de (a la frecuencia Fosc/4). El
demora. El hardware necesa- preescalador que se puede
rio es equivalente al primer intercalar entre el reloj
ejemplo realizado. Fosc/4 y el registro TMR1
Para calcular una puede tener sólo uno de 4
temporización se necesita el valores: 1/1, 1/2, 1/4 y 1/8.
tiempo de un ciclo de En este caso la temporiza-
instrucción (es decir 1 micro- El siguiente programa ción de calcula:
segundo, si estas trabajando realiza el conteo del número Temporización = Ciclo de
con un XT de 4 Mhz de veces que se produce instrucción * (65536-TMR1)
(4/Fosc)), el valor del Divisor una transición de bajo a alto * Divisor de Frecuencia
de Frecuencia (el que en la patita T0CKI. El valor
seleccionabas con los bits del contador se incrementará Vemos que la máxima tempo-
PS2, PS1 y PS0), y final- una vez por cada dos transi- rización posible es con
mente el complemento del ciones (a modo de ejemplo TMR1 = 0 y Divisor de
valor cargado en TMR0 (es fijamos preescaler en 1:2), y Frecuencia en 8, lográndose
decir 256-TMR0). Entonces al detectarse 10 cambiamos unos 524.3 ms aprox. para
tenemos: el estado del Led conectado cristal de 4MHz.
a RB0.
Temporización = Ciclo de
instrucción. (256-TMR0)
.Divisor de Frecuencia El Timer 1 también
El Timer 1 a diferencia puede operar como contador
De este modo si queremos del Timer 0 es un temporiza- asíncrono o síncrono contan-
temporizar 4 ms con un dor / contador de 16 bits. El do los flancos ascendentes
divisor de frecuencia de 32, conteo es realizado por dos que ocurren en pin RB6 /
tendríamos: registros de 8 bits: (TMR1H T1OSO / T1CKI poniendo a
(0Fh) y TMR1L (0Eh) ) que 1 el bit TMR1CS. Después
TMR0 = 256 - (400uS/1uS * son tanto leíbles como escri- de que el Timer1 se progra-
32) = 131 bibles. me en modo contador, el
Así, el registro TMR1 módulo esperará un flanco
Vemos que la máxima se incrementa de 0000h a de bajada antes de comen-
temporización posible es con FFFFh y en la siguiente zar los incrementos con los
TMR0 = 0 y Divisor de cuenta se reinicia en 0000h y flancos de subida.

/ / página 0x32
; **** EJEMPLO #1: MODO TEMPORIZADOR
; **** Encabezado ****
List p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
;**** Definición de variables ****
Contador equ 0x20 ; Contador para detectar 4 desbordes de TMR0.-
W_Temp equ 0x21 ; Registro para guardar temporalmente W.-
STATUS_Temp equ 0x22 ; Registro para guardar temporalmente STATUS

Led equ 0 ; Definimos Led como el bit cero de un registro, en este caso
; PORTB.-

;**** Inicio del Micro ****


Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Vector de Interrupción ****
org 0x04 ; Atiendo Interrupción.-
goto Inicio_ISR

; **** Programa Principal ****


;**** Configuración de puertos ***
org 0x05 ; Origen del código de programa.-
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'11111110' ; RB0 como salida.-
movwf TRISB
movlw b'00000111' ; Se selecciona TMR0 modo temporizador y preescaler de 1/256.-
movwf OPTION_REG
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
bcf PORTB,Led ; El Led comienza apagado.-
movlw 0x3D ; Cargamos 61 en TMR0 para lograr aprox. 50ms.-
movwf TMR0
clrf Contador ; Iniciamos contador.-
movlw b'10100000' ; Habilitamos GIE y T0IE (interrupción del TMR0)
movwf INTCON
;**** Bucle ****
Bucle
nop ; Aquí el micro puede ejecutar cualquier otra tarea
goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-

;**** Rutina de servicio de Interrupción ****

;---> Aquí haremos copia de respaldo para mostrar como se hace aunque no es..
; ..necesario ya que el micro no hace otra tarea mientras tanto <---
; Guardado de registro W y STATUS.-
Inicio_ISR

/ / página 0x33
movwf W_Temp ; Copiamos W a un registro Temporario.-
swapf STATUS, W ;Invertimos los nibles del registro STATUS.-
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal.-
;**** Interrupción por TMR0 ****
ISR
btfss INTCON,T0IF ; Consultamos si es por TMR0.-
goto Fin_ISR ; No, entonces restauramos valores.-
movlw 0x3D ; Actualizo TMR0 para obtener una temporización de 50 ms..
movwf TMR0 ; .. Se hace al principio para mayor precisión.

incf Contador ; Si, Incrementamos contador


movlw 0x04 ; Consultamos si se han producido 4 desbordes..
subwf Contador,0 ; ..para obtener 200 ms.-
btfss STATUS,Z ;
goto Fin_ISR ; No, salgo.-
clrf Contador ; Si, reseteo Contador y controlo Led.-
btfss PORTB,Led ; Si esta apagado, prendo y viceversa.-
goto Prendo_led
bcf PORTB,Led ; Apago Led.-
goto Fin_ISR ; Restauro valores.-
Prendo_led
bsf PORTB,Led ; prendo Led.-
; Restauramos los valores de W y STATUS.-
Fin_ISR
bcf INTCON,T0IF ; Borro bandera de control de Interrupción.-
swapf STATUS_Temp,W ; Invertimos lo nibles de STATUS_Temp.-
movwf STATUS
swapf W_Temp, f ; Invertimos los nibles y lo guardamos en el mismo registro.-
swapf W_Temp,W ; Invertimos los nibles nuevamente y lo guardamos en W.-
retfie ; Salimos de interrupción.-
;..........................................

end

Contador sincronizado: Si
SYNC T1 se borra, la
entrada externa de reloj se
sincroniza con la fase interna
de reloj. La sincronización se
produce después de la etapa
del Predivisor. Este bloque
es un contador cíclico
asíncrono.

Contador asincrónico: Si el
bit de control SYNC T1 se
activa, la entrada de reloj
externa no queda sincroni-
zada con el reloj interno.

/ / página 0x34
; **** EJEMPLO #2: MODO CONTADOR
; **** Encabezado ****
List p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
;**** Definición de variables ****
Contador equ 0x20 ; Contador para detectar 4 desbordes de TMR0.-
W_Temp equ 0x21 ; Registro para guardar temporalmente W.-
STATUS_Temp equ 0x22 ; Registro para guardar temporalmente STATUS

Led equ 0 ; Definimos Led como el bit cero de un registro, en este caso
; PORTB.-

;**** Inicio del Micro ****


Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Vector de Interrupción ****
org 0x04 ; Atiendo Interrupción.-
goto Inicio_ISR

; **** Programa Principal ****


;**** Configuración de puertos ***
org 0x05 ; Origen del código de programa.-
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'11111110' ; RB0 como salida.-
movwf TRISB
movlw b'00100000' ; Se selecciona TMR0 modo Contador, transición positiva
movwf OPTION_REG ; y preescaler de 1/2.-
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
bcf PORTB,Led ; El Led comienza apagado.-
movlw 0xFB ; Cargamos 251 en TMR0 para contar 10 pulsos en RA4/TOCKI.-
movwf TMR0
movlw b'10100000' ; Habilitamos GIE y T0IE (interrupción del TMR0)
movwf INTCON
;**** Bucle ****
Bucle
nop ; Aquí el micro puede ejecutar cualquier otra tarea
goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-

;**** Rutina de servicio de Interrupción ****

;---> Aquí haremos copia de respaldo para mostrar como se hace aunque no es..
; ..necesario ya que el micro no hace otra tarea mientras tanto <---

; Guardado de registro W y STATUS.-


Inicio_ISR
movwf W_Temp ; Copiamos W a un registro Temporario.-

/ / página 0x35
swapf STATUS, W ;Invertimos los nibles del registro STATUS.-
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal.-
;**** Interrupción por TMR0 ****
ISR
btfss INTCON,T0IF ; Consultamos si es por TMR0.-
goto Fin_ISR ; No, entonces restauramos valores.-
btfss PORTB,Led ; Si, Controlamos Led.Si esta apagado, prendo y viseversa.-
goto Prendo_led
bcf PORTB,Led ; Apago Led.-
Actualizo_TMR0 ; Cargamos 251 en TMR0 para contar 10 pulsos en
; RA4/TOCKI.
movlw 0xFB ; d'251'
movwf TMR0
bcf INTCON,T0IF ; Borro bandera de control de Interrupción.-
goto Fin_ISR ; Restauro valores.-
Prendo_led
bsf PORTB,Led ; prendo Led.-
goto Actualizo_TMR0
; Restauramos los valores de W y STATUS.-
Fin_ISR
swapf STATUS_Temp,W ; Invertimos lo nibles de STATUS_Temp.-
movwf STATUS
swapf W_Temp, f ; Invertimos los nibles y lo guardamos en el mismo registro.-
swapf W_Temp,W ; Invertimos los nibles nuevamente y lo guardamos en W.-
retfie ; Salimos de interrupción.-
;..........................................
end

El temporizador continuará do especialmente para


funcionando durante el esta- trabajar a 32.768 Hz. Bits de selección
do de SLEEP, y puede provo- del valor del divisor de
car una interrupción en su frecuencia del preescalador:
desbordamiento que saque 1 1 = divisor 1/8
de su “siesta” a la CPU. El Timer 1 posee un bit para 1 0 = divisor 1/4
habilitación / deshabilitación, 0 1 = divisor 1/2
este es el bit TMR1ON 0 0 = divisor 1/1
(T1CON<0>) y habilita en
Se debe conectar un alto. Además, el Timer 1 Bit de
cristal de cuarzo entre las posee una entrada interna control de habilitación de
patillas T1OSI (entrada) y de RESET, el cual puede ser oscilador para TMR1.
T1OSO (salida del amplifica- activado por el módulo CCP 1 = Oscilador habilitado.
dor oscilador). El oscilador (Más adelante se explicará 0 = Oscilador anulado.
se habilita con el bit en detalle). A continuación se
T1OSCEN (T1CON<3>), y describe el principal registro Bit de
funcionará en bajo consumo relacionado con el Timer 1 y control de sincronización de
a partir de 200 KHz. Este todos sus bits: la entrada de reloj externo de
oscilador continúa funcionan- Timer1.
do aunque la CPU entre en Registro T1CON (10h) TMR1CS = 1
modo SLEEP, y está diseña- 1 = Entrada de reloj externo

/ / página 0x36
no sincronizada. La frecuencia que incremen- o bien en la rutina que la
0 = Entrada de reloj externo ta al registro TMR2 puede detecta por poleo. El valor de
sincronizada ser dividida por un prees- división del postescalador
TMR1CS = 0 calador por un factor de 1/1, puede establecerse por soft-
En esta circunstancia, Timer- 1/4 o 1/16, seleccionable por ware mediante los bits
1 usa el reloj interno. los bits T2CKPS1:T2CKPS0 T2OUPS3:T2OUPS0
(T2CON<1:0>) (T2CON<6:3>).
Bit de
selección de la fuente de reloj Nota: Los contadores prees-
1 = Modo contador (fuente caladores y postescaladores
de reloj: patita RC0 / T1OSO se borran con cualquiera de
/ T1CKI) En operación, el estos acontecimientos:
0 = Modo Temporizador contenido del registro TMR2
(fuente de reloj Fosc/4) se compara continuamente - Una escritura en el registro
con un registro de periodo TMR2.
Bit de denominado PR2 (92h) cuyo - Una escritura en el registro
habilitación / deshabilitación valor podemos establecer T2CON.
del Timer 1: por software. - Cualquier reset del disposi-
1 = habilita Timer 1 Cada vez que la tivo.
0 = Deshabilita Timer 1 cuenta de TMR2 es igual a
PR2, se reinicia el conteo en El registro TMR2 no se borra
Para ejemplificar hare- TMR2 desde cero, y además cuando se escribe en
mos uso del simple ejemplo se genera una señal de T2CON. En este caso la
#3, donde lo utilizamos como salida, la cual es tratada por temporización de calcula de
temporizador. Se hará titilar un postescalador, para poder la siguiente manera:
un led conectado al PIN RB0 generar una señal TMR2IF
cada 300ms. Como se pue- (PIR1<1>) que puede ser Temporización = Ciclo de
de ver es idéntico al ejemplo usada para solicitar una instrucción * (PR2-TMR2) *
realizado para Timer 0 del interrupción, o para ser leída Divisor de Frecuencia Pre *
PIC16F84A, solo que en por poleo. Divisor de frecuencia Post
este caso no necesitaremos
un registro adicional para Vemos que la máxima
lograr la demora deseada. temporización posible es con
El postescalador divi- TMR2 = 0, Divisor de Fre-
de la frecuencia con que cuencia Prescalador en 16,
ocurre una activación de la Divisor de frecuencia Postes-
El Timer es un tempo- bandera TMR2IF, es decir, si calador en 16, lográndose
rizador (sin opción de traba- el valor del postescalador es unos 65.5 ms aprox. para un
jar como contador) de 8 bits 1/1, esta bandera se activará cristal de 4MHz.
con preescalador y postesca- cada vez que TMR2 se
lador. Su registro principal reinicie, en cambio, si es A continuación se describe el
denominado TMR2 (11h) es 1/16 (por ejemplo), TMR2IF principal registro relacionado
un registro de 8 bits que se se activará cada 16 reinicios con el Timer 2 y todos sus
incrementa continuamente a de TMR2. En forma similar a bits.
la frecuencia seleccionada los otros dos Timers, esta
de Fosc/4 dividida por un bandera debe ser limpiada Registro T2CON (12h)
preescalador. previamente, si se quiere
detectar su activación, esto
puede ser hecho en la rutina Bits de selección
de atención a la interrupción, del valor del divisor de fre-

/ / página 0x37
; **** EJEMPLO #3: MODO TEMPORIZADOR
; **** Encabezado ****
List p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON

;**** Definiciones para el ensamblador ****


#DEFINE Led PORTB,0 ; Led ubicado en Puerto B, bit 0.-

;//////////////////////////////////////////
;**** Inicio del Micro ****
Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Vector de Interrupción ****
org 0x04 ; Atiendo Interrupción.-
goto ISR

; **** Programa Principal ****


;**** Configuracion de puertos ***
org 0x05 ; Origen del código de programa.-
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'11111110' ; RB0 como salida.-
movwf TRISB
bcf STATUS,RP0 ; Banco 0.-
movlw b'00110001' ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.-
movwf T1CON
bcf Led ; El Led comienza apagado.-
movlw 0x6D ; Cargamos 28036 en TMR1 para lograr 300ms.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
bsf STATUS,RP0 ; Banco 1.-
bsf PIE1,TMR1IE ; Activar interrupción por TMR1.
bsf INTCON,GIE ; Habilitación general de interrupciones.-
bsf INTCON,PEIE ; Habilitación de Interrupción por periféricos.-
bcf STATUS,RP0 ; Banco 0.-
;**** Control de Led ****
Bucle
nop ; Aquí el micro puede ejecutar cualquier otra tarea
goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-

;**** Rutina de servicio de Interrupción ****


;**** Interrupción por TMR1 ****
ISR
btfss PIR1,TMR1IF ; Consultamos si es por TMR1.-
retfie ; No, salimos de interrupción.-

/ / página 0x38
btfss Led ; Si, Controlamos Led. Si esta apagado, prendo y viceversa.-
goto Prendo_led
bcf Led ; Apago Led.-
Actualizo_TMR1 ; Actualizo TMR1 para obtener una temporización de 300 ms.-
movlw 0x6D ; Cargamos 28036 en TMR1.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
goto Fin_ISR ; Restauro valores.-
Prendo_led
bsf Led ; Prendo Led.-
goto Actualizo_TMR1
Fin_ISR
bcf PIR1,TMR1IF ; Borro bandera de control de Interrupción.-
retfie ; Salimos de interrupción.-
;..........................................

end

cuencia del postescalador,


de acuerdo a la siguiente
tabla:

0 0 0 0 = divisor 1/1
0 0 0 1 = divisor 1/2
0 0 1 0 = divisor 1/3

1 1 1 1 = divisor 1/16

Bit de
encendido del Timer 2
1 = Enciende (energiza) el
Timer 2
0 = Apaga (desconecta) el
Timer 2

tos integrados convertidores


Bits de configura- A/D y D/A, EEPROMs serie,
ción del valor del preescala- La USART puede etc. La USART del PIC
dor de acuerdo a la siguiente configurarse como sistema puede ser configurada para
tabla: asíncrono -full dúplex-, que operar en tres modos:
0 0 = divisor 1/1 puede comunicarse con dis-
0 1 = divisor 1/4 positivos periféricos como - Modo Asíncrono (Full dú-
1 x = divisor 1/16 ordenadores personales u plex, transmisión y recepción
otros microcontroladores, o simultaneas)
En el ejemplo #4 podemos puede configurarse como sis- - Modo síncrono Maestro
ver la configuración necesa- tema síncrono -half dúplex-, (Hald duplex)
ria para lograr una temporiza- que puede comunicarse con - Modo síncrono Esclavo
ción de 20ms. periféricos tales como circui- (Hald duplex)

/ / página 0x39
:EJEMPLO #4: TEMPORIZACION DE 20MS
bcf STATUS,RP0 ; Banco 0.-
movlw b'01000110' ; Se selecciona TMR2, preescaler de 1/16, postescaler 1/8.-
movwf T2CON
bsf STATUS,RP0 ; Banco 1.-
movlw 0x9D ; Cargamos 157 en PR2 para lograr 20ms.-
movwf PR2
bsf PIE1,TMR2IE ; Activar interrupción por TMR2.
bsf INTCON,GIE ; Habilitación general de interrupciones.-
bsf INTCON,PEIE ; Habilitación de Interrupción por periféricos.-
bcf STATUS,RP0 ; Banco 0.-

Control de interrupción:

ISR
btfss PIR1,TMR2IF ; Consultamos si es por TMR2.-
retfie ; No, salimos de interrupción.-
. ; Si, rutina de interrupción.
.
.
Fin_ISR
bcf PIR1,TMR2IF ; Borro bandera de control de Interrupción.-
retfie ; Salimos de interrupción.-

En este modo la
USART usa un formato
estándar NRZ asíncrono, el
cual para la sincronización
usa: 1 bit de inicio (I), 8 o 9
bits de datos y 1 bit de paro
(P). Mientras no se están
transmitiendo datos la
USART envía continuamente
un bit de marca. El modo
asíncrono se selecciona
limpiando el bit SYNC del
registro TXSTA (98H). El
modo asíncrono es deshabili-
tado durante el modo SLEEP.
Cada dato es transmi- de la USART consta de 3 El
tido y recibido comenzando módulos fundamentales: dato en la patita de recep-
por el LSB. El hardware no ción (RB1/RX/DT) es mues-
maneja bit de Paridad, pero · El circuito de muestreo treado tres veces para poder
el noveno bit puede ser usa- · El generador de frecuencia decidir mediante un circuito
do para este fin y manejado de transmisión (Baud Rate) de mayoría, si se trata de un
por software. · El transmisor asíncrono nivel alto o un nivel bajo.
El módulo Asíncrono · El receptor asíncrono.

/ / página 0x3A
el registro TXREG. Si se un dato incorrecto de nueve
escribe un dato seguido de bits en el registro TSR. De
otro a TXREG el primero se acuerdo a lo anterior, la
Este generador consis- transfiere inmediatamente a inicialización del módulo de
te de un contador/divisor de TSR y el otro tiene que transmisión consiste en los
frecuencia de 8 bits contro- esperar hasta que el TSR siguientes pasos:
lado por el registro SPBRG termine de enviar el bit de
(99H) . De tal manera que la Stop del primero. Durante 1. Inicializar baud rate escri-
frecuencia de transmisión se esta espera TXIF permanece biendo al registro SPBRG el
calcula de acuerdo a la tabla en bajo. Mientras el bit divisor adecuado y opcional-
de la figura 6. indicador TXIF señala el mente al bit BRGH.
En esta tabla X=valor estado del registro TXREG, 2. Habilitar comunicación
de 8 bits en el registro del otro bit, TRMT (TXSTA<1>), asíncrona limpiando el bit
divisor, SPBRG. El bit BRGH muestra el estado del SYNC y poniendo el bit
corresponde a TXSTA<2>. registro TSR. El bit de estado SPEN.
En el datasheet del TRMT es de lectura, y se 3. Si se van a usar interrup-
PIC16F628/648A hay tablas activa cuando el registro ciones, poner el bit TXIE
donde se muestran algunos TSR está vacío. Ninguna (PIE<4>).
valores baud estándares, el interrupción está unida a 4. Poner el bit TX9 si se
divisor necesario (X = este bit por lo que TRMT desea transmitir datos de 9
SPBRG) bajo diferentes fre- está pensado para ser bits
cuencias Fosc y el error consultado por “poleo” (sin 5. Habilitar transmisión po-
producido en porcentaje. usar interrupciones). niendo el bit TXEN, lo cual
Para habilitar el mó- pondrá el bit TXIF.
dulo de transmisión es 6. Colocar el noveno bit del
necesario poner en alto el bit dato en TX9D si se están
El corazón de este TXEN (TXSTA<5>), mientras usando datos de 9 bits.
módulo es el registro de corri- no se habilite el módulo, la 7. Cargar el dato al registro
miento TSR y la única ma- patita de transmisión (RB2 / TXREG (inicia la transmi-
nera de acceder al registro TX / CK) se mantiene en alta sión).
TSR es a través del registro impedancia. Si TXEN es
TXREG (19H). deshabilitada a la mitad de
Para transmitir un una transmisión, está será
dato, el programa deberá abortada y el transmisor será Una vez que se ha
ponerlo primero en el registro reseteado. seleccionado el modo asín-
TXREG. En cuanto el TSR Para seleccionar una trans- crono, la recepción se habi-
termina de enviar el dato que misión a 9 bits, el bit TX9 lita poniendo en alto el bit
tenía, enviando el bit de (TXSTA<6>) deberá activar- CREN (RCSTA<4>).
paro, se transfiere el dato se, y el noveno bit deberá El dato es recibido
contenido en TXREG (si hay escribirse en TX9D (TXSTA mediante la línea RB1 / RX /
alguno). En cuanto el dato de <0>). El noveno bit se DT y se conduce hasta el blo-
TXREG es transferido al escribirá antes de cargar los que Data Recovery (Recupe-
TSR el TXREG queda vacío 8 bits de datos en el registro ración de dato), la cual mane-
y esta condición se indicada TXREG. Esto es necesario, ja un registro de corrimiento
mediante el bit bandera TXIF porque al escribir un dato en de alta velocidad (16 veces
(PIR1<4>), el cual se pone el registro TXREG puede el Baud rate).
en alto. Este bit NO puede tener lugar una transferencia El corazón del recep-
ser limpiado por software, inmediata del dato al registro tor es el registro de corri-
solamente se borrará cuando TSR (si TSR está vacío). En miento RSR. Este registro no
un nuevo dato se cargue en este caso, se habrá cargado es accesible por software,

/ / página 0x3B
pero al capturar del bit de lo cual ocasiona un transfe- El error de concordancia
STOP el dato de RSR es rencia automática del dato FERR (RCSTA<2>) se activa
transferido automáticamente recibido a RCREG, esto des- si un bit de STOP se lee en
al registro RCREG (1Ah) si truirá el primer dato recibido nivel bajo. Tanto este
éste está vacío y al mismo y activará el indicador de indicador como el noveno bit
tiempo es puesto en alto la desbordamiento OERR (RC- RX9D se memorizan en el
bandera de recepción RCIF STA <1>). mismo canal que el dato
(PIR1<5>). La única manera La única manera de recibido, de manera que al
de limpiar la bandera RCIF limpiar el bit OERR una vez leer RCREG se actualizan
es leyendo el/los datos del que ha sido activado es FERR y RX9D con nuevos
registro RCREG. El RCREG reseteando el módulo de valores, por lo cual estos bits
es un registro de doble buffer recepción (limpiando CREN deberán ser leídos antes de
(una FIFO de dos posi- y volviéndolo a poner). Si el leer RCREG para no perder
ciones). bit OERR está en 1, se su información.
Si las dos posiciones inhibe la transferencia desde De acuerdo a lo ante-
del registro RCREG están el registro RSR hasta el rior, la inicialización del mó-
llenas (no han sido leídas) y registro RCREG, por lo que dulo de recepción es como
se detecta el bit de Stop de es vital borrar el bit OERR, si sigue:
un tercer dato de recepción, estuviese activado. 1. Inicializar el baud rate es-
cribiendo al registro SPBRG
el divisor adecuado y opcio-
nalmente al bit BRGH.
2. Habilitar el puerto serie
asíncrono limpiando el bit
SYNC y poniendo el bit
SPEN.
3. Si se van a usar inte-
rrupciones, poner el bit RCIE
(PIE<5>).
4. Si se desea recepción de
datos de 9 bits se deberá
poner el bit RX9 (RCSTA
<0>).
5. Habilitar la recepción
poniendo el bit CREN (RC-
STA <4>).
6. El bit RCIF se pondrá
cuando la recepción de un
dato se complete y se gene-
rará una interrupción si RCIE
está puesto.
7. Leer el registro RCSTA
para obtener el noveno bit (si
se están recibiendo datos de
9 bits) o para determinar si
ha ocurrido un error de recep-
ción.
8. Leer los 8 bits del dato
recibido leyendo el registro
RCREG.

/ / página 0x3C
1. Si ocurrió algún error este Ejemplo: En este caso ejemplo donde esperamos
se limpia al limpiar el bit usando el módulo Usart del dato desde PC, lo recibimos
CREN, el cual deberá volver PIC16F628A y la interrupción y lo reenviamos inmediata-
a ponerse si se desea que genera el mismo al mente.
continuar la recepción. recibir un dato haremos un

; **** Encabezado ****


List p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON

;**** Definición de variables ****


DATA_RS232 equ 0x20 ; Dato recibido desde PC.-
Flags equ 0x21 ;
;**** Definiciones para el ensamblador ****
#DEFINE Kbhit Flags,0 ; Indica si se ha recibido algún dato.-
;**** Definición de macros ****
; Se envía la data de un registro a PC.-
Putregmacro Registro
movfw Registro
call RS232_EnviaDato
endm
; Se envía un literal a PC.-
Putc macro ACKII
movlw ACKII
call RS232_EnviaDato
endm

;/////////////////////////////////
;**** Inicio del Micro ****
Reset.
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-

;**** Vector de Interrupción ****


org 0x04 ; Atiendo Interrupción.-
goto ISR

; **** Programa Principal ****


org 0x05
Inicio
bsf STATUS,RP0 ; Banco 1
movlw 0x02
movwf TRISB ; Configuro pines para Usart.-
movlw 0x04
movwf TXSTA ; Configura modo asíncrono, baud rate de alta velocidad
movlw 0x19 ; Configura velocidad a 9600 baudios con cristal de 4 Mhz

/ / página 0x3D
movwf SPBRG
bsf PIE1,RCIE ; Habilita interrupción de puerto serie para recepción
bsf INTCON,GIE ; Habilitación general interrupciones
bsf INTCON,PEIE ; Habilitación de interrupciones por periféricos
; Activar recepción, transmisión.-
bsf TXSTA,TXEN ; Habilita transmisión
bcf STATUS,RP0 ; Banco 0
bsf RCSTA,SPEN ; Habilitación puerto serie
bsf RCSTA,CREN ; Habilita recepción
bcf Kbhit ; Limpiamos bandera.

Bucle
btfss Kbhit ; ¿Se recibió Dato?
goto $-1 ; No, seguimos esperando.-
bcf Kbhit ; Si, borramos bandera.-
PutregDATA_RS232 ; Enviamos lo guardado en DATA_RS232.-
goto Bucle ;
;.............................................

;**** Rutina de servicio de Interrupción ****


;**** Interrupción por Usart (Recepción de Dato)****
ISR
btfss PIR1,RCIF ; Consultamos si es Usart.-
retfie ; No, Salimos de interrupción.-
movfw RCREG ; Llego dato, lo guardamos en un registro.
movwf DATA_RS232
bsf Kbhit ; Indicamos que ha llegado Dato.-
Fin_ISR
bcf PIR1,RCIF ; Limpiamos bandera.
retfie ; Salimos de interrupción.-
;..............................................

;**** Rutinas ****


;**** Se envia Dato ****
RS232_EnviaDato
bsf STATUS,RP0 ; Banco 1
btfss TXSTA,TRMT ; chequea si esta listo
goto $-1 ; Esperamos a que se desocupe.-
bcf STATUS,RP0 ; Banco 0
movwf TXREG ; envía Dato.-
return
;...............................................
end

/ / página 0x3E
Esta página está esperando
tu anuncio. Comunicate a
revista.ucontrol@gmail.com

Você também pode gostar