Está en la página 1de 90

Neryo Condori Q.

6 de Febrero

1
Neryo Condori Q.

2
Neryo Condori Q.

El aporte principal de este trabajo es dar a conocer el desarrollo de un Robot


Explorador autónomo que lleva incorporado una cámara y un trasmisor de tv, la cual
trasmitirá la imagen captada por la cámara de video.
En principio, se analizó detalladamente la especificación del Robot-Explorador, se
hizo un estudio de los productos disponibles en el mercado. Con el conocimiento
adquirido se escogieron los componentes mas adecuado y fácil de conseguir en
cualquier tiende de electrónica.
En este documento se describe su funcionamiento, y el por que de elegir tales
componentes, el principio de funcionamiento al igual que se presentan sus
diagramas, entre otros. Además se analizaron diferentes formas de desarrollar este
proyecto. Con los sistemas desarrollados, se hicieron pruebas de desempeño
logrando verificar y analizar principios básicos de operación de esta tecnología.

3
Neryo Condori Q.

ÍNDICE
Resumen
Índice

INTRODUCCION

Diseño, Construcción de un Robot Explorador


Identificación del Problema
Descripción del Problema
Objetivos
Justificación del Problema
Marco teórico
Antecedentes
Descripción general Robot Explorador
Descripción general
El uC pic16f84a
Pines y funciones
Arquitectura
Características especiales
El PIC16C84
Compatibilidad con otras familias

El Conversor Serie Paralelo


G ene ral D escription
Connection Diagram
Logic Diagram
Timeng Diegram
A bs olute M axim um R atings
Rec om m ended O perating C onditions
E lectrical C harac teristics
S w itching C haracteristics
P hysical D im ensio ns

4
Neryo Condori Q.
El buffer uln2308

Visualización
Modulo lcd
Introducción
Juego de instrucciones
Clear display
Home
Entry mode set
Display on/off control
Cursor display shift
Function set
Set cgram address
Set the dd ram address
Read busy flag & address
Write data to cg or ddram
Read data frw cg or dd ram
Abreviaturas
Juego de caracteres
Caracteres graficos
Secuencia de incialización
Diagrama de tiempos
Instrucciones con el lcd

Cámara de video

El Trasmisor de tv
Introducción
Principios de funcionamiento
Circuito

Sensor
Ultrasonido Srf_05
Principios.
DESCRIPCION
Modo 1, Compatibilidad con SRF04
Modo 2, Patilla única para trigger y ECO
CARACTERISTICAS TECNICAS
CONEXIONADO
AJUSTES
APLICACIONES

Manejo Motores
SERVOMOTOR
Funcionamiento
Características generales y funcionamiento
Servomotores en modelismo
Diagrama de un servomotor típico de modelismo

5
Neryo Condori Q.
Motor paso a paso

Circuito del Robot-Explorador


Código fuente para el pic16f84a

Conclusiones
Recomendación

BIBLIOGRAFÍA

6
Neryo Condori Q.

Planteamiento del Problema


Identificación del Problema.
El la Exploración es la arteria principal de la investigación sobre todo el
lugares donde un ser humano le seria muy difícil de llegar. En la sociedad
actual, cada aspecto de la vida diaria depende de ellas sobre todo sise
queremos conocer otros mundos en su totalidad.
Los sistemas de Exploración utilizados en nuestros días están sujetos a una
innovación tecnológica acelerada. La tecnología digital y las aplicaciones de
soporte lógico, asociadas están en frente de la revolución, barriendo la
tecnología analógica. Las aplicaciones y los sistemas de control en vías de
desarrollo han cambiado completamente el concepto de los servicios de
Exploración, que se prestan ahora en la búsqueda de vida en otros mundos
principalmente, con el objetivo último de "conocer más otros mundos". Los
sistemas de Exploración serán pronto el medio preferido de colonizar otros
mundos ya que el nuestro va decaen do en todos los aspectos por así decirlos.

Descripción del Problema.


Nuestro país, al igual que el resto del mundo está en una época de transición
tecnológica, modernizando su infraestructura de automatismo y masificando
poco a poco el acceso a la misma. Casos como el de las grandes
investigaciones como SETI (búsqueda de inteligencia extraterrestre), implican
más y mejores tecnologías (más conocimiento, avance e información), que
promueven e incentivan a la Exploración. Que fue desarrollada pensando en
la mejorar la calidad de vida y con la búsqueda de vida en otros mundos poder
hacer prevalecer la existencia de la humanidad.

Objetivos:
Objetivo General:
Implementar, Evaluar y Analizar el Robot-Explorador.
Objetivos Específicos:
o Realizar una descripción del Robot-Explorador
o Describir los diversos componentes para el Robot-Explorador
o Realizar una aplicación de Control de temperatura.

7
Neryo Condori Q.

MARCO TEORICO
Antecedentes.
o Tradicionalmente, la Exploración o reconocimiento de terreno como en el
caso del ejercito u otros requerían mucho la intervención del ser humano y para
lo cual estaba constantemente el peligro ante cualquier amenaza incluso la
muerte. Con la llegada de la de Robot-Exploradores todo lo antes mencionado
en mejorado enormemente en la Exploración e investigación a ello se suma
menores riegos para los seres humanos y el numero de personas que interviene
disminuye menormente.
o La selección tecnológica debe tener en cuenta no sólo el costo de
adquisición y los factores relativos a los servicios, sino una amplia gama de
consideraciones técnicas y no técnicas. La selección de la tecnología se debe
basar también en un conocimiento adecuado del desarrollo proyectado de la
Exploración.

DESCRIPCIÓN GENERAL DEL CONTROL DEL


ROBOT-EXPLORADOR.

o Gracias al sensor ultrasonido srf_05, un servomotor y el micro controlador


pic16f84a de Microchip, se logro que el Robot-Explorador se a un autómata, con
la incorporación de la cámara de video y el trasmisor de tv se consiguió de que
sea explorador
o El circuito principal es el micro controlador PIC16F84a de Microchip, el
cual será el cerebro del Robot-Explorador. Circuito conversor serie/paralelo
hace le papel de multiplexor y ayuda a tener mas puestos de salida para
controlar lo motores paso a paso, el sensor ultrasonido srf_05 que sirve para
medir la distancia respecto a un obstáculo el cual estará montado sobre el
servomotor para la exploración y la decisión a tomar para el avance del Robot-
Explorador. El LCD, una pantalla de 2 líneas x 16 caracteres indica en su parte
superior la sentido de exploración y en la parte inferior indica la actual medida.
o El principio de funcionamiento es muy simple. El Robot-Explorador por
defecto empieza su exploración midiendo su distancia de frente, si un obstáculo
es detectado a 10cm. Entonces el servomotor gira 90º hacia la izquierda con
respecto donde encontraba por defecto y hace la medición correspondiente,
luego gira 180º hacia la derecha de igual menara hace las medidas
correspondiente, luego regresa a su posición por defecto girando 90º hacia la
izquierda. Luego de hechas las medidas decide a cual lado girar para continuar
su avance de la Exploración, para lograr la decisión se compara los dos lados
medidos y se opta por el lado de mayor distancia consiguiendo así que el Robot-
Explorador gire 90º hacia el lado de mayor distancia, si la medida de los dos
lados fuera igual entonces se gira 180º para regresar hacia atrás, como se pudo
apreciar el principio del funcionamiento de Robot-Explorador es muy simple.
8
Neryo Condori Q.

E l P IC 1 6 F 8 4

INTRODUCCIÓN.
Este documento es una introducción a la programación del PIC 16f84.
Este documento se puede copiar y utilizar siempre que se indique la procedencia
(Escola Professional Salesians Joan XXIII) y se indique su autor Enric Serra.

El PIC16F84 es un microcontrolador con memoria de programa tipo FLASH, lo


que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que
no se requiere borrarlo con luz ultravioleta como las versiones EPROM sino, permite
reprogramarlo nuevamente sin ser borrado con anterioridad. Por esta razón,
lo usaremos en la mayoría de aplicaciones que se desarrollan a lo largo del curso.

Pines y funciones

Figura Diagrama de pines del PIC16F84

RA2 1 18 RA1
RA3 2 17 RA0
RA4/T0CKI 3 16 OSC1/CLKIN
MCLR/VPP 4 15 OSC2/CLKOUT
VSS 5 14 VDD
RB0/INT 6 13 RB7
RB1 7 12 RB6
RB2 8 11 RB5
RB3 9 10 RB4

9
Neryo Condori Q.
El PIC16F84 es un microcontrolador de Microchip Technology fabricado en tec- nología
CMOS, su consumo de potencia es muy bajo y además es completamente estático,
esto quiere decir que el reloj puede detenerse y los datos de la memoria no
se pierden.
El encapsulado más común para el microcontrolador es el DIP (Dual In-line
Pin) de 18 pines, propio para usarlo en experimentación. La referencia completa
es 16F84-04/P, para el dispositivo que utiliza reloj de 4 MHz. Sin embargo, hay otros
tipos de encapsulado que se pueden utilizar según el diseño y la aplicación que se
quiere realizar. Por ejemplo, el encapsulado tipo surface mount (montaje superficial)
tiene un reducido tamaño y bajo costo, que lo hace propio para pro- ducciones en
serie o para utilizarlo en lugares de espacio muy reducido, la figura
muestra los tipos de empaque que puede tener el integrado.

Figura Tipos de encapsulado

Puertos del microcontrolador


Los puertos son el puente entre el microcontrolador y el mundo exterior. Son líneas
digitales que trabajan entre cero y cinco voltios y se pueden configurar como entra- das o
como salidas.

El PIC16F84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8 líneas,
Figura. Cada pin se puede configurar como entrada o como salida independiente
programando un par de registros diseñados para tal fin. En ese registro un "0"
configura el pin del puerto correspondiente como salida y un "1" lo configura
como entrada.

13 RB7
12 RB6
RA4/TOCKI 3
11 RB5
RA3 2
Puerto 10 RB4
RA2 1 Puerto
A 9
RA1 18 RB3 B
8
RA0 17 RB2
7
6 RB1
RB0/INT

Figura Puertos del PIC16F84

10
Neryo Condori Q.

El puerto B tiene internamente unas resistencias de pull-up conectadas a sus


pines (sirven para fijar el pin a un nivel de cinco voltios), su uso puede ser
habilitado
o deshabilitado bajo control del programa. Todas las resistencias de pull-up se co-
nectan o se desconectan a la vez, usando el bit llamado RBPU que se encuentra
en el registro (posición de memoria RAM) llamado OPTION. La resistencia de
pull-up es desconectada automáticamente en un pin si este se programa
como salida. El pin RB0/INT se puede configurar por software para que
funcione como interrupión ex- terna, para configurarlo se utilizan unos bits de
los registros INTCON y OPTION.

El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/salida
o como entrada del temporizador/contador. Cuando este pin se programa como
entrada digital, funciona como un disparador de Schmitt (Schmitt trigger), puede
reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco
voltios). Cuando se usa como salida digital se comporta como colector abierto, por
lo tanto, se debe poner una resistencia de pull-up (resistencia externa conectada a un
nivel de cinco voltios). Como salida, la lógica es inversa: un "0" escrito al pin del
puerto entrega en el pin un "1" lógico. Además, como salida no puede manejar cargas
como fuente, sólo en el modo sumidero.

Como este dispositivo es de tecnología CMOS, todos los pines deben estar
co- nectados a alguna parte, nunca dejarlos al aire porque se puede dañar el
integrado. Los pines que no se estén usando se deben conectar a la fuente de
alimentación de
+5V, como se muestra en la figura 1.4.
+5V +5V

10K 10K Pines no


PIC 16F84 utilizados

Figura Los puertos no utilizados se deben conectar a la fuente

11
Neryo Condori Q.
La máxima capacidad de corriente de cada uno de los pines de los puertos en
modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA, figura
La máxima capacidad de corriente total de los puertos es:

PUERTO A PUERTO B
Modo sumidero 80 mA 150 mA
Modo fuente 50 mA 100 mA

El consumo de corriente del microcontrolador para su funcionamiento depende


del voltaje de operación, la frecuencia y de las cargas que tengan sus pines. Para un reloj de
4 MHz el consumo es de aproximadamente 2 mA; aunque este se puede reducir a 40
microamperios cuando se está en el modo sleep (en este modo el micro
se detiene y disminuye el consumo de potencia). Se sale de ese estado cuando se
produce alguna condición especial que veremos más adelante.

+5V

PIC16F84 PIC16F84

Imax=20mA

Imax=25mA

+5V

PIC16F84 PIC16F84

Puerto A Imax=80mA Puerto A Imax=50mA


Puerto B Imax=150mA Puerto B Imax=100mA

Figura Capacidad de corriente del PIC16F84

El oscilador externo
Todo microcontrolador requiere un circuito externo que le indique la velocidad a la
que debe trabajar. Este circuito, que se conoce como oscilador o reloj,
es muy simple pero de vital importancia para el buen funcionamiento del sis-
tema. El PIC16F84 puede utilizar cuatro tipos de oscilador diferentes. Estos
tipos son:

• RC. Oscilador con resistencia y condensador.


• XT. Cristal.
• HS. Cristal de alta velocidad.
• LP. Cristal para baja frecuencia y bajo consumo de potencia.

12
Neryo Condori Q.

En el momento de programar o “quemar” el microcontrolador se debe especifi-


car que tipo de oscilador se usa. Esto se hace a través de unos fusibles llamados
“fusibles de configuración”.
El tipo de oscilador que se sugiere para las prácticas es el cristal de 4
MHz, porque garantiza mayor precisión y un buen arranque del
microcontrolador. Inter- namente esta frecuencia es dividida por cuatro, lo
que hace que la frecuencia efec- tiva de trabajo sea de 1 MHz, por lo que
cada instrucción se ejecuta en un micro- segundo. El cristal debe ir
acompañado de dos condensadores y se conecta como
se muestra en la figura
20pF
16
OSC1
Cristal
de 4MHz
OSC2
20pF 15
PIC16F84

Figura Conexión de un oscilador a cristal


Dependiendo de la aplicación, se pueden utilizar cristales de otras frecuencias;
por ejemplo se usa el cristal de 3.579545 MHz porque es muy económico, el de
32.768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas.
El límite de velocidad en estos microcontroladores es de 10 MHz.
Si no se requiere mucha precisión en el oscilador y se quiere economizar dinero,
se puede utilizar una resistencia y un condensador, como se muestra en la figura

+5VDC

OSC1

Fosc/4 OSC2
C
PIC16F84

Figura Conexión de un oscilador RC

Reset
En los microcontroladores se requiere un pin de reset para reiniciar el
funcionamiento del sistema cuando sea necesario, ya sea por una falla que se
presente o porque así se halla diseñado el sistema. El pin de reset en los PIC es
llamado MCLR (master clear).
El PIC16F84 admite diferentes tipos de reset:
• Al encendido (Power On Reset)
• Pulso en el pin MCLR durante operación normal
13
Neryo Condori Q.

• Pulso en el pin MCLR durante el modo de bajo consumo (modo sleep)


• El rebase del conteo del circuito de vigilancia (watchdog) durante operación normal
• El rebase del conteo del circuito de vigilancia (watchdog) durante el modo de bajo
consumo (sleep)

El reset al encendido se consigue gracias a dos temporizadores. El primero de ellos


es el OST (Oscillator Start-Up Timer: Temporizador de encendido del oscilador), orien- tado a
mantener el microcontrolador en reset hasta que el oscilador del cristal es esta- ble. El segundo
es el PWRT (Power-Up Timer : Temporizador de encendido), que provee un retardo fijo de
72 ms (nominal) en el encendido únicamente, diseñado para mantener el dispositivo en reset
mientras la fuente se estabiliza. Para utilizar estos temporizadores, sólo basta con conectar
el pin MCLR a la fuente de alimentación, evitándose utilizar las tradicionales redes RC
externas en el pin de reset.

El reset por MCLR se consigue llevando momentáneamente este pin a un estado lógico bajo,
mientras que el watchdog WDT produce el reset cuando su temporizador rebasa la cuenta, o sea
que pasa de 0FFh a 00h. Cuando se quiere tener control sobre el reset del sistema se puede
conectar un botón como se muestra en la figura

+5VDC

10K
100 4
M C LR
Reset
PIC16F84

Figura Conexión del botón de reset

Arquitectura
Este término se refiere a los bloques funcionales internos que conforman el mi-
crocontrolador y la forma en que están conectados, por ejemplo la memoria FLASH
(de programa), la memoria RAM (de datos), los puertos, la lógica de control que permite
que todo el conjunto funcione, etc.
La figura 1.9 muestra la arquitectura general del PIC16F84, en ella se pueden apreciar los
diferentes bloques que lo componen y la forma en que se conectan. Se muestra la conexión
de los puertos, las memorias de datos y de programa, los blo- ques especiales como el
watchdog, los temporizadores de arranque, el oscilador, etc.
Todos los elementos se conectan entre sí por medio de buses. Un bus es un con- junto de
líneas que transportan información entre dos o más módulos. Vale la pena destacar que el
PIC16F84 tiene un bloque especial de memoria de datos de 64 bytes del tipo EEPROM,
además de los dos bloques de memoria principales que son el de programa y el de datos o
registros.

Capítulo 1. El PIC16F84

14
Neryo Condori Q.
MEMORIA CONTADOR DE
FLASH PROGRAMA

BUS DE BUS DE DATOS < 8 >


PROGRAMA
<14 >

CONJUN TO DE
REGISTRO DE PILA DE 8 REGISTROS RAM
INSTRUCCIONES NIVELES
MEMORIA
DIRECCION EEPROM DE
RAM < 7 > DATO S
DIRECCION
DIREC TA < 5 >
MULTIPLEXOR DE
DIRECCIONES
TEMPORIZADOR/
CONTADOR
DIRECCION
INDIREC TA < 7 >
FSR
TEMPORIZADOR PUERTOS I/O
CONTRO L DE ENCENDIDO
DECODIFICADOR PUERTOS
DE INTRUCCIONES TEMPORIZADO R DE REG. STATUS
A,B
ARRANQUE DEL
OSCILADOR
MUX
CIRCUITO DE
RESET

GENERADOR CIRCUITO DE
DE TIEMPOS VIG ILANCIA
WATCHDOG ALU

OSC1
OSC2 MCLR
REGISTRO W

Figura Arquitectura interna del PIC16F84


El PIC16F84 se basa en la arquitectura Harvard, en la cual el programa y los datos se
pueden trabajar desde memorias separadas, lo que posibilita que las instruc- ciones y los
datos posean longitudes diferentes. Esta misma estructura es la que permite la
superposición de los ciclos de búsqueda y ejecución de las instrucciones,
lo cual se ve reflejado en una mayor velocidad del microcontrolador.

Memoria de programa
Es una memoria de 1 Kbyte de longitud con palabras de 14 bits. Como es del tipo FLASH
se puede programar y borrar eléctricamente, lo que facilita el desarrollo de los programas y la
experimentación. En ella se graba, o almacena, el programa o códigos que el microcontrolador
debe ejecutar. Dado que el PIC16F84 tiene un contador de programa de 13 bits, tiene una
capacidad de direccionamiento de 8K x 14, pero sola- mente tiene implementado el primer 1K
x 14 (0000h hasta 03FFh). Si se direccionan posiciones de memoria superiores a 3FFh se
causará un solapamiento con el espacio del primer 1K. En la figura se muestra el mapa de la
memoria de programa.

Vector de reset. Cuando ocurre un reset al microcontrolador, el contador de progra- ma se


pone en ceros (000H). Por esta razón, en la primera dirección del programa se debe escribir

15
Neryo Condori Q.

todo lo relacionado con la iniciación del mismo.

Capítulo 1. El P16F84

Vector de interrupción. Cuando el microcontrolador recibe una señal de interrupción,


el contador de programa apunta a la dirección 04H de la memoria de programa, por eso, allí
se debe escribir toda la programación necesaria para atender dicha interrupción.

Registros (Memoria RAM)


El PIC16F84 puede direccionar 128 posiciones de memoria RAM, pero solo tiene
implementados físicamente los primeros 80 (0-4F en hexadecimal). De estos los
primeros 12 son registros que cumplen un propósito especial en el control del mi-
crocontrolador y los 68 siguientes son registros de uso general que se pueden usar
para guardar los datos temporales de la tarea que se está ejecutando, figura
Los registros están organizados como dos arreglos (páginas) de 128 posiciones
de 8 bits cada una (128 x 8); todas las posiciones se pueden accesar directa o indirec-
tamente (esta última a través del registro selector FSR). Para seleccionar que pagina
de registros se trabaja en un momento determinado se utiliza el bit RP0 del registro
STATUS. A continuación haremos una descripción de los registros:

00h o INDO: Registro para direccionamiento indirecto de datos. Este no es un


registro disponible físicamente; utiliza el contenido del FSR y el bit RP0 del registro
STATUS para seleccionar indirectamente la memoria de datos o RAM del usuario;
la instrucción determinará que se debe realizar con el registro señalado.

01h o TMR0. Temporizador/contador de 8 bits. Este se puede incrementar con una


señal externa aplicada al pin RA4/TOCKI o de acuerdo a una señal interna
proveniente del reloj de instrucciones del microcontrolador. La rata de incremento del
registro se puede determinar por medio de un preescalador, localizado en el registro
OPTION. Como una mejora con respecto a sus antecesores, se le ha agrega-
do la generación de interrupción cuando se rebasa la cuenta (el paso de 0FFh a 00h).

16
Neryo Condori Q.
Capítulo 1. El PIC16F84

00h *Direc. Indirecto *Direc. Indirecto 80h


01h TMRO OPTION 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
05h PORTA TRISA 85h
06h PORTB TRISB 86h
07h 87h
08h EEDATA EECON1 88h
09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah
0Bh INTCON INTCON 8Bh
0Ch 68 Registros 8Ch
Mapeado en
de propósito página 0
general
4Fh CFh
S0h D0h

7Fh FFh
Página 0 Página 1
* No es un registro físico
Posiciones no implementadas

Figura Registros del PIC16F84

02h o PCL: Contador de programa. Se utiliza para direccionar las palabras de 14


bits del programa del usuario que se encuentra almacenado en la memoria ROM;
este contador de programas es de 13 bits de ancho, figura. Sobre el byte bajo, se puede
escribir o leer directamente, mientras que sobre el byte alto, no. El byte alto se
maneja mediante el registro PCLATH (0Ah). A diferencia de los PIC de primera
generación,
el 16F84 ante una condición de reset inicia el contador de programa con todos sus bits
en “cero”. Durante la ejecución normal del programa, y dado que todas las
instruccio- nes ocupan sólo una posición de memoria, el contador se incrementa en
uno con cada instrucción, a menos que se trate de alguna instrucción de salto.
PC H PCL
12 11 10 9 8 7 6 5 4 3 2 1 0

Incluido en la instrucción,
Expansión suficiente para
futura direccionar toda la
m em oria del PIC16F84

17
Neryo Condori Q.

En una instrucción CALL o GOTO, los bits PC<10:0> se cargan desde el código
de operación de la instrucción, mientras que los bits PC<11:12> lo hacen
desde el PCLATH<4:3>. Como solamente el primer 1K de memoria está
implementado, el código de operación de la instrucción puede contener la
dirección destino, eso quie-
re decir que se pueden hacer saltos y llamados a subrutinas sin necesidad de tener en
cuenta la paginación de memoria de programa.

En otras instrucciones donde PCL es el destino, PC<12:8> se carga directamente


desde el PCLATH<4:0>, por ejemplo en el caso de la instrucción ADDWF. Esto
se debe tener en cuenta cuando se desea hacer lectura de tablas usando el
comando: ADDWF PC,1 , en este caso se debe tener en cuenta que la tabla
debe estar comprendida dentro de un solo bloque de 256 bytes (0-255, 256-511,
etc.).
03h o STATUS: Registro de estados. Contiene el estado aritmético de la ALU, la
causa del reset y los bits de preselección de página para la memoria de datos. La
figura 1.13 muestra los bits correspondientes a este registro. Los bits 5 y 6 (RP0 y
RP1) son los bits
de selección de página para el direccionamiento directo de la memoria de datos; sola-
mente RP0 se usa en los PIC16F84. RP1 se puede utilizar como un bit de
propósito general de lectura/escritura. Los bits TO y PD no se pueden modificar por
un proceso de escritura; ellos muestran la condición por la cual se ocasionó el último
reset.

Registro: STATUS

IRP RP1 RP0 T0 PD Z DC C

bit 7 bit 0

Dirección: 03h
condición de reset: 000??XXX

IRP: Selector de página para direccionamiento indirecto


Este b it no se utiliza efectivamente en el
PIC16F84, por lo que se puede utilizar como un
bit de propósito general.
RP1,0: Selectores de página para direccionamiento directo.
Solamente RP0 se utiliza en el PIC16F84. RP1 se
puede utilizar como un bit de propósito general.
T0: Tim e Out o Bit de finalización del temporizador.
Se coloca en 0 cuando el circuito de vigilancia
W atchdog finaliza la temporización.
PD: Power D own o Bit de bajo consumo. Se coloca
en 0 por la instrucción SLEEP .
Z: Zero o Bit de cero. Se coloca en 1 cuando el resul-
tado de una operación lógica o aritmética es cero.
DC: Digit Carry o Bit de acarreo de dígito. En opera-
ciones aritméticas se activa cuando hay acarreo
entre el bit 3 y el 4.
C: C arry o Bit de acarrreo. En instrucciones aritmé-
ticas se activa cuando se presenta acarreo des-
de el bit más significativo del resultado.
18
Neryo Condori Q.

04h o FSR: Registro selector de registros. En asocio con el registro IND0,


se utiliza para seleccionar indirectamente los otros registros disponibles. Mientras
que los antecesores del PIC16F84 sólo poseían 5 bits activos, en este
microcontrolador
se poseen los 8 bits. Si en el programa no se utilizan llamadas indirectas, este
regis- tro se puede utilizar como un registro de propósito general.

Para entender mejor el funcionamiento de este registro veamos un progra-


ma simple que borra el contenido de la memoria RAM, empleando direcciona-
miento indirecto.

MOVL 20 ;inicializa el puntero en la memoria RAM


W
MOVW FSR ;que se va a borrar
NE F
CLRF INDO ;borra el registro indexado (es decir el que está
XT ;siendo direccionado por el FSR)
INCF FSR,R ;incrementa el puntero
BTFSS FSR,5 ;pregunta si ya acabó el banco de memoria
GOTO NEXT ;sigue borrando los registros que faltan
continúa ......

05h o PORTA: Puerto de Entrada/Salida de 5 bits. Este puerto, al igual que


todos sus similares en los PIC, puede leerse o escribirse como si se tratara de
un registro cualquiera. El registro que controla el sentido (entrada o salida) de
los pines de este puerto está localizado en la página 1, en la posición 85h y se
llama TRISA.

06h o PORTB: Puerto de entrada/salida de 8 bits. Al igual que en todos los


PIC, este puede leerse o escribirse como si se tratara de un registro cualquiera;
algunos de sus pines tienen funciones alternas en la generación de interrupciones.
El registro de control para la configuración de la función de sus pines se localiza
en la página 1, en
la dirección 86h y se llama TRISB.

08h o EEDATA: Registro de datos de la EEPROM. Este registro contiene el dato


que se va a escribir en la memoria EEPROM de datos o el que se leyó de ésta.

09h o EEADR: Registro de dirección de la EEPROM. Aquí se mantiene la


direc- ción de la EEPROM de datos que se va a trabajar, bien sea para una
operación de lectura o para una de escritura.

0Ah o PCLATH: Registro para la parte alta de la dirección. Este contiene la


parte alta del contador de programa y no se puede acceder directamente.

0Bh o INTCON: Registro para el control de interrupciones. Es el encargado del


manejo de las interrupciones y contiene los bits que se muestran en la figura
19
Neryo Condori Q.

81h u OPTION: Registro de configuración múltiple. Posee varios bits


para configurar el preescalador, la interrupción externa, el timer y las
características del puerto B. Los bits que contiene y las funciones que
realiza este registro se muestran en la figura 1.15. El preescalador es
compartido entre el MTRO y el WDT; su asignación es mutuamente
excluyente ya que solamente puede uno de ellos ser preescalado a la vez.

85h o TRISA: Registro de configuración del puerto A. Como ya se mencionó, es


el registro de control para el puerto A. Un “cero” en el bit correspondiente al pin
lo configura como salida, mientras que un “uno” lo hace como entrada.

86h o TRISB: Registro de configuración del puerto B. Orientado hacia el


control del puerto B. Son válidas las mismas consideraciones del registro anterior.

Registro: INTCON

GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

bit 7 bit 0
Dirección: 0Bh
condición de reset: 0000000Xb

GIE: Global Interrupt Enable o Habilitador general


de interrupciones.
0: deshabilita todas las interrupciones
1: habilita las interrupciones
EEIE: EEPR O M W rite Interrupt Enable o Habilitación
de interrupción por escritura de la EEPROM
0: la deshabilita
1: la habilita
TOIE: TM R 0 Interrupt Enable o Habilitación de inte-
rrupción del temporizador TMRO.
0: la deshabilita
1: la habilita
INTE: INT Interrupt Enable o Habilitación de la inte-
rrupción INT.
0: la deshabilita
1: la habilita
RBIE: R BIF Interrupt Enable o Habilitación de la inte-
rrupción RBIF.
0: la deshabilita
1: la habilita
TOIF: TM R 0 Overflo w Interrupt Flag o Bandera de la
interrupción por sobrefujo del TMR0.
Se coloca en 1 cuando el TMR0 pasa de 0FFh
a 00h; ésta debe ser puesta a 0 por programa.
INTF: INT Interrupt Flag o Bandera de interrupción INT.
Se coloca en 1 cuando la interrupción INT
(RB<0>) ocurre; ésta debe ser puesta a 0 por
programa.
RBIF: R B P ort C hang e Interrup t F la g o Bandera de
interrupción por cambio en el puerto B.
Se coloca en 1 cuando una de las entradas
RB<7:4> cambia; ésta debe ser puesta a 0
por programa.
20
Neryo Condori Q.

88h o EECON1: Registro para el control de la memoria EEPROM de datos.


Este es el registro de control de la memoria de datos y sólo destina cinco bits para
ello, los más bajos; los tres bits superiores permanecen sin implementar. En la
figura
1.16 se muestran las funciones de estos bits.

89h o EECON2: Registro auxiliar para control de la memoria EEPROM de


datos. Registro que no está implementado físicamente en el microcontrolador,
pero que es necesario en las operaciones de escritura en la EEPROM de datos; ante
cual- quier intento de lectura se obtendrán “ceros”.

0Ch a 4Fh: Registros de propósito general. Estas 68 posiciones están


implemen- tadas en la memoria RAM estática, la cual conforma el área de trabajo
del usuario; a ellas también se accede cuando en la página 1 se direccionan las
posiciones 8Ch a

Registro: OPTION
RBPU INTEDG GRTS RTE PSA PS2 PS1 PSO

bit 7 bit 0
Dirección: 81h
condición de reset: 11111111b

RBPU: PortB Pull-up Enable o Habilitación de pull-up


del puerto B.
0: habilita las pull-ups internas
1: las deshabilita
INTEDG: INT Interrupt Edge Select o Selector de flanco
de la interrupción INT
0: flanco de bajada
1: flanco de subida
RTS: TMR0 Signal Source o Fuente de señal de TMR0.
0: ciclo de instrucciones interno (Temporizador)
1: transición en el pin RA4/TOCK (Contador)
RTE: TM R 0 Signal Edge o Flanco de la señal TMR0
0: incremento en transición de bajo a alto
1: incremento en transición de alto a bajo
PSA: Prescaler Assignm ent o Asignación del prees-
calador
0: TRM0 (Contador/Temporizador)
1: WDT (Circuito de vigilancia)
PS2,1,0: Prescaler Value o Valores del preescalador.
Valor TMR0 WDT

21
Neryo Condori Q.
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
CFh. Esto se ha diseñado así para evitar un excesivo cambio de páginas en el manejo
de la RAM del usuario, agilizando los procesos que se estén llevando a cabo y des-
complicando la labor del programador.
Registro de trabajo W. Este es el registro de trabajo principal, se comporta de
manera similar al acumulador en los microprocesadores. Este registro participa en
la mayoría de las instrucciones.
Pila (Stack)
Estos registros no forman parte de ningún banco de memoria y no permiten el
acceso por parte del usuario. Se usan para guardar el valor del contador de progra- ma
cuando se hace un llamado a una subrutina o cuando se atiende una interrup- ción;
luego, cuando el micro regresa a seguir ejecutando su tarea normal, el conta- dor de
programa recupera su valor leyéndolo nuevamente desde la pila. El PIC16F84 tiene una
pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subru- tina sin tener
problemas.
Registro: EECON1

U U U E E IF W R E R R W R E N WR RD

bit 7 bit 0
Dirección: 88h
condición de reset: 0000X000b

U: U nim plem ente d No implementadas.


Estos bits se leen como ceros.
EEIF: EEPRO M W rite Com pletion Interrupt Flag o Ban-
dera de finalización de la escritura. Se coloca en
“1” cuando finaliza con éxito la escritura en la
EE- PROM de datos; se debe colocar en “0” por
pro- grama. El bit de habilitación correspondiente
es el EEIE, localizado en el registro INTCON
(0B<6>).
WRERR:W rite Error Flag o Bandera de error de escritura.
Se coloca en 1 cuando la operación de
escritura termina prematuramente, debido a
cualquier con- dición de reset.
WREN: W rite Enable o habilitación de escritura. Si se
coloca en “0” no permite las operaciones de es-
critura; en “1” las habilita.
WR: W rite Control o Control de escritura.
Al colocarse en “1” inicia un ciclo de escritura.
Este bit sólo es puesto a “0” por hardw are, una
vez la escritura termina.
RD: R ead Control o Control de lectura.
Al colocarse en “1” se inicia una lectura de la
EEPROM de datos, la cual toma un ciclo del re-
loj de instrucciones. Este bit sólo se limpia (se
coloca en ‘0”) por hardware, al finalizar la lectu-
ra de la posición de la EEPROM.
22
Neryo Condori Q.

Característica s especiales
Algunos elementos que forman parte de los PIC no se encuentran
en micro- controladores de otros fabricantes, o simplemente
representan alguna ventaja o facilidad a la hora de hacer un diseño.
Veamos una breve descripción de las más significativas:

Circuito de vigilancia (W atchdog Tim er )


Su función es restablecer el programa cuando éste se ha perdido por
fallas en la programación o por alguna razón externa. Es muy útil
cuando se trabaja en ambien- tes con mucha interferencia o ruido
electromagnético. Está conformado por un osci- lador RC que se
encuentra dentro del microcontrolador.

Este oscilador corre de manera independiente al oscilador principal.


Cuando se habilita su funcionamiento, dicho circuito hace que el
microcontrolador sufra un reset cada determinado tiempo (que se puede
programar entre 18 ms y 2 segundos). Este reset lo puede evitar el
usuario mediante una instrucción especial del microcontrola- dor
(CLRWDT: borrar el conteo del watchdog), la cual se debe ejecutar antes
de que termine el período nominal de dicho temporizador. De esta
manera, si el programa se

ha salido de su flujo normal, por algún ruido o interferencia externa, el


sistema se
reiniciará (cuando se acabe el tiempo programado y no se haya borrado el
contador) y
el programa puede restablecerse para continuar con su funcionamiento normal.

En las primeras prácticas no se utiliza el circuito de vigilancia para facilitar


el trabajo; por eso, en el momento de programar el microcontrolador se debe
seleccio- nar en los fusibles de configuración “watchdog timer OFF”. Más
adelante veremos algunos ejemplos que ilustran su funcionamiento y la
manera de utilizarlo.

Temporizador de encendido (Pow er-up Tim er)


Este proporciona un reset al microcontrolador en el momento de conectar la
fuente de alimentación, lo que garantiza un arranque correcto del sistema. En
el momento de grabar el micro se debe habilitar el fusible de configuración
“Power-up Timer”, para ello se debe seleccionar la opción “ON”. Su tiempo de
retardo es de 72 milisegundos.

Modo de bajo consumo (sleep)


23
Neryo Condori Q.
Esta característica permite que el microcontrolador entre en un estado pasivo
donde consume muy poca potencia. Cuando se entra en este modo el oscilador
principal se detiene, pero el temporizador del circuito de vigilancia (watchdog) se
reinicia y em- pieza su conteo nuevamente. Se entra en ese estado por la
ejecución de una instrucción especial (llamada SLEEP) y se sale de él por alguna
de las siguientes causas: cuando
el microcontrolador sufre un reset por un pulso en el pin MCLR, porque el watchdog
hace que se reinicie el sistema o porque ocurre una interrupción al sistema.

Interrupciones
Este microcontrolador incluye el manejo de interrupciones, lo cual representa gran-
des ventajas. El PIC16F84 posee cuatro fuentes de interrupción a saber:

• Interrupción externa en el pin RB0/INT


• Finalización del temporizador/contador TMRO
• Finalización de escritura en la EEPROM de datos
• Cambio de nivel en los pines RB4 a RB7

El registro 0Bh o INTCON contiene las banderas de las interrupciones INT,


cambio en el puerto B y finalización del conteo del TMRO, al igual que el control
para habilitar o deshabilitar cada una de las fuentes de interrupción, incluida la de
escritura en memoria EEPROM. Sólo la bandera de finalización de la escritura resi-
de en el registro 88h (EECON1<4>).

Si el bit GIE (Global Interrupt Enable) se coloca en 0, deshabilita todas las


interrupciones. Cuando una interrupción es atendida, el bit GIE se coloca en 0 auto-
máticamente para evitar interferencias con otras interrupciones que se pudieran pre-
sentar, la dirección de retorno se coloca en la pila y el PC se carga con la dirección
04h. Una vez en la rutina de servicio, la fuente de la interrupción se puede determi-
nar examinando las banderas de interrupción. La bandera respectiva se debe colo-
car, por software, en cero antes de regresar de la interrupción, para evitar que se
vuelva a detectar nuevamente la misma interrupción.

La instrucción RETFIE permite al usuario retornar de la interrupción, a la vez


que habilita de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse
presente que solamente el contador de programa es puesto en la pila al atenderse
la interrupción; por lo tanto, es conveniente que el programador tenga cuidado con
el registro de estados y el de trabajo, ya que se pueden producir resultados
inesperados
si dentro de ella se modifican.

Interrupción externa. Actúa sobre el pin RB0/INT y se puede configurar para acti-
varse con el flanco de subida o el de bajada, de acuerdo al bit INTEDG (OPTION<6>).
Cuando se presenta un flanco válido en el pin INT, la bandera INTF (INTCON<1>) se
coloca en uno. La interrupción se puede deshabilitar colocando el bit de control INTE

24
Neryo Condori Q.
(INTCON<4>) en cero. Cuando se atiende la interrupción, a través de la rutina de
servicio, INTF se debe colocar en cero antes de regresar al programa principal. La
interrupción puede reactivar al microcontrolador después de la instrucción SLEEP, si
previamente el bit INTE fue habilitado.

Interrupción por finalización de la temporización. La superación del conteo máxi-


mo (0FFh) en el TMR0 colocará el bit TOIF en uno (INTCON<2>). El bit de control
respectivo es TOIE (INTCON<5>).

Interrupción por cambio en el puerto RB. Un cambio en los pines del puerto B
<7:4> colocará en uno el bit RBIF (INTCON<0>). El bit de control respectivo es
RBIE (INTCON<3>).

Interrupción por finalización de la escritura. Cuando la escritura de un dato en la


EEPROM finaliza, se coloca en 1 el bit EEIF (EECON1<4>). El bit de control res-
pectivo es EEIE (INTCON<6>)

Memoria de datos EEPROM


El PIC16F84 tiene una memoria EEPROM de datos de 64 posiciones (0h a 3Fh), de
8 bits cada una. Este bloque de memoria no se encuentra mapeado en ningún
banco,
el acceso a esas posiciones se consigue a través de dos registros de la RAM:
- el registro EEADR (posición 09), que debe contener la dirección de la posición de
la EEPROM a ser accesada
- el registro EEDATA (posición 08), que contiene el dato de 8 bits que se va a escri-
bir o el que se obtuvo de la última lectura.

Adicionalmente, existen dos registros de control: el EECON1 (88h), que posee


cinco bits que manejan las operaciones de lectura/escritura y el EECON2 (89h), que
aunque no es un registro físico, es necesario para realizar las operaciones de
escritura.

La lectura toma un ciclo del reloj de instrucciones, mientras que la escritura, por ser
controlada por un temporizador incorporado, tiene un tiempo nominal de 10
milisegundos, este tiempo puede variar con la temperatura y el voltaje. Cuando se
va a realizar una operación de escritura, automáticamente se hace primero la opera-
ción de borrado. El número típico de ciclos de borrado/escritura de la EEPROM de
datos es de 1.000.000.

Fusibles de configuración
El PIC16F84 posee cinco fusibles, cada uno de los cuales es un bit. Estos fusibles se
pueden programar para seleccionar varias configuraciones del dispositivo: tipo de
oscilador, protección de código, habilitación del circuito de vigilancia y el tempori-
zador al encendido. Los bits se localizan en la posición de memoria 2007h, posición
a la cual el usuario sólo tiene acceso durante la programación del microcontrolador.
Cuando se programa la protección de código, el contenido de cada posición de la
memoria no se puede leer completamente, de tal manera que el código del programa
25
Neryo Condori Q.
no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del pro-
grama se protegen contra la reprogramación.

Una vez protegido el código, el fusible de protección sólo puede ser borrado
(puesto a 1) si se borra toda la memoria del programa y la de datos.

Las pull-ups internas


Cada uno de los pines del puerto B tiene un débil elemento pull-up interno (250 A
típico); este elemento es automáticamente desconectado cuando el pin se configura
como salida. Adicionalmente, el bit RBPU (OPTION<7>) controla todos estos ele-
mentos, los cuales están deshabilitados ante una condición de reset. Estos
elementos pull-up son especialmente útiles cuando el microcontrolador va a
colocarse en el modo de bajo consumo, ya que ayudan a no tener las entradas
flotantes, significando una reducción en el consumo de corriente.

El conjunto de instrucciones
Estas se clasifican en orientadas a registros, orientadas al bit y operaciones
literales y de control. Cada instrucción es una palabra de 14 bits, dividida en un
código de operación
(el cual especifica la orden a ejecutar) y uno o más operandos sobre los que se
actúa. En
el apéndice A se encuentra la lista completa de instrucciones, la cual incluye
ejemplos y explicaciones. Como se puede observar allí, en total son 35, las cuales
tardan un ciclo de máquina, a excepción de los saltos, que toman dos ciclos.

El PIC16C84
El PIC16C84 es un microcontrolador de la familia Microchip,
totalmente compatible con el PIC16F84. Su principal característica es que
posee memoria
"EEPROM" en lugar de memoria Flash, pero su manejo es igual. Con
respecto
al PIC16F84, este microcontrolador presenta dos diferencias:

• La memoria de datos tiene menor tamaño, aquí se tienen 32 registros de


propósito general (el mapa de memoria de datos llega hasta 2FH).
• En el momento de programar el microcontrolador, el fusible de selección del
temporiza- dor de arranque (Power Up Timer) trabaja de forma inversa, es decir, si
en el PIC16F84
se selecciona la opción "Low" para activarlo, en el PIC16C84 se debe seleccionar
"High".

Este microcontrolador ha sido reemplazado de forma gradual por el


PIC16F84, por lo tanto, los diseños que lo utilicen como elemento de control
deben ser actuali- zados. Aunque, como se ve, es un proceso casi
transparente.

26
Neryo Condori Q.

27
Neryo Condori Q.

Com patibilida d con otras fam ilias


Quienes están familiarizados con los PIC16C5X
encontrarán básicamente las
siguientes modificaciones:

• La longitud de las instrucciones se incrementó a 14


bits.
• Se puede omitir la paginación de la memoria de
programa.
• La paginación de la memoria de datos se ha
redefinido ligeramente, de tal manera que se elimina
la necesidad de los bits PA2, PA1 y PA0 en el registro
de estados.
• Se cuenta con cuatro nuevas instrucciones: RETURN,
RETFIE, ADDLW y SUBLW.
• La manera en que se configuraban los puertos (con la
instrucción TRIS) y se asig- naba el preescalador (con
la instrucción OPTION) ha sido modificada, de tal
for- ma que los registros OPTION y TRIS ahora son
direccionables; aún así, se conser- van dichas
instrucciones para mantener la compatibilidad con los
PIC16C5X.
• Se agregaron capacidades de interrupción. El vector
de interrupción es 0004h.
• El tamaño de la pila se incrementó a 8 niveles.
• El vector de reset se modificó a 0000h.
• Reactivación después de la instrucción SLEEP a
través de interrupciones.
• El pin de entrada RTCC es ahora un pin del puerto
A, llamado RA4/TOCK1
• El ancho del registro FSR se aumentó a 8 bits.
• La posición 07 no está implementada.
• Programación serial del microcontrolador.

28
Neryo Condori Q.

El Conversor Serie
Paralelo

DM 74LS 164
8-B it Serial In/P arallel O u t S hift R eg ister
G eneral Description Features
These 8-bit shift registers feature gated serial inputs and G ated (enable/disable) serial inputs
an asynchronous clear. A low logic level at either input Fully buffered clock and serial inputs
inhibits entry of the new data, and resets the first flip-flop to
the low level at the next clock pulse, thus providing com - Asynchronous clear
plete control over incom ing data. A high logic level on Typical clock frequency 36 M H z
either input enables the other input, w hich will then deter- Typical pow er dissipation 80 m W
mine the state of the first flip-flop. D ata at the serial inputs
m ay be changed w hile the clock is HIG H or LO W, but only
inform ation m eeting the setup and hold tim e requirem ents
will be entered. Clocking occurs on the LO W -to-HIG H level
transition of the clock input. All inputs are diode-clam ped to
minim ize transmission-line effects.

O rdering C ode:
O rde r N um b er P a cka ge N um ber P ack age D e scription
DM 74LS164M M14A 14-Lead Sm all O utline Integrated Circuit (SOIC), JED EC M S-120, 0.150 N arrow
DM 74LS164N N14A 14-Lead Plastic D ual-In-Line Package (PDIP), JED EC M S-001, 0.300 W ide
Devices also available in Tape and Reel. S pecify by appending the suffix letter “X ” to the ordering code.

C onn ection D iagra m Functio n Table


Inpu ts O utp u ts
C lea r C loc k A B QA QB ... QH
L X X X L L ... L
H L X X Q A0 Q B0 ... Q H0
H H H H Q An ... Q Gn
H L X L Q An ... Q Gn
H X L L Q An ... Q Gn
H HIGH Level (steady state)
L LOW Level (steady state)
X Don't Care (any input, including transitions)
Transition from LOW -to-HIGH level
Q A0 , Q B 0 , Q H0 The level of Q A , Q B , or Q H , respectively, before the
in dica ted stea dy-state in put co nditions w e re establish ed .
Q An , Q Gn Th e level of Q A or Q G b efore the m ost rece nt tra nsitio n o f the
clock; in dicates a one -bit shift.

29
Neryo Condori Q.

Logic D iagram

Tim ing D iagram

30
Neryo Condori Q.

A bs olute M axim um R atings (N ote 1)


N o te 1 : The “A bsolute M axim um Ratings” are those values beyond which
Supply Voltage 7V the safety of the device cannot be guaranteed. The device should not be
operated at these lim its. The param etric values defined in the E lectrical
Input Voltage 7V Characteristics tables are not guaranteed at the absolute m axim um ratings.
Operating Free Air Temperature R ange 0 C to 70 C The “Recom m ended O perating Conditions” tables will define the conditions
for actual device operation.
Storage Tem perature R ange 65 C to 150 C

Recom m ende d O perating C onditions


S ym b ol P aram eter M in N om M ax U nits
V CC Supply Voltage 4.75 5 5.25 V
V IH HIG H Level Input Voltage 2 V
V IL LO W Level Input Voltage 0.8 V
I OH HIG H Level O utput C urrent 0.4 mA
I OL LO W Level O utput C urrent 8 mA
f CLK Clock Frequency (N ote 2) 0 25 MH z
tW Pulse W idth Clock 20
ns
(Note 2) Clear 20
t SU D ata Setup Tim e (N ote 2) 17 ns
tH D ata H old Tim e (N ote 2) 5 ns
t REL Clear Release Tim e (N ote 2) 30 ns
TA Free Air O perating Tem perature 0 70 C
N o te 2: T A 25 C and V CC 5V.

E lectrical C harac teristics


over recommended operating free air temperature range (unless otherwise noted)
Typ
Symbol Parameter Conditions Min Max Units
(Note 3)
VI Input Clamp Voltage VCC Min, II 18 mA 1.5 V
VO H HIGH Level VCC Min, IO H Max
2.7 3.4 V
Output Voltage VIL Max, VIH Min
VOL LOW Level VCC Min, IO L Max
0.35 0.5
Output Voltage VIL Max, VIH Min V
IOL 4 mA, VCC Min 0.25 0.4
II Input Current @ Max Input Voltage VCC Max, VI 7V 0.1 mA
IIH HIGH Level Input Current VCC Max, VI 2.7V 20 A
IIL LOW Level Input Current VCC Max, VI 0.4V 0.4 mA
IOS Short Circuit Output Current VCC Max (Note 4) 20 100 mA
ICC Supply Current VCC Max (Note 5) 16 27 mA
N o te 3: A ll typicals are at V CC 5V, T A 25 C.
N o te 4: N ot m ore than one output should be shorted at a tim e, and the duration should not exceed one second.
N o te 5 : I CC is m ea sure d w ith all outp uts O PE N , th e S E RIA L in pu t g rou nd ed , th e C L O C K in put a t 2 .4V, a nd a m o m en ta ry g rou nd, th en 4 .5V, applied to the
C LE A R in put.

S w itching C haracteristics
at VCC 5V and TA 25 C
From (Input) RL 2k
Symbol Parameter To (Output) CL 15 pF CL 50 pF Units
Min Max Min Max
fM AX Maximum Clock Frequency 25 MHz
tPLH Propagation Delay Time
Clock to Output 27 30 ns
LOW-to-HIGH Level Output
tPHL Propagation Delay Time
Clock to Output 32 40 ns
HIGH-to-LOW Level Output
tPHL Propagation Delay Time
Clear to Output 36 45 ns
HIGH-to-LOW Level Output

31
Neryo Condori Q.

P hysical D im ensio ns inches (millim eters) unless otherwise noted

14-Le ad S m all O utline Inte grated C ircuit (S O IC ), JE D E C M S -1 20, 0.150 N arrow


P a cka ge N um ber M 14A

32
Neryo Condori Q.

Physical D im ension s inches (millim eters) unless otherwise noted (Continued)

14-Lead P lastic D ual-In-Line P ack age (P D IP ), J E D E C M S -0 01, 0.300 W ide


P ack age N u m be r N 14A

Fairchild does not assum e any responsibility for use of any circuitry described, no circuit patent licenses are im plied and
Fairchild reserves the right at any tim e without notice to change said circuitry and specifications.
LIFE S U P P O R T P O LIC Y

FAIR C HILD’S PR O D U CTS ARE NO T AU TH O RIZED FOR USE AS C RITICAL C O M PON EN TS IN LIFE SU PPO RT
D EVICES O R SY STEM S W ITH O UT TH E EXPR E SS W R ITTEN APPR O VAL O F THE PR ESID ENT OF FAIR C HILD
SEM IC O ND U CTOR C O RPO RA TION. As used herein:
1. Life support devices or system s are devices or system s 2. A critical com ponent in any com ponent of a life support
which, (a) are intended for surgical im plant into the device or system w hose failure to perform can be rea-
body, or (b) support or sustain life, and (c) w hose failure sonably expected to cause the failure of the life support
to perform when properly used in accordance with device or system, or to affect its safety or effectiveness.
instructions for use provided in the labeling, can be rea-
sonably expected to result in a significant injury to the w w w.fairc hild se m i.co m
user.

33
Neryo Condori Q.

El buffer uln2308
500-mA Rated Collector Current (Single DW OR N PACKAGE
Output) (TOP VIEW)

High-Voltage Outputs . . . 50 V 1B 1 18 1C
Output Clamp Diodes 2B 2 17 2C
Inputs Compatible With Various Types of 3B 3 16 3C
Logic 4B 4 15 4C
5B 5 14 5C
Relay Driver Applications
6B 6 13 6C
Compatible with ULN2800A Series 7 12
7B 7C
8B 8 11 8C
description/ordering information GND 9 10 COM
The ULN2803A is a high-voltage, high-current
Darlington transistor array. The device consists of
eight npn Darlingtonpairs that feature high-
voltage outputs with common-cathode
clamp diodes for switching inductive loads. The
collector-current rating of each Darlington pair is
500 mA. The Darlington pairs may be connected
in parallel for higher current capability.
R
Applications include relay
M
drivers, hammer drivers, lamp
A
drivers, display drivers (LED
T
and gas discharge), line
I
drivers, and logic buffers. The
O
ULN2803A has a 2.7-k series N
base resistor for each
Darlington pair for operation
directly with TTL or 5-V CMOS
devices.

O
R
D
E
R
I
N
G

I
N
F
O

34
Neryo Condori Q.

logic diagram
1 18
1B 1C

2 17
2B 2C

3 16
3B 3C

4 15
4B 4C

5 14
5B 5C

6 13
6B 6C

7 12
7B 7C

8 11
8B 8C
10
COM

schematic (each Darlington pair)


COM

2.7 k Output C
Input B

7.2 k 3k
E

Este circuito será el usado


para poder controlar los
dos motores paso a paso

35
Neryo Condori Q.

MODULO
LCD
INTRODUCCIÓN
Las siguientes páginas intentan dar una breve descripción
del funcionamiento del módulo LCD incluido en el sistema de
evaluación PIC Trainer el WM-C1602M.
Se trata de un módulo microcontrolado capaz de representar 2
líneas de 16
caracteres cada una. A través de 8 líneas de datos se le
envía el carácter ASCII que se desea visualizar así como
ciertos códigos de control que permiten realizar diferentes
efectos de visualización. Igualmente mediante estas líneas
de datos el módulo devuelve información de su estado
interno.
Con otras tres señales adicionales se controla el flujo de información
entre el módulo
LCD y el equipo informática que lo gestiona.
A continuación se presenta la descripción de señales empleadas por
el módulo
LCD según se encuentran conectadas al PIC-Trainer, así como el
número de patilla a
la que corresponden.
Pin nº Símbol Conexión Descripció
1 o Vss Vss Patilla de tierra de alimentación n
2 Vdd Vdd Patilla de alimentación de +5V
3 Vo Vo Patilla de contraste del cristal líquido. Normalmente se conecta a un
potenciómetro a través del cual se aplica una tensión variable entre 0
y +5V que permite regular el contraste del cristal líquido.

4 R RA0 Selección del registro de control/registro de datos:


S RS =0 Selección del registro de control
RS=1 Selección del registro de datos

5 R/W RA1 Señal de lectura/escritura


R/W=0 El Módulo LCD es escrito
R/W=1 El Módulo LCD es leído
6 E RA2 Señal de activación del módulo LCD:
E=0 Módulo desconectado y no funcionan el resto de las señales
E=1 Modulo conectado
7-14 D0-D7 RB0-RB7 Bus de datos bi-direccional. A través de estas
líneas se realiza la transferencia de información
entre el módulo LCD y el sistema informático que
lo gestiona

36
Neryo Condori Q.

JUEGO DE INSTRUCCIONES:
Seguidamente se presenta una serie de comando o instruciones que permiten
configurar diferentes opciones de trabajo del módulo LCD y conseguir con ello
distintos efectos de visualización
El juego de instrucciones consiste en diferentes códigos que se introducen a
través del Bus de datos del módulo LCD conectado al Port B

CLEAR DISPLAY
Borra el módulo LCD y coloca el cursor en la primera posición
(dirección 0). Pone el bit I/D a "1" por defecto para auto incremento de la posición
del cursor.
Código:

RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 0 0 1

Tiempo de ejecución:1.64 mS
HOME

37
Neryo Condori Q.
Coloca el cursor en la posición de inicio (dirección 0) y hace que el display
comience a desplazarse desde la posición original. El contenido de la
memoria RAM de datos de visualización (DD RAM) permanecen invariables.
La dirección de la memoria RAM de datos para la visualización (DD RAM) es
puesta a 0.
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 1 X

ENTRY MODE SET


Tiempo de ejecución:1.64 mS
Establece la dirección de movimiento del cursor y especifica si la
visualización
se va desplazando a la siguiente posición de la pantalla o no. Estas
operaciones se ejecutan durante la lectura o escritura de la DD RAM o CG
RAM (Carácter Generator RAM). Para visualizar normalmente poner el bit S a "
0 ".

Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 I/D S
Tiempo de ejecución:40
S
I/D = “1” Se incrementa la dirección del cursor , con “0” se decrementa
S= ”1” Desplaza la visualización cada vez que se escribe un dato, Si = “0”
funciona en modo normal

DISPLAY ON/OFF CONTROL


Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor
(C) y
se establece si este último debe o no parpadear (B).
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B
38
Neryo Condori Q.

B = “1” Parpadea el cursor


C = “1” Cursor activado
D = “1” Pantalla activada
Tiempo de ejecución:40 S

CURSOR DISPLAY SHIFT


Mueve el cursor y desplaza el display sin cambiar el contenido de la
memoria de datos de visualización DD RAM.
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 1 S/C R/L X X

Tiempo de ejecución:40
S
S/C =”1” Desplaza la visualización ; si es =”0” desplaza el cursor
R/L = “1” Desplazamiento a la derecha, si =”0” desplazamiento a la izquierda

FUNCTION SET
Establece el tamaño de interfase con el bus de datos (DL), número de líneas del
display
(N) y tipo de carácter (F).
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 DL N F X X
Tiempo de
ejecución:40 S
DL= ”1” Trabaja en bus de 8 bits, si =”0” bus de
4 bits N = “1” Presentación en 2 líneas, si = “0”
se una línea F= ”1” caracteres de 5x10 pixel, si
=”0” 5x7

SET CGRAM ADDRESS


El módulo LCD además de tener definidos todo el conjunto de caracteres
ASCII,

39
Neryo Condori Q.
permite al usuario definir 4 u 8 caracteres gráficos. La composición de estos
caracteres
se va guardando en una memoria llamada CG RAM con capacidad para 64
bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 6
bytes que se almacenan en sucesivas posiciones de la CG RAM.
Mediante esta instrucción se establece la dirección de la memoria CG
RAM a
partir de la cual se irán almacenando los bytes que definen un carácter
gráfico. Ejecutado este comando todos los datos que se
escriban o se lean
posteriormente, lo hacen desde esta memoria CG RAM.

Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 1 Dirección de la CG RAM

Tiempo de
ejecución:40 s
SET THE DD RAM ADDRESS
Los caracteres o datos que se van visualizando, se van almacenando
previamente en una memoria llamada DD RAM para de aquí pasar a la
pantalla.
Mediante esta instrucción se establece la dirección de memoria DD RAM a
partir de
la cual se irán almacenado los datos a visualizar. Ejecutado este comando,
todos los datos que se escriban o lean posteriormente los hacen desde esta
memoria DD RAM. Las direcciones de la 80h a la 8Fh corresponden con los
16 caracteres del primer renglón y de la C0h a la CFh con los 16 caracteres
del segundo renglón, para este modelo.
Código:

RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 Dirección de la RAM
Tiempo de ejecución:40 s

40
Neryo Condori Q.
READ BUSY FLAG & ADDRESS
Cuando el módulo LCD está ejecutando cualquiera de estas instrucciones,
tarda un cierto tiempo de ejecución en el que no se le debe mandar ninguna otra
instrucción. Para ello dispone de un flag llamado BUSY (BF) que indica que se
está ejecutando una instrucción previa.
Esta instrucción de lectura informa del estado de dicho flag además de
proporcionar el valor del contador de direcciones de la CG RAM o de la DD
RAM
según la última que se haya empleado.
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 BF Dirección de la CG RAM o de la DDRAM
Tiempo de ejecución:1 s
BF =”1” el módulo LCD está ocupado y si =”0” está disponible
WRITE DATA TO CG OR DDRAM
Mediante este comando se escribe en la memoria DD RAM los datos que se
quieren presentar en pantalla y que serán los diferentes códigos ASCII de los
caracteres a visualizar.
Igualmente se escribe en la memoria CG RAM los diferentes bytes que
permiten confeccionar caracteres gráficos a gusto del usuario.
El escribir en uno u otro tipo de memoria depende de si se ha empleado
previamente la instrucción de direccionamiento DD RAM o la de
direccionamiento CG RAM.
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 Código ASCII o byte del carácter gráfico
Tiempo de ejecución:40 s
READ DATA FRW CG OR DD RAM
Mediante este comando se lee de la memoria DD RAM los datos que haya
almacenados y que serán los códigos ASCII de los caracteres visualizados.
Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha
confeccionado un determinado carácter gráfico.
El leer de uno u otro tipo de memoria depende de si se ha empleado
41
Neryo Condori Q.
previamente la instrucción de direccionamiento de la DD RAM o la de
direccionamiento CG RAM.
Código:
RA0 RA1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1 Código ASCII o byte del carácter gráfico

Tiempo de ejecución:40 s

ABREVIATURAS
Se listan a continuación las abreviaturas empleadas en los códigos
anteriores y su significado:

Abreviatura Descripció
n
S=1 Desplaza la visualización cada vez que se escribe un
dato.
S=0 Modo normal
I/D=1 Incremento del cursor
I/D=0 Decremento del cursor
S/C=1 Desplaza el display
S/C=0 Mueve el cursor
R/L=1 Desplazamiento a la derecha
R/L=0 Desplazamiento a la izquierda
BF=1 Módulo ocupado
BF=0 Módulo disponible
DL=1 Bus de datos de 8 bits
DL=0 Bus de datos de 4 bits
N=1 LCD de dos líneas
N=0 LCD de una línea
F=1 Carácter de 5 x 10 puntos
F=0 Carácter de 5 x 7 puntos
B=1 Parpadeo de cursor ON
C=1 Cursor ON
D=1 Display ON
X=1 Interlineado

42
Neryo Condori Q.
JUEGO DE CARACTERES
Es el mostrado en la siguiente Figura. Las posiciones marcadas como CG
RAM
(n) corresponden a uno de los 8 posibles caracteres gráficos definidos por el
usuario.

43
Neryo Condori Q.

CARACTERES GRAFICOS
El usuario puede definir hasta 8 caracteres de 5 x 7 puntos o 4 de 5 x 10. Se
seleccionan y visualizan aplicando a la DD RAM cualquier valor entre 00 y 07 ó
08 y
0Fh como si de un código ASCII se tratara.
Se definen introduciendo en sucesivas direcciones de la CG RAM unos bytes
cuyos patrones binarios definen el carácter tal y como se muestra en la siguiente
Tabla.
Un carácter de 5 x 7 necesita de 8 octetos en la CG RAM para ser definido, uno
de 5 x 10 necesita de 16. La CG RAM es una memoria de 64 posiciones en total.
En el ejemplo de la Tabla, para definir la R en 5 x 7 se introducen 8 octetos en
las 8 primeras posiciones (0 a la 7) de la CG RAM. Cada bit de cada uno de esos
octetos que valga nivel "1" implica que su correspondiente pixel en el LCD se active.
Como es el primer conjunto de 8 bytes es decir, el primer carácter de la CG
RAM, este se selecciona aplicando el código 00 en la DD RAM como si fuera
cualquier otro código ASCII.

44
Neryo Condori Q.

SECUENCIA DE INCIALIZACIÓN
El módulo LCD ejecuta automáticamente una secuencia de inicio interna en el
instante de aplicarle la tensión de alimentación si se cumplen los requisitos de
alimentación expuestos en el siguiente cronograma.

Dichos requisitos consisten en que el tiempo que tarde en estabilizarse la tensión


desde 0.2 V hasta los 4.5V mínimos necesarios sea entre 0.1 mS y 10 mS.
Igualmente el tiempo de desconexión debe ser como mínimo de 1 mS antes de
volver a conectar.
La secuencia de inicio ejecutada es la siguiente:

1. Se ejecuta el comando CLEAR DISPLAY borrando la pantalla. El flag B U SY


se mantiene a "1" (ocupado) durante 15 m S hasta que finaliza la inicialización.
2. Se ejecuta el comando FUNCTION SET, que establece el interfaz con el
Bus de datos. Se elige por defecto el tamaño del bus de datos a 8 bits (DL=1)
y el número de renglones del display en 1 (N=0).
3. Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el display que
en OFF (D=0); también cursor en OFF (C=0) y sin parpadeo del cursor en (B=0)
4. Se ejecuta el comando ENTRY MODE SET, que establece la dirección de
movimiento del cursor con autoincremento del cursor (I/D=1) y modo normal,
no desplazamiento, del display (S=0).
Si la conexión de la alimentación no reune las condiciones que exige el módulo
LCD, habría que realizar la secuencia de inicialización por software. En cualquier
caso, es importante enviar al LCD la primera instrucción de trabajo después de que
hayan transcurrido 15 ms, para completar dicha secuencia de inicialización.

45
Neryo Condori Q.

DIAGRAMA DE TIEMPOS
Es el mostrado en la figura siguiente. Junto con la tabla que acompaña se
conocen los tiempos de las señales para diferentes chips controladores de
módulos LCD.

46
Neryo Condori Q.

INSTRUCCIONES CON EL
LCD
Instrucción Códig Descripció Tiempo max
o n de
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 ejecución
Clear Display 0 0 0 0 0 0 0 0 0 1 Borra el display y coloca el cursor en 82 s 1.64ms
la primera posición 0 DDRAM
Returm home 0 0 0 0 0 0 0 0 1 * Coloca el cursor en la posición 40 s 1.64ms
de inicio y hace que el display
comience a
desplazarse desde la posición
Entry mode set 0 0 0 0 0 0 0 1 I/D S original. el sentido de
Establece 40
El contenido de la
desplazamiento deDDRAM no varía
la información s
en el display. Esta
operación se realiza durante la
Display ON/OFF 0 0 0 0 0 0 1 D C B lectura o o desactiva poniendo
Activa 40
control escritura de la DDRAM
en s
ON/OFF tanto el display D=0 (off)
o D=1(on),como el cursor
C=0(off) o C=1(on) y establece
Cursor or display 0 0 0 0 0 1 S/C R/L * * si esteel debe
Mueve cursor y desplaza el 40
shift parpadear
display sin ocambiar
no B=0(off) o B=1(on)
el contenido de s
Funtion set 0 0 0 0 1 DL N F * * la DDRAMel tamaño de interfase
Establece 40
con el bus de datos(DL),el número s
de líneas
del display(N) y la font de
CG RAM address set 0 0 0 1 Dirección CGRAM los caracteres la
Establece dirección de 40
CGRAM a partir de la cual se s
almacenan los caracteres de
DD RAM address set 0 0 1 Dirección de la DDRAM usuario la dirección DDRAM a
Estable 40
partir de la cual se almacenan s
los datos a
Read Busy Flag and 0 1 BF Dirección de DDRAM o CGRAM visualizar
Lectura del flag de Busy e indica de 1
Address la dirección de la CGRAM o s
DDRAM
Write data into the 1 0 Dato a última empleada.
Escribe en DDRAM o CGRAM 40
CG RAM or the escribir los datos que se quieren s
DDRAM presentar en el
Read data from the 1 1 Dato a LCD de la DDRAM o CGRAM
Lee 40
CG RAM or the leer los datos que se direccionen s
DDRAM
I/D = 1 Incrementa la dirección del cursor DDRAM: Dispaly Data RAM
I/D = 0 Decrementa la dirección del cursor CGRAM: Character Generator
S =1 Desplaza la visualización cada vez que se escribe un dato RAM ACC : Address of CGRAM
S/C = 1 Se desplaza la visualización ADD : Address od DDRAM
S/C = 0 Se desplaza el cursor AC: Address counter used for
R/L = 1 Desplazamiento a la derecha botch
R/L = 0 Desplazamiento a la izquierda DDRAM and CGRAM
DL = 1 Trabaja con bus de datos de 8
bits DL = 0 Trabaja con bus de datos
de 4 bits N = 1 La presentación se
hace en 2 líneas N = 0 La
presentación se hace en 1 línea
F = 1 Caracteres de 5x10 dots
F= 0 Caracteres de 5x7 dots
BF =1 LCD ocupado en una operación interna
BF = 0 LCD disponible para aceptar instrucciones
D = 1 Pantalla activa
(ON) C = 1 Cursor activo
(ON)
* Indeterminado

47
Neryo Condori Q.
C
Esta será la cámara empleada por nuestro robot-Explorador se pude encontrar en cualquier
tienda de electrónica, esta cámara de video tiene tres salidas una de alimentación de 8v. DC y
con un consumo de corriente de 200mA, las dos salida restantes son de video y audio

Figura de la cámara de video

Figura de la cámara sobre el Robot-Explorador

El Trasmisor de tv
Introducción
El trasmisor de tv es un circuito vaso en oscilador de transistores, condensadores e inductores los
cuales hacen posible el funcionamiento de nuestro trasmisor.

Principios de funcionamiento
El principio de funcionamiento de nuestro circuito de trasmisor de tv, se basa en modular la señal entrante
de video como también de audio para luego poder trasmitirlas en la banda de frecuencia de 204-210 que
corresponde al canal 12. Banda alta de canal VHF
48
Neryo Condori Q.

Circuito

Figura del circuito del trasmisor de tv

Este circuito es el encargado de trasmitir tv en el canal 12 , la entrada de video y audio esta


conectado directamente ala cámara de video.

Características del circuito

La alimentación del circuito es de 12v


Consumo de corriente de 600mA
Potencia de salida 1mW o 0dBw
Con u alcance de unos 100m

El sensor
El medidor ultrasónico.
Principios.

La medida de distancias relativamente cortas se ha llevado a cabo tradicionalmente usando una


medida de la cinta hecha de madera, metal o etc. Sin embargo, recientemente otro método de
medir las distancias se ha puesto popular, por medio sonido podemos medir distancias,
ultrasónico usando para ser exacto.
En la parte anterior se refiere que el rango del oído humano es el aprox. 300Hz a 14KHz. Por
consiguiente cualquiera frecuencia que es anterior la longitud de onda de oído humana y
debajo del bajo la frecuencia la longitud de onda de RF puede ser considerada como
ultrasónico o ultrasonido.
Incluso el ultrasonido se puede usar como un sexto sentido, muchos mamíferos tienen un el
límite superior muy más alto a su oído, este es el principio detrás del silbato del perro. Cuando
soplamos el silbato, nosotros los humanos no oyemos las vibraciones de frecuencias altas, pero
un perro lo oye como si fuera el silbato de un árbitro.

49
Neryo Condori Q.
El sonido ultrasónico se realiza transmitiendo un pulso de alta frecuencia, mientras
nosotros contamos cuánto tiempo demora el eco en ser descubierto.

DESCRIPCION

Consiste en un medidor ultrasónico de distancias de bajo costo desarrollado por la firma


DEVANTECH Ltd
El módulo SRF05 es una evolución del módulo SRF04 y está diseñado para aumentar la
flexibilidad, aumentar el rango de medida y reducir costes. Es totalmente compatible con el
SRF04 y el rango de medida se incrementa de
3 a 4 metros.. Se muestra en la figura 1.

Dispone de un nuevo modo de


operación que se selecciona
simplemente conectando el pin
“Mode” a GND. Dicho modo
permite al SRF05 emplear un único
pin de E/S que sirve tanto para dar
la orden de inicio o disparo, como
para obtener al medida realizada
(ECO).

Cuando el pin de “Modo” no


se emplea y se deja sin conectar,
el SRF05 trabaja de la misma
manera que el SRF04. Esto es, la
señal de disparo y la salida de
ECO se realizan por pines
diferentes.

El SRF05 incluye una pequeña temporización tras el pulso ECO de salida, que permite que
controladores lentos como Basic Stamp y Picaxe puedan ejecutar sus correspondientes instrucciones.

Compatibilidad con SRF04

Este modo emplea patillas separadas, una para aplicar el pulso de inicio o Trigger y otra para
leer la anchura del pulso del ECO medido. Todos los programas realizados para el
SRF04 deben funcionar perfectamente en este modo, que se selecciona simplemente dejando la
patilla “Mode” sin conectar (igual que en
el SRF04).
Tal y como se muestra en el diagrama de tiempos de la figura 2, el modo de empleo es muy
sencillo. Externamente se aplica, por parte del usuario, un pulso de disparo o trigger de 10 S de
duración mínima. Se inicia la secuencia. El módulo transmite un tren de pulsos o “burst” de 8 ciclos a
40KHz. En ese momento la señal
de salida ECO pasa a nivel “1”. Cuando la cápsula receptora recibe la señal transmitida como
consecuencia de haber rebotado en un objeto (eco), esta salida pasa de nuevo a nivel “0”. El
usuario debe medir la duración del pulso de esta señal, es decir, el tiempo en que la señal eco se
mantiene a “1”.

50
Neryo Condori Q.
Con objeto de que el módulo se estabilice, se debe dejar un lapsus de tiempo de unos 20mS
mínimo entre
el momento en que la señal de eco pasa a “0” y un nuevo pulso de disparo que inicie el
siguiente ciclo o medida. Esto permite realizar medidas cada 50mS o lo que es igual a 20
medidas por segundo.

La duración del pulso eco de salida varía entre 100 S y 25mS, en función de
la distancia entre las cápsulas del módulo y el objeto. La velocidad del sonido es de 29.15
S/cm que, como realiza un recorrido de ida
y vuelta, queda establecida en 58.30 S/cm. Así pues el rango mínimo que se puede
medir es de 1.7 cm
(100 S/58) y el máximo de 431 cm (25mS/58).

Modo 2, Patilla única para trigger y ECO

Este modo permite emplear una única patilla para generar la señal de disparo o
trigger y también para realizar la medida de la anchura del pulso de salida del ECO, lo que
ahorra patillas en el microcontrolador central. Para emplear este modo basta con conectar la
patilla “Mode” con GND. La señal de ECO aparecerá entonces en
la misma patilla por la que se aplicó la señal de trigger. Esa patilla se debe configurar
primero como salida para generar el disparo y luego como entrada para leer la duración del
ECO. La sentencia PULSIN de los controladores mas populares realiza esta reconfiguración
de forma automática. Ver la figura 3.

El siguiente ejemplo muestra el empleo del Basic Stamp BS2 para controlar el
funcionamiento del módulo
SRF05 mediante las sentencias PULSOUT y PULSIN referidas a un mismo pin.

SRF05 PIN 15 ‘Se emplea el pin 15 para el control del SRF05


Range VAR Word ‘Se define una variable de 16 bits para almacenar la medida

SRF05 = 0 ‘ El proceso se inicia con la patilla 15 a “0”


PULSOUT SRF05, 5 ‘ Se genera un pulso de 10uS (5x2 S)
PULSIN SRF05, 1, Range ' Se mide la duración del ECO
Range = Range/29 ' Se convierte a cm (dividir por 79 para pulgadas)

51
Neryo Condori Q.

CARACTERISTICAS TECNICAS

PARAMETRO VALOR UNIDAD


Dimensiones del circuito 43 x 20 x 17 mm
Tensión de alimentación 5 Vcc
Frecuencia de trabajo 40 KHz
Rango máximo 4 m
Rango mínimo 1.7 cm
Duración mínima del pulso de disparo (nivel TTL) 10 S
Duración del pulso eco de salida (nivel TTL) 100-25000 S
Tiempo mínimo de espera entre una medida y el inicio de otra 20 mS

CONEXIONADO

El módulo emplea tan sólo 5 conexiones que se pueden realizar soldando directamente
5 cables o bien
mediante un conector de 5 vías con paso de 2.54mm. Estas se muestran en la figura 4.

+5Vcc Tensión positiva de alimentación


ECO Salida del pulso cuya anchura determina el
tiempo del recorrido de la señal ultrasónica
Disparo Entrada de inicio de una nueva medida. Se
aplica un pulso con una duración mínima de
10 s
Modo Sin conexión se selecciona el modo 1 de
(N.C.) compatibilidad con SRF04. Conectado a
GND se selecciona el modo 2 de trabajo
GND Tierra de alimentación.

AJUSTES

El módulo SRF05 viene perfectamente ajustado y calibrado de fábrica, por lo que no necesita de
ningún
tipo de ajuste. Su funcionamiento se puede verificar aplicando una serie de pulsos por la entrada
de disparo. Con
ayuda de un osciloscopio se puede medir la anchura de la señal eco de salida. Esta anchura,
representada en S
y dividida entre 58.30 nos permite calcular la distancia del objeto.

APLICACIONES
El módulo SRF05 es capaz de generar una señal lógica de salida cuya duración determina
la distancia de
un objeto. Las aplicaciones son numerosas, citamos unas cuantas a modos de ejemplo:
 Aplicaciones de control conde se deba actuar en función de la
distancia o tamaño de objetos diversos.
 Alarmas activadas cuando el intruso se aproxima a una determinada distancia
 Microbótica en donde es necesario que se actúe en función de
la distancia que separa al robot de cualquier otro objeto
En esta ocasión este sensor se usa para nuestro Robot-Explorador
Manejo Motores
52
Neryo Condori Q.
EL SERVOMOTOR

Un Servo es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede
ser llevado a posiciones angulares específicas al enviar una señal codificada. Con tal de que
una señal codificada exista en la línea de entrada, el servo mantendrá la posición angular del
engranaje. Cuando la señala codificada cambia, la posición angular de los piñones cambia.
En la práctica, se usan servos para posicionar superficies de control como el movimiento de
palancas, pequeños ascensores y timones. Ellos también se usan en radio control, títeres, y
por supuesto, en robots.

Los Servos son sumamente útiles en robótica. Los motores son pequeños, tiene internamente
una circuiteria de control interna y es sumamente poderoso para
su tamaño. Un servo normal o Standard como el HS-300 de Hitec
tiene 42 onzas por pulgada o mejor 3kg por cm. De torque que es
bastante fuerte para su tamaño. También potencia proporcional
para cargas mecánicas. Un servo, por consiguiente, no consume
mucha energía. Se muestra la composición interna de un servo
motor en el cuadro de abajo. Podrá observar la circuiteria de
control, el motor, un juego de piñones, y la caja. También puede ver los 3 alambres de
conexión externa. Uno es para alimentación Vcc (+5volts), conexión a tierra GND y el
alambre blanco es el alambre de control.

FUNCIONAMIENTO

El motor del servo tiene algunos circuitos de control y un potenciómetro (una resistencia
variable) esta es conectada al eje central del servo motor. En la figura se puede observar al
lado derecho del circuito. Este potenciómetro permite a la circuiteria de control, supervisar el
ángulo actual del servo motor. Si el eje está en el ángulo correcto, entonces el motor está
apagado. Si el circuito chequea que el ángulo no es el correcto, el motor girará en la dirección
adecuada hasta llegar al ángulo correcto. El eje del servo es capaz de llegar alrededor de los
180 grados. Normalmente, en algunos llega a los 210 grados, pero varía según el fabricante.
Un servo normal se usa para controlar un movimiento angular de entre 0 y 180.

La cantidad de voltaje aplicado al motor es proporcional


a la distancia que éste necesita viajar. Así, si el eje
necesita regresar una distancia grande, el motor regresará
a toda velocidad. Si este necesita regresar sólo una
53
Neryo Condori Q.
pequeña cantidad, el motor correrá a una velocidad más lenta. A esto se le llama control
proporcional.

CARACTERÍSTICAS GENERALES Y FUNCIONAMIENTO:

Estos servos tienen un amplificador, servo motor, piñonearía de reducción y un


potenciómetro de realimentación; todo incorporado en el mismo conjunto. Esto es un servo
de posición (lo cual significa que uno le indica a qué posición debe ir), con un rango de
aproximadamente 180 grados. Ellos tienen tres cables de conexión eléctrica; Vcc, GND, y
entrada de control.

Para controlar un servo, usted le ordena un cierto ángulo, medido desde 0 grados. Usted le
envía una serie de pulsos. En un tiempo ON de pulso indica el ángulo al que debe
posicionarse; 1ms = 0 grados, 2.0ms = máx. grado (cerca de 120) y algún valor entre ellos da
un ángulo de salida proporcional. Generalmente se considera que en 1.5ms está el "centro."
Entre límites de 1 ~ 2ms son las recomendaciones de los fabricantes, usted normalmente
puede usar un rango mayor de 1.5ms para obtener un ángulo mayor e incluso de 2ms para un
ángulo de rendimiento de 180 grados o más. El factor limitante es el tope del potenciómetro y
los límites mecánicos construidos en el servo. Un sonido de zumbido normalmente indica
que usted está forzando por encima al servo, entonces debe disminuir un poco.

El tiempo de OFF en el servo no es crítico; puede estar alrededor de los 20ms. Hemos usado
entre 10ms y 30 ms. Esto No tiene que ser de ésta manera, puede variar de un pulso a otro.
Los pulsos que ocurren frecuentemente en el tiempo de OFF pueden interferir con el
sincronismo interno del servo y podría escucharse un sonido de zumbido o alguna vibración
en el eje. Si el espacio del pulso es mayor de 50ms (depende del fabricante), entonces el
servo podría estar en modo SLEEP entre los pulsos. Entraría a funcionar en pasos pequeños y
el rendimiento no sería el óptimo.

Como se observa en la figura, la


duración del pulso indica o dictamina
el ángulo del eje (mostrado como un
círculo verde con flecha). Nótese que
las ilustraciones y los tiempos reales
dependen del fabricante de motor. El
principio, sin embargo, es el mismo.

54
Neryo Condori Q.

El cable de control se usa para comunicar el ángulo. El ángulo está determinado por la
duración de un pulso que se aplica al alambre de control. A esto se le llama PCM Modulación
codificada de Pulsos. El servo espera ver un pulso cada 20 milisegundos (.02 segundos). La
longitud del pulso determinará los giros de motor. Un pulso de 1.5 ms., por ejemplo, hará que
el motor se torne a la posición de 90 grados (llamado la posición neutra). Si el pulso es menor
de 1.5 ms., entonces el motor se acercará a los 0 grados. Si el pulso es mayor de 1.5ms, el eje
se acercará a los 180 grados.

La descripción realizada anteriormente como se a podido observar son de servomotores de


corriente continua usados en robótica doméstica y en aeromodelismo fundamentalmente.

SERVOMOTORES EN MODELISMO:

DIAGRAMA DE UN SERVOMOTOR TÍPICO DE MODELISMO.

Un servomotor de este tipo es básicamente un motor eléctrico que sólo se puede girar en un
ángulo de aproximadamente 180 grados (no dan vueltas completas como los motores
normales). De los tres cables que salen de su cubierta. El rojo es de voltaje de alimentación
(+5V), el negro es de tierra (0V ó GND). El cable blanco (a veces amarillo) es el cable por el
cuál se le instruye al servomotor en qué posición ubicarse (entre 0 grados y 180).

Dentro del servomotor, una tarjeta controladora le dice a un pequeño motor de corriente
directa cuántas vueltas girar para acomodar la flecha (el eje de plástico que sale al exterior)
en la posición que se le ha pedido.
55
Neryo Condori Q.
En la siguiente figura se observa la ubicación de estas piezas dentro del servomotor:

Un potenciómetro que está está sujeto a la flecha, mide hacia dónde está ubicado en todo
momento. Es así como la tarjeta controladora sabe hacia dónde mover al motor.
La posición deseada se le da al servomotor por medio de pulsos. Todo el tiempo debe haber
una señal de pulsos presente en ese cable.
La señal de pulsos controla al servo de la siguiente forma:

Nótese que el intervalo de tiempo entre pulsos se mantiene constante, y la variación del
ancho de los mismos es lo que le indica al servo la posición que se desea. Estos valores de
milisegundos han funcionado bastante bien para los servomotores FUTABA FP-S148,
FUTABA S3003, Hitec HS-300 y HOBBICO COMMAND CS-51, y hemos encontrado
también que son bastante tolerables en cuanto al período de los pulsos de control. Responden
adecuadamente a pulsos desde 50 hz. hasta aproximadamente 100 hz., pero una vez escogida
una frecuencia de operación debe procurarse mantener la misma frecuencia todo el tiempo.

56
Neryo Condori Q.



57
Neryo Condori Q.

58
Neryo Condori Q.

59
Neryo Condori Q.

60
Neryo Condori Q.

61
Neryo Condori Q.

62
Neryo Condori Q.

63
Neryo Condori Q.

T( ) h sen((( / 2 ) / S ) )

64
Neryo Condori Q.

65
Neryo Condori Q.

66
Neryo Condori Q.

67
Neryo Condori Q.

68
Neryo Condori Q.

µ A = -k

69
Neryo Condori Q.

1 k
2

70
Neryo Condori Q.

71
Neryo Condori Q.

72
Neryo Condori Q.

73
Neryo Condori Q.

74
Neryo Condori Q.

Circuito del Robot-Explorador


Diagrama del Robot-Explorador

75
Neryo Condori Q.

Circuito impreso
Este es la placa del Robot-Explorador

Esta circuito es le cerebro de nuestro Robot-Explorador

Placa del Robot-Explorador

76
Neryo Condori Q.

Placa del transmisor de tv

Robot-Explorador acabador

77
Neryo Condori Q.

Fotos del Robot-Explorador


78
Neryo Condori Q.

Fotos del Robot-Explorador

79
Neryo Condori Q.

Código fuente para el pic16f84a


;********************************** Robot-Explorador************************************
; ZONA DE DATOS **********************************************************************

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


LIST P=16F84A
INCLUDE <P16F84A.INC>

CBLOCK 0x0C
Distancia ; Se expresará en centímetros.
POSICION_1
MODO
CONTADOR_BUSQUEDA
CONTADOR_BUSQUEDA_1
GRADO
W_AUXILIAR
CONTADOR_164
Velocidad
NUMERO_GRADO
ENDC

#DEFINE DATO_164 PORTA,2


#DEFINE CLOCK_164 PORTA,3
#DEFINE RESET_164 PORTA,4
VELOCIDAD_MOTOR EQU D'4'
#DEFINE SRF_05 PORTB,0 ; Disparo para iniciar la medida.
#DEFINE SALIDA PORTB,1 ;SALIDA PARA EL CONTROL DEL SERVO
#DEFINE PULSACION PORTB,2 ;PULSADOR PARA POSIONAR
TMR0_100us EQU -D'93' ;VALOR A CARGAR PARA EN SERVO
MinimaDistancia EQU .3 ;DISTANCIA MINIMA A MEDIR
MaximaDistancia EQU .250 ;DISTANCIA MAXIMA A MEDIR
TMR0_Carga60micros EQU -d'27' ;VALOR A CARGAR PARA MEDIR DISTANCIA USADO
POR EL SRF05

; ZONA DE CÓDIGOS ********************************************************************

ORG 0
goto Inicio
ORG 4

GOTO ATENCION_INTERRUPCION

Mensajes
addwf PCL,F
MensajeDistancia_1
DT " Distancia^: ", 0x00
MensajeDistancia_2
DT " Distancia<: ", 0x00
MensajeDistancia_3
DT " Distancia>: ", 0x00

MensajeCentimetro
DT " cm", 0x00
MensajeDistanciaMenor
DT "Dist. MENOR de:", 0x00
MensajeDistanciaMayor
DT "Dist. MAYOR de:", 0x00
Inicio

call LCD_Inicializa ;LLAMA A INICIALIZAR LCD


80
Neryo Condori Q.

bsf STATUS,RP0 ;ACCEDE AL BANCO 1


BCF SRF_05 ;PIN SRF_05 COMO SALIDA
BCF SALIDA ;PIN SALIDA PRA EL SERVO COMO SALIDA
BSF PULSACION ;PULSADOR COMO ENTRADA
movlw b'00000000' ;* Prescaler de 2 para el TMR0.*
movwf OPTION_REG ;CARGA AL REGITRO OPTION_REG
bcf STATUS,RP0 ;REGRESA AL BANCO 0
clrf Distancia ;BORRA EL REGISTRO AUXILIAR ;DISTANCIA
MOVLW .1
MOVWF PERIODO
BCF SRF_05 ; Inicializa línea de disparo en bajo.
MOVLW .25
MOVWF NUMERO_GRADO ; GENERAR 90º CON LOS MOTORES PAP
MOVLW .25
MOVWF CONTADOR_BUSQUEDA
MOVLW .10
MOVWF CONTADOR_BUSQUEDA_1
MOVLW VELOCIDAD_MOTOR ;VELOCIDA MAXIMA
movwf Velocidad
CLRF GRADO
INICIO_146
BSF STATUS,RP0
BCF DATO_164
BCF CLOCK_164
BCF RESET_164
BCF STATUS,RP0
MOVLW .8 ;RESPRESENTA EL NUMERO DE BITS
MOVWF CONTADOR_164
MOVLW . 25 ;25*4 REPRESENTA 90º POR 5us POR PASO
MOVWF NUMERO_GRADO
BSF RESET_164 ;DESABILITA EL RESET DEL 164

GOTO Principal ;SE VA A PRINCIPAL LUEGO DE ;CONFIGURAR


PUERTOS

;****************************CAMBIO*DE*PUERTOS*PRAR*SRF_05*************************************
COMO_SALIDA ;ESTA PEQUEÑA SUB RUTINA ES USADO
BSF STATUS,RP0 ;PARA CAMBIAR DE ENTRADA A SALIDA NO
BCF SRF_05 ;DE ENTRADA A SALIDA PARA SER USADO
BCF STATUS,RP0 ;CON EL SFR_05 EN MODO BIDIRECCIONAL
RETURN
COMO_ENTRADA ;ESTA PEQUEÑA SUB RUTINA ES USADO
BSF STATUS,RP0 ;PARA CAMBIAR DE SALIDA A ENTRADA NO
BSF SRF_05 ;DE ENTRADA A SALIDA PARA SER USADO
BCF STATUS,RP0 ;CON EL SRF_05 EN MODO BIDIRECCIONAL
BCF SRF_05
RETURN
;***********************************************************************************
;ESTE ES LA PARTE PRINCIPAL DE PROGRAMA EN GENERAL YA QUE A PARTIDE DE AQUI SE ;DIRIGEN
;A OTRAS SUB RUTINAS Y TAMBIEN A LA INTERRUPCION
;********************************************************************************************************************
Principal
CALL MEDIENDO_DISTANCIA
CALL SERVO_90_GRADOS
AQUINOMAS_SIGUE
CALL ACTIVAR_AVANCE
GOTO AQUINOMAS_SIGUE
GOTO Principal

MEDIENDO_DISTANCIA
BCF MODO,0 ;ESTE REGISTRO MODO INDICA QUE EL BIT 0 = 0 ;INDICA
QUE SE ESTA USANDO SRF_05

81
Neryo Condori Q.

bsf STATUS,RP0 ;ACCEDE AL BANCO 1 //


BCF SRF_05 ;EL PIN SRF_05 COMO SALIDA //
Movlw b'10000000' ; Prescaler de 2 para el TMR0.//>ESTA PARTE SE ;ESTA
MOVWF OPTION_REG ;
bcf STATUS,RP0 ;SALE DE BANCO 1 AL BANCO 0 //
;********************************************************************************************
;**************AQUI SE INICIA EL SENSOR ULTRASONIDO*****************************************
;********************************************************************************************
clrf Distancia ; Inicializa el registro CON (00000000).
CALL COMO_SALIDA ;SUB RUTINA PARA USAR EL PIN SRF_05 COMO SALIDA
bsf SRF_05 ; Comienza el pulso de disparo.
call Retardo_10micros; ESPERAR 10us COMO MINIMO
bcf SRF_05 ; Final del pulso de disparo
CALL COMO_ENTRADA ;COMO LUEGO SE USARA PARA MEDIR LA ;LONGITUD
;DE LA ONDA DEL SRF_05 SE TIENE QUE CAMBIAR A
;MODO DE ENTRADA POR ELLO SE LLAMA COMO_ENTRADA
;*******************************************************************************************
;HASTA ESTE MOMENTO YA ME SALIO TODO BIEN AUNQUE SE ME DIFICULTO UN POCO YA PASE LA
DIFICULTAD
;AHORA ME PROPONGO A HACER TRES MEDIDAS DEFRENTE, IZQUIERDA, DERECHA

;*******************************************************************************************
Espera_Eco_1 ;AQUI EMPIESA A MEDIR LA DURASION DEL PULSO
Btfss SRF_05 ; Si ECO=0, espera el flanco de ;subida de la señal ;SALTA SI
ES 1
goto Espera_Eco_1 ; SI ES 0 ESPERA HASTA QUE SEA 1
movlw TMR0_Carga60micros ; Ya se ha producido el flanco de subida.
movwf TMR0 ; Carga el Timer 0 CON EL VALOR DE -D.27
movlw b'10100000' ; Autoriza interrupción del TMR0 (T0IE).
movwf INTCON ;CARGA AL REGISTRO INTCON
Espera_Eco_0 ;COMO YA SUBIO AHORA ESPERA QUE
btfsc SRF_05 ; Espera flanco de bajada de la señal de la ;salida del SRF04.
goto Espera_Eco_0 ; SI ES 1 ESPERA HASTA QUE SEA 0 LUEGO
DESABILITA LA INTERRUPCION
clrf INTCON ; Se ha producido el flanco de bajada. ;Prohíbe interrup.
call Visualiza ; Visualiza la distancia. PARA ELLO SE SERVI DEL ;
call Retardo_10ms ; Espera un tiempo hasta la próxima medida. TIEMPO
MINI 20ms ENTRE MEDIDA Y MEDIDA
RETURN
;*************************************************************************************************
;*********************AQUI SE INICIA EL SERVO****************************************************
;************************************************************************************************
POSICIONAR_SERVO ;EL MODO YA ESTA COMO 1 = MODO PRA EL CONTADOR DEL SERVO
bsf MODO,0 ;EN BIT 0 DE MODO BIT 0=1 INDICARA EL USO DEL TMR0 PARA EL
;SERVO
BSF STATUS,RP0 ;ACCESO AL BANCO 1
BCF SALIDA ;PIN PARA EL SERVO COMO SALIDA
BSF PULSACION ;PULSADOR COMO ENTRADA
MOVLW B'10001000' ;ESTE CUARTO BIT NOS PODRAS SERVIR PARA
;SELECIONAR LOS TMR0
MOVWF OPTION_REG ;AQUI SE ESTA USANDO EL WASH DOG COMO CONTADOR
;PRESCALR DE 1:1
BCF STATUS,RP0 ;REGRESA AL BANCO 0
MOVLW TMR0_100us ;CARGA W CON TMR0_100us =-D'91'
MOVWF TMR0 ;CARGA EL CONTENIDO DE W A TMR0
MOVLW B'10100000' ;CARGA EL W CON EL VALOR PARA ACTIVAR INTCON POR
;DESBORDAMINEDO POR TMR0
MOVWF INTCON ;NUEVAMENTE ACTIVA LA INTERRUPCION
BCF SALIDA ;AL INCIAR LA SALIDA ESTA EN BAJO

PRINCIPAL_SERVO ;ESTA PARTE ES PRINCIPAL PARA EL CONTROL DEL SERVO

BTFSS SALIDA ;TESTEA LA SALIDA HASTA QUE SEA UNO = 1

82
Neryo Condori Q.

GOTO PRINCIPAL_SERVO ;NO PASA SI ES CERO =0


CHEAR_PUL BTFSC PULSACION
GOTO NO_SE_PUL
CALL Retardo_5ms
BTFSC PULSACION
GOTO NO_SE_PUL
INCF GRADO,F
MOVLW .4
SUBWF GRADO,W
BTFSC STATUS,Z
CLRF GRADO
FALTA BTFSS PULSACION
GOTO FALTA
NO_SE_PUL BTFSC SALIDA ;ESPERA QUE LA SALIDA SEA = 0
GOTO CHEAR_PUL
clrf INTCON

RETURN
;******************ATENCION_INTCON*************************************
CBLOCK
GUARDAR_W
GUARDAR_STATUS
PERIODO
ENDC
ATENCION_INTERRUPCION
MOVWF GUARDAR_W
SWAPF STATUS,W
MOVWF GUARDAR_STATUS
BCF STATUS,RP0

BTFSS MODO,0
goto ServicioInterrupcion ;AQUI SIMPRE QUE SEA 0 ES DECIR TMR PARA
MOVLW TMR0_100us ;CARGAR W CON -D'91' CON ESTE ;VALOR SE PODRA
;GENERAR 100us
MOVWF TMR0 ;AQUI LLEGAR CADA 100us
DECFSZ PERIODO,F ;DECREMENTA PERIODO CUANDO ES = ;A 0 SALTA
GOTO FIN_INTERRUPCION ;SI AUN SO ES 0 SALE DE LA INTERRUPCION
BTFSC SALIDA ;AQUI LLEGARA 100usxPERIODP Y TESTEA SI ES 1 ^ 0
GOTO ES_ALTO ;SALTA SI ES 0 PARA SUBILO UN
;TIEMPO =A 100us X PERIODO ALTO
BSF SALIDA ;AQUI ESTA PONIENDOLO A 1
MOVF GRADO,W PASA DE GRADO A==> W ESTE SE INCREMENTO
;ANTERIOMENTE CON EL PULSADOR
ANDLW B'00000011'
CALL TABLA_DE_GRADOS ;AQUI REGRESA CON EL CONTENIDO EN W
MOVWF PERIODO ;Y LO COLOCA EN PERIODO
GOTO FIN_INTERRUPCION ;SE VA DE SALIDA DE LA INTERRUPCION

ES_ALTO BCF SALIDA ;AQUIN SE PONE EN BAJO O 0 PARA ASI PODER COMPLETAR
MOVF PERIODO,W ;EL PERIODO DE 20ms
SUBLW .200 ; w VALDA = A W = GRADO
MOVWF PERIODO ;AQUI PERIODO ES = 200-GRADO = PERIODO ESTE SE
;MANTENDRA EN BAJO
FIN_INTERRUPCION
SWAPF GUARDAR_STATUS,W
MOVWF STATUS
SWAPF GUARDAR_W,F
SWAPF GUARDAR_W,W
BCF INTCON,T0IF
RETFIE
;*****************TABLA**********************
;ESTA TABLA POSICIONA SI ES 15 X 100us = 90º

83
Neryo Condori Q.

; 6 X 100us = 0º
; 15 X 100us = 90º
; 25 x 100us = 180º
TABLA_DE_GRADOS
ADDWF PCL,F ;CON ESTES DATOS Y EL VALOR DE -93 PARA ;EL TMR0
RETLW .15 ;LA POSICION ALNGULAR ES CASI CORRECTA
RETLW .6
RETLW .15
RETLW .25

; Subrutina "ServicioInterrupcion" ------------------------------------------------------


;
; Se ejecuta debido a la petición de interrupción del Timer 0 cada 60 µs que es el incremento
; de la anchura de pulso por centímetro de distancia medido. La variable "Distancia" contiene el
; valor de la distancia expresada en centímetros.
;
ServicioInterrupcion
movlw TMR0_Carga60micros ; Carga el Timer 0.
movwf TMR0
movlw .1 ; Se utiliza instrucción "addwf", en lugar de "incf"
addwf Distancia,F ; para posicionar flag de Carry.
Movlw MaximaDistancia ; En caso de desbordamiento carga su máximo valor.
btfsc STATUS,C
movwf Distancia

bcf INTCON,T0IF

retfie

; Subrutina "Visualiza" -----------------------------------------------------------------


;
; Visualiza la distancia expresada en centímetros. Se hace de manera que cuando haya que
; visualizar un número mayor de 99 las decenas siempre se visualicen aunque sean cero.
; Y cuando sea menor de 99 las decenas no se visualicen si es cero.
;
; Si la distancia es menor de 3 cm o mayor de 250 cm aparece un mensaje de error.
;
Visualiza
call LCD_Borra ; Borra la pantalla anterior.
movlw MinimaDistancia ; Va a comprobar si es menor del mínimo admisible.
subwf Distancia,W ; (W)=(Distancia)-MinimaDistancia
btfss STATUS,C ; ¿C=1?, ¿(W) positivo?, ¿(Distancia)>=MinimaDistancia?
goto DistanciaMenor ; No ha resultado menor, y salta al mensaje de error.
movf Distancia,W ; Va a comprobar si es mayor del máximo admisible.
sublw MaximaDistancia ; (W)=MaximaDistancia-(Distancia)
btfsc STATUS,C ; ¿C=0?, ¿(W) negativo?, ¿MaximaDistancia<(Distancia)?
goto DistanciaFiable ; No, la medida de la distancia entra dentro del rango.
;
DistanciaMayor
movlw MaximaDistancia ; La distancia es mayor que el máximo.
movwf Distancia
movlw MensajeDistanciaMayor
goto VisualizaDistancia
;
DistanciaMenor
movlw MinimaDistancia ; La distancia es menor del mínimo fiable.
movwf Distancia
movlw MensajeDistanciaMenor
goto VisualizaDistancia
DistanciaFiable
MOVF GRADO,W

84
Neryo Condori Q.

ANDLW B'00000011'

ADDWF PCL,F
GOTO UNO_ES
GOTO DOS_ES
GOTO UNO_ES
GOTO TRES_ES
UNO_ES
MOVLW MensajeDistancia_1
GOTO VisualizaDistancia
DOS_ES
MOVLW MensajeDistancia_2
GOTO VisualizaDistancia
TRES_ES
MOVLW MensajeDistancia_3
GOTO VisualizaDistancia

VisualizaDistancia
call LCD_Mensaje
movlw .5 ; Centra la medida de la distancia en la segunda línea
call LCD_PosicionLinea2 ; de la pantalla.
movf Distancia,W
call BIN_a_BCD ; Lo pasa a BCD.
movf BCD_Centenas,W ; Primero las centenas.
btfss STATUS,Z ; Si son cero no visualiza las centenas.
goto VisualizaCentenas
movf Distancia,W ; Vuelve a recuperar este valor.
call BIN_a_BCD ; Lo pasa a BCD.
call LCD_Byte ; Visualiza las decenas y unidades.
goto Visualiza_cm
VisualizaCentenas
call LCD_Nibble ; Visualiza las centenas.
movf Distancia,W ; Vuelve a recuperar este valor.
call BIN_a_BCD ; Lo pasa a BCD.
call LCD_ByteCompleto ; Visualiza las decenas (aunque sea cero) y
Visualiza_cm ; unidades.
movlw MensajeCentimetro
call LCD_Mensaje
return

;*************************************74xx164**********************************************
;programa que consiste en que le contenido del registro de 'W' se muestre por la salida del*
;integrado 74xx164 es decir la entrada es serial sincrono por la existencia del un reloj *
;la salida es paralela y se displayan el contenido del registro 'W' *
;*******************************************************************************************

ACTIVAR_AVANCE

CALL MEDIENDO_DISTANCIA
;************************principal**********************************
PRINCIPAL_164 ; a multiplicar el retardo patrón.

;ESTA TABLA POSICIONA SI ES 15 X 100us = 90º


; 6 X 100us = 0º
; 15 X 100us = 90º
; 25 x 100us = 180º
;PRIMERO TESTEARA LA PARTE DE ADELANTE
MOVF Distancia,W ;Y ME QUEDE HASTA AQUI ,,,,,,,,,,,,,
MOVLW .10
SUBWF Distancia,W ;DISTANCIA - 10 = W
;SI RESULTA 0 TONS QUE BUSQUE POR OTROS DALOS

85
Neryo Condori Q.

BTFSS STATUS,C ;COMPRUBEVA SI C = 0^1


GOTO ES_CERO_164 ;SALIO 0
BTFSS STATUS,Z
GOTO ADELANTE_1
ES_CERO_164
GOTO BUSQUEDA_1 ;DENTRO DE ESTA SUB RUTINA TENDRA QUE COMPARARSE
TRES DISTANCIAS
; ADENANTE,DERECHA,IZQUIERDA

ADELANTE_1
CLRF GRADO
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
CALL ADELANTE
RETURN
ATRAS_1
CLRF GRADO
CALL ATRAS
RETURN
BUSQUEDA_1
CALL BUSQUEDA
RETURN

;**************************SUB RUTINA DE BUSQUEDA ************************************


;COMO POR DEFECTO ESTARA DEFRENTE, LA PRIMERA BUSQUEDA QUE TENDRA QUE REALISARSE SERA
;AL LADO DERECHA LUEGO IZQUIERDA FINALMENTE SE TENDRA QUE COMPARAR LOS TRES LADOS
;PARA LUEGO DECIDIR A QUE LADO GIRAR
;**************************************************************************************
CBLOCK
DISTANCIA_ME
DIS_DERECHA
DIS_IZQUIERDA
ENDC
;NO ESTA DEMAS COMENTAR QUE CUANDO TUVO QUE ACCESAR A ESTA SUB RUTINA LA DISTANCIA DEL
OPSTACULO
;TUVO QUE SE 10cm POR ELLO SE TENDRA QUE OBIAR LA COMPARACIONDE DE LA DISTANCIA DEL
ADELANTE CON
;LOS LADOS, POR ELLO SOLO SE REQUERIRA COMPARAR LOS LADOS DERECHA Y IZQUIERDA
;ESTA TABLA POSICIONA SI ES 15 X 100us = 90º =0
; 6 X 100us = 180º =1
; 15 X 100us = 90º =2
; 25 x 100us = 0º =3
BUSQUEDA
; BSF MODO,1 ;ESTE SEGUNDO BIT DEL REGISTRO AUXILIAR MODO
SE USARA PARA REGRESAR DEFRENTE AQUI

CALL SERVO_0_GRADOS
CALL TOMAR_LAS_MEDIDAS_IZQUIERDA
CALL SERVO_180_GRADOS
CALL TOMAR_LAS_MEDIDAS_DERECHA
CALL SERVO_90_GRADOS
CALL DESICIONES_DE_GIRO
RETURN
;********************************************************************************************************
SERVO_0_GRADOS
MOVLW .3

86
Neryo Condori Q.

MOVWF GRADO ;CON ESTE VALOR EL SERVO GIRARA 180º Y TENDRA QUE MEDIR
ESA DISTANCIA
TE_FALTA_180
CALL POSICIONAR_SERVO
CALL Retardo_20ms
DECFSZ CONTADOR_BUSQUEDA,F
GOTO TE_FALTA_180
MOVLW .25
MOVWF CONTADOR_BUSQUEDA
RETURN
;*********************************************************************************************************
TOMAR_LAS_MEDIDAS_IZQUIERDA
TE_FALTA_ESP1
CALL MEDIENDO_DISTANCIA ;***
CALL Retardo_50ms ;***
DECFSZ CONTADOR_BUSQUEDA_1,F
GOTO TE_FALTA_ESP1
MOVLW .10
MOVWF CONTADOR_BUSQUEDA_1
MOVF Distancia,W
MOVWF DIS_IZQUIERDA
RETURN
;********************************************************************************************************
SERVO_180_GRADOS
MOVLW .1
MOVWF GRADO
TE_FALTA_0
CALL POSICIONAR_SERVO
CALL Retardo_20ms
DECFSZ CONTADOR_BUSQUEDA,F
GOTO TE_FALTA_0
MOVLW .25
MOVWF CONTADOR_BUSQUEDA
RETURN
;*********************************************************************************************************
SERVO_90_GRADOS

CLRF GRADO
TE_FALTA_90
CALL POSICIONAR_SERVO
CALL Retardo_20ms
DECFSZ CONTADOR_BUSQUEDA,F
GOTO TE_FALTA_90
MOVLW .25
MOVWF CONTADOR_BUSQUEDA
RETURN
;*********************************************************************************************************
TOMAR_LAS_MEDIDAS_DERECHA
TE_FALTA_ESP2
CALL MEDIENDO_DISTANCIA ;***
CALL Retardo_50ms ;***
DECFSZ CONTADOR_BUSQUEDA_1,F
GOTO TE_FALTA_ESP2
MOVLW .10
MOVWF CONTADOR_BUSQUEDA_1
MOVF Distancia,W
MOVWF DIS_DERECHA
RETURN
DESICIONES_DE_GIRO
;*************************ESTA_PARTE_COMPARA_LOS_LADOS_PARA_GIRAR**********************************
MOVF DIS_IZQUIERDA,W ;CARGA W CON EL CONTENIDO DE DERECHA
SUBWF DIS_DERECHA,W ;DERECHA-IZQUIERDA=W Z=? C=?
BTFSS STATUS,C

87
Neryo Condori Q.

GOTO A_Derecha_90
GOTO A_Izquierda_90
;SERIA MEJOR UNA PEQUEÑA
RUTINA PARA ATRAS
RETURN

;****************ESTAS SUB RUTINAS SON USADOS PARRA GIRAN 90º BINE HACIA LA IZQUIERDA O
;DERECHA
A_Derecha_90
call GiroDerecha
DECFSZ NUMERO_GRADO,F
goto A_Derecha_90
MOVLW .22
MOVWF NUMERO_GRADO
GOTO PRINCIPAL_164

A_Izquierda_90
call GiroIzquierda
DECFSZ NUMERO_GRADO,F
goto A_Izquierda_90
MOVLW .22
MOVWF NUMERO_GRADO
GOTO PRINCIPAL_164
;************************conversion*********************************

CONVERSION_164
MOVWF W_AUXILIAR
FALTA_164
RLF W_AUXILIAR,F
BTFSS STATUS,C
GOTO ES_CERO_164_
BSF DATO_164
BSF CLOCK_164
BCF CLOCK_164
BCF DATO_164
DECFSZ CONTADOR_164,F
GOTO FALTA_164
movf Velocidad,W ; Y ahora el retardo en función del valor de
movwf Contador_164_2; de la variable Velocidad.
Retardo_0
call Retardo_1ms
decfsz Contador_164_2,F
goto Retardo_0

BCF RESET_164
BSF RESET_164
MOVLW .8
MOVWF CONTADOR_164
RETURN
ES_CERO_164_
BCF DATO_164
BSF CLOCK_164
BCF CLOCK_164
BCF DATO_164
DECFSZ CONTADOR_164,F
GOTO FALTA_164
movf Velocidad,W ; Y ahora el retardo en función del valor de
movwf Contador_164_2; de la variable Velocidad.
Retardo_1
call Retardo_1ms
decfsz Contador_164_2,F
goto Retardo_1

88
Neryo Condori Q.

BCF RESET_164
BSF RESET_164
MOVLW .8
MOVWF CONTADOR_164
RETURN

; Subrutina "GiroIzquierda" -------------------------------------------------------------

GiroIzquierda
movlw b'01010101' ; Primer paso.
call CONVERSION_164 ; Lo envía a la salida donde está conectado el motor PAP.
movlw b'01100110' ; Segundo paso.
call CONVERSION_164
movlw b'10101010' ; Tercer paso.
call CONVERSION_164
movlw b'10011001' ; Cuarto y último paso
call CONVERSION_164
return

; Subrutina "GiroDerecha" ---------------------------------------------------------------

GiroDerecha
movlw b'10011001' ; Primer paso.
call CONVERSION_164
movlw b'10101010' ; Segundo paso.
call CONVERSION_164
movlw b'01100110' ; Tercer paso.
call CONVERSION_164
movlw b'01010101' ; Último paso.
call CONVERSION_164
return
; SUBRUTINA ADELNATE*********************************************************************
ADELANTE
movlw b'10010101' ; Primer paso.
call CONVERSION_164
movlw b'10100110' ; Segundo paso.
call CONVERSION_164
movlw b'01101010' ; Tercer paso.
call CONVERSION_164
movlw b'01011001' ; Último paso.
call CONVERSION_164
return
;SUBRUTINA ATRAS************************************************************************
ATRAS
movlw b'01011001' ; Primer paso.
call CONVERSION_164
movlw b'01101010' ; Segundo paso.
call CONVERSION_164
movlw b'10100110' ; Tercer paso.
call CONVERSION_164
movlw b'10010101' ; Último paso.
call CONVERSION_164
return

;
; Subrutina "ActivaSalida" --------------------------------------------------------------

CBLOCK
Contador_164_2
ENDC
;TODO ESTE PROGRaMA TENDRA QUE CONSIDERARSE COMO UNA LIBRERIA PARA PROXIMAS
;APLICASIONES

89
Neryo Condori Q.

INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <BIN_BCD.INC>
END

;ESTOY AGUSTO CON LOQUE CONSEGUI ANTENTAMNTE AUTOR: NERYO CONDOQRI QUISPE
; ===================================================================

Conclusiones
Asi concluido con este pequeño aporte podrías servir de ayuda aloque se inician entes mundo de la
Electrónica espero sa útil ya que se trato de explicar tal el principio de funcionamiento de los robots que
Que son destinados alas Exploraciones de otros mundos en búsqueda de vida, Robot-Explorador que
se menciono en este documento, tal ves este muy lejos de serlo uno de los que se envía a grandes
misiones de Exploración pero, se iso con la finada de que el lector se adientre en este mundo de
Exploración basado en robots.
Recomendación
Se recomienda hacer todas las mejor que el lector crea conveniente para asi poder mejorado,
En este proyecto se uso el pic16f84a el cual se uso al máximo incluso llegando a multiplexar para
obtener salidas.
Se uso este micro controlador por que la mayoría de programadores de micro controladores pic se
inicia
Con este pic por ello es que se uso este micro controlador, se recomienda usar otro micro controlador
de preferencia que tenga mas entradas y salidas y a ello sumándole mas recurso.
Por los errores encontrados en este proyecto agradecería mucho hacérmelo saber

BIBLIOGRAFÍA

www.ucontrol.com.ar
www.electronicaestudios.com.ar
www.todorobot.com.pe
www.microntroladores.com
http://www.national.com/parametric/0,1850,502,00.html
http://www.x-robotics.com/sensores.htm
http://www.superrobotica.com/Sensores.htm
http://www.junun.org/MarkIII/Store.jsp#item1
http://es.wikipedia.org
http://www.rae.es/
http://www.amidata.es
http://www.robot-electronics.co.uk/htm/md22tech.htm
Ultrasonidos
Funcionamiento http://www.robotbuilder.co.uk/Resources/Articles/138.aspx
Sensor SRF05 http://www.robot-electronics.co.uk/htm/srf05tech.htm
Funcionamiento http://www.superrobotica.com/S320160.htm
PIC
Funcionamiento http://ww1.microchip.com/downloads/en/DeviceDoc/39632c.pdf
Datos de otros
robots
Seguritron http://www.seguritron.com/descripcion.htm
Robot Politecnica http://www.upm.es/investigacion/cultura_cientifica/VIISemana
Ciencia/VII_Feria_Madrid.pdf
Datos de rectas http://es.wikipedia.org/wiki/Recta#Ecuaci.C3.B3n_de_la_recta
90

También podría gustarte