Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Readme
Readme
6 de Febrero
1
Neryo Condori Q.
2
Neryo Condori Q.
3
Neryo Condori Q.
ÍNDICE
Resumen
Índice
INTRODUCCION
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
Conclusiones
Recomendación
BIBLIOGRAFÍA
6
Neryo Condori Q.
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.
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.
Pines y funciones
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.
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
10
Neryo Condori Q.
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
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
+5V
PIC16F84 PIC16F84
Imax=20mA
Imax=25mA
+5V
PIC16F84 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:
12
Neryo Condori Q.
+5VDC
OSC1
Fosc/4 OSC2
C
PIC16F84
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.
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
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
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
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.
15
Neryo Condori Q.
Capítulo 1. El P16F84
16
Neryo Condori Q.
Capítulo 1. El PIC16F84
7Fh FFh
Página 0 Página 1
* No es un registro físico
Posiciones no implementadas
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.
Registro: STATUS
bit 7 bit 0
Dirección: 03h
condición de reset: 000??XXX
Registro: INTCON
bit 7 bit 0
Dirección: 0Bh
condición de reset: 0000000Xb
Registro: OPTION
RBPU INTEDG GRTS RTE PSA PS2 PS1 PSO
bit 7 bit 0
Dirección: 81h
condición de reset: 11111111b
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
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:
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. 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 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>).
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.
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:
26
Neryo Condori Q.
27
Neryo Condori Q.
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.
29
Neryo Condori Q.
Logic D iagram
30
Neryo Condori Q.
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.
32
Neryo Condori Q.
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
2.7 k Output C
Input B
7.2 k 3k
E
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.
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
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
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
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
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.
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
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
El sensor
El medidor ultrasónico.
Principios.
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
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.
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).
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.
51
Neryo Condori Q.
CARACTERISTICAS TECNICAS
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.
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.
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.
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.
SERVOMOTORES EN 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.
75
Neryo Condori Q.
Circuito impreso
Este es la placa del Robot-Explorador
76
Neryo Condori Q.
Robot-Explorador acabador
77
Neryo Condori Q.
79
Neryo Condori Q.
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
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
;****************************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.
;*******************************************************************************************
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
82
Neryo Condori Q.
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
bcf INTCON,T0IF
retfie
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.
85
Neryo Condori Q.
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
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
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
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