Proyecto ROBOT

Anuncio
Proyecto
ROBOT-BALIZA
Departamento de Electricidad-Electrónica
Ciclo Superior de Desarrollo de Productos Electrónicos
Autor: José Villaverde Gura
Profesores: Pedro Alonso Sanz
Alfonso García Gallego
Juan Dongil García
Instituto: I.E.S. Joan Miró
Localidad: San Sebastián de los Reyes
Curso:
2007/2008
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
Este documento es un borrador tengo que cambiar todos las imágenes
y revisar todas las anotaciones.
El programa no es el programa final
Índice: .........................................................................................................................................................
Pagina
1.- Explicación breve del Proyecto. ............................................................................................................................. 3
2.- Diagrama en Bloques del Robot Laberinto y Coche Teledirigido. ........................................................................... 6
3.- Análisis de los Bloques........................................................................................................................................... 7
3.1.- Alimentación del Circuito. .................................................................................................................................. 7
3.2.- Receptor de Radiofrecuencia. ............................................................................................................................. 7
3.3.- Sensores de Distancia. ........................................................................................................................................ 8
3.4. - Cargador del Programa. ..................................................................................................................................... 8
3.5.- Control. .............................................................................................................................................................. 9
3.6.- Etapa de Potencia y control de giro. ..................................................................................................................10
3.7.- Indicadores Luminosos. .....................................................................................................................................11
3.8.- Pantalla LCD. .....................................................................................................................................................11
3.9.- Motores de C.C. .................................................................................................................................................12
3.10. Servo-Motor .....................................................................................................................................................12
3.11.- Baliza ...............................................................................................................................................................13
3.12.- Sensores de infrarrojos y acondicionador de señal ..........................................................................................14
3.13.- Mando .............................................................................................................................................................15
4.1.- Simulación del Robot Baliza. ..............................................................................................................................16
4.2.- Simulación del Robot laberinto + Coche Teledirigido. ........................................................................................17
4.-Esquema eléctrico de simulación con Proteus. ......................................................................................................16
5.- Programas Robot Baliza ........................................................................................................................................18
5.1-Diagramas de flujo ...............................................................................................................................................18
5.2.- simu4.asm. (Simulación). ...................................................................................................................................20
5.3. - Real4.asm. (Real). .............................................................................................................................................26
6.- Programas Robot Baliza + Coche Teledirigido. ......................................................................................................32
7.- Librerías. ...............................................................................................................................................................39
7.1.- I2C.INC ...............................................................................................................................................................39
7.10.- R_C_2.INC. .......................................................................................................................................................35
7.11.- T1_COCHE.INC. ................................................................................................................................................32
7.2.- I2C_16F.INC .......................................................................................................................................................41
7.3.- BIN_BCD.INC. .....................................................................................................................................................44
7.4.- PWM_RC1.INC. ..................................................................................................................................................45
Ciclo Superior de Desarrollo de Productos Electrónicos
2
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
7.5.- PWM_RC2.INC. ..................................................................................................................................................47
7.6.- RETARDOS.INC. ..................................................................................................................................................48
7.7.- LCD_4B_1.INC. ...................................................................................................................................................52
7.8.- LCD_MENS.INC. .................................................................................................................................................58
7.9.- SRF08_L1.INC. ....................................................................................................................................................61
8.- Diseño de Placas de Circuitos Impresos. ...............................................................................................................65
8.1.- Alimentación del Circuito + Cargador del Programa. .........................................................................................65
8.2.- Control + Potencia + etc. ....................................................................................................................................66
8.3.- Mando. ..............................................................................................................................................................68
8.4.- Baliza .................................................................................................................................................................69
8.5.- Sensores de infrarrojos ......................................................................................................................................70
9.- Diseño mecánico. .................................................................................................................................................71
10.- Lista de Componentes. .......................................................................................................................................72
10.1.- Alimentación del Circuito + Cargador del Programa.. .......................................................................................72
10.2.- Control + Potencia + etc. ..................................................................................................................................73
10.3.- Baliza ...............................................................................................................................................................74
10.4.- Sensor de infrarrojos .......................................................................................................................................76
10.5.- Chasis. .............................................................................................................................................................76
11.- Coste Económico. ...............................................................................................................................................77
11.1.- Desarrollo del Proyecto. ..................................................................................................................................77
11.2.- Material . .........................................................................................................................................................77
12.- Bibliografía. ........................................................................................................................................................77
13.1.- Características Eléctricas del Motor de Corriente Continua. ............................................................................77
13.2.- Características Eléctricas Tarjeta Emisora SAW para ........................................................................................77
13.3.- Características Eléctricas Tarjeta Receptora de ................................................................................................77
13.4.- Características Eléctricas del Sonar SRF08. .......................................................................................................77
Ciclo Superior de Desarrollo de Productos Electrónicos
3
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
1.- Explicación breve del Proyecto.
El proyecto se basa en la fabricación de un robot que sea capaz de seguir una baliza y salvar los
obstáculos que se va encontrando.
El robot está controlado por medio de un microcontrolador de Microchip PIC 16F877A en el cual
va cargado el programa que controla el robot.
La baliza es un circuito a parte del robot, consta de un 555 que genera una señal cuadrada de 36
KHz y la emite por un emisor de infrarrojos
La señal procedente de la baliza la recibe el robot por medio de dos receptores de infrarrojos. Estos
receptores están separados por el espacio que ocupa el servo.
Si la baliza se encuentra enfrente del robot los dos receptores reciben señal y si la baliza se
encuentra a un lado del robot el receptor de ese lado recibe la señal de la baliza en cambio la del
otro lado no recibe señal porque el servo le hace sombra al estar en medio de la baliza y el receptor.
Con estos dos receptores conectados al PIC el robot localiza la dirección donde se encuentra la
baliza.
Dispone de un sensor de Ultrasonidos SRF08 para localizar los obstáculos.
Este sensor de ultrasonido esta acoplado a la dirección del robot y a través del bus I2C se comunica
con el PIC y le da la distancia que hay entre el robot y un obstáculo que tenga de frente.
Esta distancia le sirve al robot para localizar paredes y obstáculos para evitar chocar con ellos y
seguir buscando la baliza.
Este robot gira por medio de un servo. La posición del servo viene controlada por el tiempo a nivel
alto de una señal cuadrada de un periodo entre 10ms y 30ms procedente del PIC.
El robot se mueve por medio de dos motores de tracción conectados juntos a los cuales le llega la
tensión que le da el L298. El integrado L298 controla el sentido de giro de los motores también
puede controlar la marcha y paro pero esto el robot lo hace atraves de una señal cuadrada que utiliza
el integrado para dar tensión a los motores.
Esta señal cuadrada la da el PIC y la separamos de la parte de alimentación de los motores por
medio de un optocoplador que le da la señal de alimentación de los motores al L298.
El robot nos indica en una pantalla LCD y en unos LED la dirección que esta tomando y la distancia
de los obstáculos.
Además se ha añadido al robot que pueda ser teledirigido.
El control del robot puede hacerse manualmente.
Ciclo Superior de Desarrollo de Productos Electrónicos
4
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
Existe una comunicación entre el robot y un mando en radio frecuencia con los módulos de
CEBECK C-0503 y C-0504. Que son un transmisor y receptor de datos en modulación AM que
trabajan a una frecuencia portadora 433,92 MHz y tienen un Ancho de Banda de 4 KHz.
Se diseña el proyecto con una herramienta software llamada Proteus, que te permite simular el
hardware y el software a la vez, pudiendo ejecutarse paso a paso cada programa. Se puede trabajar
con ficheros .ASM y C. Además se ha desarrollado las placas del proyecto y la carrocería del
dispositivo.
También se ha utilizado la herramienta de diseño MPLAB de Microchip para depurar el programa..
El software se puede grabar en el robot directamente sin necesidad de extraer el microcontrolador,
para ello se ha utilizado el grabador PICdownloader.exe. Los microcontroladores tienen que tener
cargado previamente un programa de comunicaciones para comunicarnos con un Ordenador
Personal.
Ciclo Superior de Desarrollo de Productos Electrónicos
5
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
2.- Diagrama en Bloques del Robot Laberinto y Coche Teledirigido.
Ciclo Superior de Desarrollo de Productos Electrónicos
6
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.- Análisis de los Bloques.
3.1.- Alimentación del Circuito.
La Fuente de Alimentación es un circuito que se encargar de obtener una tensión de 5V continua a partir de
una superior de 12V, para ello se ha utilizado el regulador 7805 (Encapsulado TO3) que nos puede dar una corriente de
salida Imax de 1.5 A.
C1, C2, C3 y C4 son condensadores de filtro.
El diodo D1 tiene la misión de proteger el circuito en caso de poner la batería BAT1 al revés.
El diodo Led D4 nos indica que la fuente esta encendida, estando limitada su corriente a 20 mA por la resistencia R5.
Los diodos D2 y D3 son de protección del regulador 7805 de sobretensiones e inversiones de tensión de salida.
También obtenemos una tensión de 11,4 V para alimentar los motores.
ALIMENTACION DEL CIRCUITO
D2
K
A
1N4007_JOAN
U1
D1
7805_JOAN
VI
3
VO
VCC1(5V)
330nF
2
C2
220uF
C3
C4
100nF
220uF
D3
D4
1N4007_JOAN
LED-GREEN_JOAN
K
A
2
C1
K
GND
A
K
1N4007_JOAN
A
1
SW2
INTERRUPTOR_JOAN
1
R5
2
BAT1
VCC2(11.4V)
1
220
12V
3.2.- Receptor de Radiofrecuencia.
La Tarjeta Receptora de Datos CEBEK C-0504 es un circuito híbrido encargado de recibir vía radiofrecuencia,
los datos digitales procedentes del Mando. La señal digital tiene que tener una frecuencia entre 20 Hz < fo < 4 KHz. y
una portadora de 433,92 MHz. Este circuito demodula la señal de AM obteniendo los datos transmitidos.
RF2
CEBEK-C-0504_JOAN
Vs
TEST
Vcc
15
14
13
GND3
11
GND2
7
GND1
Antena
3
2
1
Vcc1
Receptor de Datos CEBEK C-0504
VCC1(5V)
RC7(RF)
ANTENA
Ciclo Superior de Desarrollo de Productos Electrónicos
7
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.3.- Sensores de Distancia.
El módulo SFR08 consiste en un medidor ultrasónico de distancia de bajo coste desarrollado por la firma
DEVANTECH Ltd. Emplea un microcontrolador PIC 16F872 que realiza todas las funciones de control e interface,
lleva dos capsulas ultrasónicas de 40 KHz que nos van a proporcionar la distancia a un objeto y una célula LDR que nos
va a indicar la luz ambiental existente.





El rango de medidas es hasta 6m.
Se controla con bus I2C.
El consumo es de 3 a 15 mA.
Puede medir ecos.
Nos da la medida en cm, pulgadas o microsegundos.
ULTR1
5 4 3 2 1
RC4
RC3
+5Vcc
SDA
SCL
N.C.
GND
Medidor de Ultrasonidos SRF08
VCC1(5V)
SRF08_JOAN
3.4.- Cargador del Programa.
Consiste en un circuito que intercambia niveles TTL a RS 232 y viceversa donde
Un 0 en TTL equivale a 0V y en RS232 equivale a una tensión comprendida entre 3 y 15V .
Un 1en TTL equivale a 5V y en RS232 equivales a una tensión comprendida entre -3 y -15V.
El Circuito Integrado MAX 232 se encarga de convertir los niveles de TTL a RS232 y viceversa.
El fabricante del MAX 232 nos indica las conexiones con los condensadores y sus capacidades, para su correcto
funcionamiento.
Este circuito nos sirve para cargar el programa al PIC del robot por medio de un cable paralelo transmitiendo vía serie
entre el ordenador y el robot
CARGADOR DEL PROGRAMA
C8
1uF
3
1
C1-
C1+
T1OUT
R1IN
T2OUT
R2IN
T1IN
R1OUT
T2IN
R2OUT
J2
1
6
2
7
3
8
4
9
5
TXPC
RXPC
14
13
7
8
C10
2
6
VCC1(5V)
1uF
U5
11
12
10
9
RC6
RC7(BL)
VS+
VSVCC1(5V)
CONN-D9M
C2-
C2+
5
C11
4
C9
MAX232_JOAN
VCC
1uF
1uF
C12
100nF
GND
Ciclo Superior de Desarrollo de Productos Electrónicos
8
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.5.- Control.
Un microcontrolador PIC16F877a se encarga de realizar el control del robot (control con PWM del motor de
tracción y el servo, lectura de los sensores e indicación de sus medidas en el LCD) y recibir los datos procedentes del
receptor de radiofrecuencia. El microcontrolador PIC 16F8767 trabaja a una frecuencia de 1 MHz y ejecuta una
instrucción en 4uS.
El SW1 es un pulsador de reinicio que sirve para reiniciar el programa y para cargar un programa en el PIC.
Tiene un Jumper JUMP1 con dos posiciones, una nos sirve para cargar el programa procedente del Ordenador
Personal en el microcontrolador y la otra posición para recibir los datos del receptor de RF.
Un pulsador de Inicio nos servirá para activar el robot. Hasta que no se pulse este pulsador el robot
permanecerá parado indicando en el LCD la distancia a un obstáculo y el mensaje de parado al igual que el LED de
parada estará encendido una vez pulsado el Robot empezara a funcionar.
El conmutador nos sirve para poder meter dos programas al PIC 16f877a y poder tener la opción de ejecutar el
programa que deseamos según la posición del conmutador.
CONTROL
C6
U2
13
14
1
15pF
RA02
RA13
RA24
5
6
7
X1
RA3
RA4
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
8
9
10
15pF
VCC1(5V)
VDD
R3
10k
SW1
2
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R4
1
PULSADOR_JOAN
100
C7
100nF
J1
PIC16F877_JOAN
VCC
VSS
RA[2..0]
CONTROL LCD
RB4
RB5
RB6
RB7
RB[7..4]
DATOS LCD
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
RC1
RC2
RC3
RC4
RC6
RD0
RD1
RD2
RD3
RD4
CONTROL DE
ETAPA DE POTENCIA
VELOCIDAD
SERVO DIRECCION DEL SENSOR DE ULTRASONIDOS
RELOJ
SENSORES DE DISTANCIA
E/S
CARGADOR DEL PROGRAMA
RD[4..0]
RD5
RD6
INDICADORES LUMINOSOS
SENTIDO DE GIRO ETAPA DE POTENCIA
3
2
1
SENSORES INFRAROJOS
CONMUTADOR_JOAN
1
3
R14
PULSADOR DE INICIO
2
R15
220
SW4
VCC
1
PULSADOR_JOAN
CONMUTADOR PARA LA ELECION DE PROGRAMA
CARGADOR DEL PROGRAMA RC7(BL)
2
CONN_SIL3_JOAN
SW5
220
33
34
35
36
37
38
39
40
J5
R21
R22
4.7k
4.7k
RA3
3
2
1
VCC1(5V)
CONN_SIL3_JOAN
J6
3
2
1
CONN_SIL3_JOAN
VDD
C5
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RECEPTOR RADIOFRECUENCIARC7(RF)
CRYSTAL_JOAN
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
Ciclo Superior de Desarrollo de Productos Electrónicos
RA4
9
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.6.- Etapa de Potencia y control de giro.
La misión de este circuito es la de controlar el sentido de giro y la velocidad de los motores. Las señales
procedentes del microcontrolador RC1 satura (Interruptor Cerrado VCE4 = 1V) o corta los transistores (Interruptor
Abierto VCE4 = 11,4V) Q3 y Q4.
Una pequeña corriente de base IB3 o IB4 [ IB3 = (VCC2 – VEB3-VEB4)/ R7)= (11.4V-0, 7V-0,7V)/10K = 1
mA] saturaran los transistores ya que la ganancia de los transistores en montaje Darlington es muy grande t  3 x 4
= 2500. Con una IB=10mA saturamos los transistores siempre y cuando el motor consuma menos de IE  t x IB =
1mA x 2500 = 2.5 A.
El optoacoplador tiene la misión de aislar eléctricamente el circuito de Control con el de Potencia. Se obtiene
una tensión VCE proporcional a la luz que incide en la base del TRT (En caso de rotura del motor, la barrera de luz
protege el sistema de control ya que este aguanta más de 2000V.
El L298 es un integrado con el que por medio de dos entradas de control manejamos el sentido de giro de los
motores al variar el voltaje de salida en las patillas de salida out1 y out2 también nos permite el control de marcha y
paro. El voltaje de salida viene dado por la señal procedente del optocoplador por la cual el robot controla la marcha, el
paro y la velocidad al meter una señal cuadrada.
Toda la parte que alimenta a los motores viene separada de la parte de control de tal forma que evita que le
entre ruido de los motores a la parte de control teniendo mayor precisión en el control de los motores.
Funcionamiento:
RC1 = 1  Ib4 (Opto)  20 mA  Vce4 (Opto)  0V.  IB (Q3)  1mA  (Q3 y Q4) saturado Vce4 (TRT4)  1V
 Vmotor tracción  10,4V Motor funcionando.
RC1 = 0  Ib4 (Opto)  0 mA  Vce4 (Opto)  10V.  IB (Q3)  0mA  (Q3 y Q4) cortado Vce4 (TRT4)  11,4V
 Vmotor tracción  0V  Motorparado.
SENTIDO
RC1 RD5 RD6 DE GIRO
0
X
X PARADO
1
0
0 PARADO
1
1
0
ATRÁS
1
0
1 DELANTE
1
1
1 PARADO
ETAPA DE POTENCIA
VCC2(11.4V)
Q4
BD136_JOAN
U3
R6
1
RC1
6
220
R7
5
Q3
BD136_JOAN
2
10k
4
OPTOCOUPLER-NPN
VCC1(5V)
RD5
RD6
5
7
10
12
6
11
1
15
IN1
IN2
IN3
IN4
ENA
ENB
9
4
VCC
VS
SENSA
SENSB
U4
OUT1
OUT2
OUT3
OUT4
2
3
OUT1
OUT2
13
14
GND
8
L298
Ciclo Superior de Desarrollo de Productos Electrónicos
10
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.7.- Indicadores Luminosos.
Los indicadores luminosos LED nos indicaran en todo momento en que sentido de giro esta el robot o si está parado.
Los LED están limitados en corriente por las resistencias
I (Led) = [(VR – V (Led)) / R] =
I (Led) = [(5V – 2V) / 330] = 9 mA
INDICADORES LUMINOSOS
RD4
RD[0..4]
RD0
RD1
RD2
RD3
10k
A
R18
330
A
R11
330
A
R10
330
A
R9
330
A
R8
IZQUIERDA
DELANTE
DERECHA
D11
D13
ATRAS
LED-RED_JOAN
K
K
LED-YELLOW_JOAN LED-RED_JOAN
K
D12
LED-GREEN_JOAN
K
D9
LED-BLUE_JOAN
K
D10
PARADO
3.8.- Pantalla LCD.
La pantalla de LCD nos muestra lo que está ocurriendo en el Robot. Características:
Es una pantalla de 2 Líneas por 16 caracteres.
 Consumo de 7,5 mW.
 Representa caracteres ASCII.
 Desplaza los caracteres a derecha e Izquierda.
 Memoria de 40 caracteres por línea de pantalla, visualizando 16 caracteres por línea...
 Se pueden programar 8 caracteres.
 Se puede gobernar de 2 formas diferentes:
o Conexión con un bus de 4 bits.
o Conexión con un bus de 8Bits.
El potenciómetro tiene la misión de controlar el contraste en el LCD.
LCD1
VCC1(5V)
D0
D1
D2
D3
D4
D5
D6
D7
RB0
RB1
RB2
RB3
7
8
9
10
11
12
13
14
RS
RW
E
4
5
6
3
RV2
2
RA0
RA1
RA2
VCC1(5V)
1
2
3
VSS
VDD
VEE
LCD-16 X 2_JOAN
1
10k
Ciclo Superior de Desarrollo de Productos Electrónicos
11
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.9.- Motores de C.C.
Son motores con engranajes de corriente continua de 9V / 120  que generan mucho ruido a todas las
frecuencias.
Se recomienda poner un filtro paso bajo de orden 1 de 20db/década para rechazar el ruido que genera el motor. Este
filtro atenúa los ruidos generados por el motor a frecuencias superiores a 50 Hz.
Los diodos tiene la misión de proteger el resto del circuito de contracorrientes que genera el motor al parar.
Se recomienda poner el chasis a masa para filtrar los ruidos que generan los motores en el espectro de radiofrecuencia,
creando una Jaula de Faraday.
Si existe diferencia de potencial entre OUT1 Y OUT2 los motores gira si la diferencia de potencial es 0 los motores
permanecen parados
K
D5MOTOR DE TRACCION
D7
1N4007_JOAN
1N4007_JOAN
A
A
K
VCC2(11.4V)
MOTOR
2
1
12V
OUT1
OUT2
K
K
MO1
1
D8
2
1N4007_JOAN
12V
A
A
D6
1N4007_JOAN
3.10. Servo-Motor
El servo-motor es un motor de continua que gira 180º y por medio de una señal cuadrada controlamos la posición del
servo.
La señal cuadrada tiene un periodo entre 10ms y 30ms y el control de la posición dependen del tiempo a nivel alto de la
señal cuadrada.
El servo tiene una entrada de control por la que se mete la señal cuadrada
SERVO DE DIRECCION
SER1
VCC1(5V)
RC2
1
2
3
+88.8
SERVOMOTOR-PWM_JOAN
Ciclo Superior de Desarrollo de Productos Electrónicos
12
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.11.- Baliza
Este circuito se encarga de emitir una señal infrarroja de 32khz.
El integrado 555 genera una onda cuadrada de 36 KHz regulada con la resistencia R13 de 13 kΩ y el potenciómetro de
5 kΩ que sirve para ajustar la frecuencia con la que se descarga y se carga el condensador C13 el cual hace que el 555
genere una señal cuadrada
Si el condensador esta cargándose el 555 da un nivel alto y si el condensador esta descargándose el 555 da un nivel bajo
Este circuito viene alimentado con una pila de 9V
VCC3(8.3V)
BALIZA
C16
R12
100k
10uF
U6
8
R
VCC
4
Q
DC
5
A
2
INTERRUPTOR_JOAN
D14
3
K
SW3
1
1N4007_JOAN
7
CV
2
TR
GND
R20
C17
TH
10k
6
1
100nF
NE555_JOAN
C13
2
R19
Q5
2N2222
RV1
4.7k
1nF
1
3
5k
R13
13k
Ciclo Superior de Desarrollo de Productos Electrónicos
13
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.12.- Sensores de infrarrojos y acondicionador de señal
Estos circuitos le sirve al robot para recibir un nivel alto cuando no está recibiendo señal el receptor y un nivel bajo en
el caso de que el receptor reciba señal.
El condensador y las resistencias actúan de filtro para evitar rebotes y tener más exactitud con los niveles altos y los
bajos.
Para que estos receptores lean señal la señal que actúa sobre ellos tiene que tener una frecuencia de 36KHz la cual
trasmite la baliza y proporciona al robot la dirección en la que se encuentra la baliza
IZQUIERDA
INF3
SFH5110
R23
3
Vcc
100
2
GND
1
Vo
SFH5110_JOAN
C18
R24
47uF
10k
3
2
1
J7
CONN_SIL3_JOAN
DERECHA
INF4
SFH5110
Vcc
GND
Vo
R25
3
10
2
1
SFH5110_JOAN
C19
R26
47uF
10k
Ciclo Superior de Desarrollo de Productos Electrónicos
3
2
1
J8
CONN_SIL3_JOAN
14
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3.13.- Mando.
El mando tiene la misión de transmitir un código asociado a cada pulsador, para poder controlar el robot.
El microcontrolador PIC 16F876a lee los pulsadores y transmite los códigos vía serie a la tarjeta transmisora de
radiofrecuencia a una velocidad de 1562,5 baudios por segundo. Es una transmisión asíncrona (1bit de comienzo, 8bit
de Datos, 1 bit de parada sin bit de paridad).
La Alimentación procede de un regulador 7805 que suministra 5V a todos los circuitos.
El TRT “Q1E” tiene la misión de deshabilitar la tarjeta de radiofrecuencia cuando esta no transmite datos.
La Tarjeta Emisora SAW para Datos 433,92 MHz. CEBEK C-0503 es un circuito híbrido encargado de transmitir vía
radiofrecuencia, los datos digitales procedentes del microprocesador (TX). La señal digital tiene que tener una 20 Hz <
fo < 4 KHz. Se modula en AM cuya frecuencia portadora es de 433,92 MHz.
El microcontrolador PIC 16F876a trabaja a una frecuencia de 4 MHz y ejecuta una instrucción en 1uS.
El Led D7E nos indica que el mando está encendido, está limitada su corriente en 20 mA.
El resto de los LED se iluminan cuando activamos el Pulsador correspondiente.
El diodo D7E tiene la misión de proteger el circuito en cado de invertir la Batería.
Los condensadores C1 y C2 son filtros.
Mando
VDD
U2E
Emisor de Datos CEBEK C-0503
GND1
Ve
-
R7E
GND2
220
220uF
Antena
R6E
C2E
220uF
VSS
E_RF1E
BD136_JOAN
3
GND3
VO
C1E
9V
D7E
1
2
3
4
15
A
2.2k
11
2
VI
13
1
BAT1E
1
GND
1
2
K
INTERRUPTOR_JOAN
1N4007_JOAN
A
Q1E
7805_JOAN
Vcc
SW6E
2
D6E
CON1E
LED-RED_JOAN
K
1
BORNIER1_JOAN
C3E
15pF
U1E
220
Adelante
K
RB4E
1
1
RB2E
SW3E
2
Atras
LED-RED_JOAN
SW4E
SW5E
2
Izquierda
SW2E
2
2
SW1E
D5E
LED-RED_JOAN
RB0E
1
RB3E
1
1
RB1E
D4E
LED-RED_JOAN
K
LED-GREEN_JOAN
K
K
LED-YELLOW_JOAN
D3E
K
D2E
2
D1E
RB0E
RB1E
RB2E
RB3E
RB4E
A
R5E
220
A
R4E
220
A
R3E
220
A
R2E
220
A
R1E
Parar
Derecha
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RC0/T1OSO/T1CKI
RA5/AN4/SS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
9
10
1
2
3
4
5
6
7
VDD
X1E
4MHz
C4E
15pF
PIC16F876_JOAN
Ciclo Superior de Desarrollo de Productos Electrónicos
15
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
4.-Esquema eléctrico de simulación con Proteus
4.1.- Simulación del Robot Baliza.
ROBOT BALIZA SIMULACION
A
U2
2
PULSADOR_JOAN
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R1
R4
1
10k
2
100
C7
SW2
100nF
1
RD4
RD3
RD2
RD1
330
D9
D12
A
R18
330
A
R11
330
A
R10
330
D1
D2
LED-BLUE_JOAN
LED-GREEN_JOAN
LED-YELLOW_JOAN
LED-BLUE_JOAN
LED-YELLOW_JOAN
DELANTE
SER1
LCD1
R9
330
D10
RD0
19
RD1
20
RD2
21
RD3
22
RD4
27
28
29 SENTIDO DE GIRO
30
PULSADOR_JOAN
PIC16F877_JOAN
VSS
R8
DERECHA
1
2
3
DATOS LCD
LCD-16 X 2_JOAN
K
10k
SW1
SENSORES DE DISTANCIA
K
R3
5V
ATRAS
IZQUIERDA
PARADO
ETAPA DE POTENCIA
+88.8
SERVOMOTOR-PWM_JOAN
1
Q4
1
2
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
BAT2
U3
220
6
5
2
1
11.4V
Q3
R7
BD136_JOAN
1k
4
VDD
3
CONMUTADOR_JOAN
R6
7
8
9
10
11
12
13
14
1
2
3
SW3
4
5
6
2
VSS
VDD
VEE
BD136_JOAN
OPTOCOUPLER-NPN
RB4
RB5
RB6
RB7
R2
A
SCL
SDA
INT
A0
A1
A2
5
7
10
12
6
11
14
15
13
VCC
1
2
3
1
15
IN1
IN2
IN3
IN4
ENA
ENB
VCC
VS
SENSA
SENSB
OUT1
OUT2
OUT3
OUT4
D7
1N4007_JOAN
1N4007_JOAN
MOTOR DE TRACCION
2
2
1
3
12V
K
P0
P1
P2
P3
P4
P5
P6
P7
D5
K
4
5
6
7
9
10
11
12
U4
13
14
A
U1
4
D6
D8
1N4007_JOAN
1N4007_JOAN
GND
PCF8574
8
R21
R22
4.7k
4.7k
L298
VCC
1
1
1
0
1
1
0
0
9
A
VDD
10k
K
1
K
2
VCC
A
RV2
3
10k
VCC
2
BAT1
15
CONTROL DEVELOCIDAD
16
17 SERVO DIRECCION DEL SENSOR DE ULTRASONIDOS
RELOJ
18
E/S
23
24
25
26
K
VCC
1
VCC
8
9
10
RB[7..4]
RB4
RB5
RB6
RB7
A
0
15pF
B
K
0
C5
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
33
34
35
36
37
38
39
40
RD0
2
3
4
5
6
7
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
A
X1
CRYSTAL_JOAN
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
K
13
14
1
15pF
VDD
C6
Ciclo Superior de Desarrollo de Productos Electrónicos
16
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
4.2.- Simulación del Robot + Coche teledirigido
U1E
RB0E
RB1E
RB2E
RB3E
RB4E
VDD
220
SW9
SW4
K
K
RB4E
1
RB2E
SW5
11
12
13
14
15
16
17
18
D13
1
RB0E
1
RB3E
1
RB1E
1
D17
K
D16
K
D15
K
D14
21
22
23
24
25
26
27
28
A
R15
220
A
R14
220
A
R13
220
A
R12
220
A
Mando
R5
SW6
3
2
PARAR
2
3
4
5
6
7
C9
4MHz
15pF
R16
R17
VDD
10k
10k
C10
SW8
100nF
1
2
TX
U6:A
74HC125
1
ADELANTE
15pF
X2
PIC16F876_JOAN
SW7
2
2
2
2
ATRAS
9
10
1
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RC0/T1OSO/T1CKI
RA5/AN4/SS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
2
IZQUIERDA
C8
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
DERECHA
A
B
U2
PULSADOR_JOAN
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R1
R4
10k
2
100
C7
SW2
100nF
1
RD4
RD3
RD2
RD1
330
D9
D12
A
R18
330
A
R11
330
D1
D2
LED-BLUE_JOAN
LED-GREEN_JOAN
LED-YELLOW_JOAN
LED-BLUE_JOAN
LED-YELLOW_JOAN
DELANTE
SER1
LCD1
R10
330
D10
RD0
19
RD1
20
RD2
21
RD3
22
RD4
27
28
29 SENTIDO DE GIRO
30
PULSADOR_JOAN
PIC16F877_JOAN
VSS
R9
330
IZQUIERDA
1
2
3
DATOS LCD
ATRAS
DERECHA
PARADO
ETAPA DE POTENCIA
2
LCD-16 X 2_JOAN
K
10k
1
R8
K
R3
SW1
2
SENSORES DE DISTANCIA
A
VCC
K
VCC
15
CONTROL DE VELOCIDAD
16
17 SERVO DIRECCION DEL SENSOR DE ULTRASONIDOS
RELOJ
18
E/S
23
24
25
26
TX
A
VDD
8
9
10
RB[7..4]
RB4
RB5
RB6
RB7
K
1
15pF
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
33
34
35
36
37
38
39
40
RD0
0
C5
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
A
X1
CRYSTAL_JOAN
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
2
3
4
5
6
7
K
13
14
1
15pF
VCC
C6
+88.8
SERVOMOTOR-PWM_JOAN
SW3
1
Q4
BD136_JOAN
1
6
220
220
BAT2
U3
2
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
R6
7
8
9
10
11
12
13
14
R2
4
5
6
1
2
3
VSS
VDD
VEE
1
3
CONMUTADOR_JOAN
5
2
11.4V
Q3
R7
BD136_JOAN
1k
VDD
4
A
SCL
SDA
INT
A0
A1
A2
14
15
13
VCC
1
2
3
1
15
VCC
VS
SENSA
SENSB
OUT1
OUT2
OUT3
OUT4
1N4007_JOAN
MOTOR DE TRACCION
2
2
1
3
12V
13
14
D6
D8
1N4007_JOAN
1N4007_JOAN
GND
K
PCF8574
IN1
IN2
IN3
IN4
ENA
ENB
D7
1N4007_JOAN
K
P0
P1
P2
P3
P4
P5
P6
P7
D5
K
4
5
6
7
9
10
11
12
5
7
10
12
6
11
U4
A
U1
4
8
L298
A
D3
R21
R22
4.7k
4.7k
1N4007_JOAN
VCC
1
1
1
1
0
1
0
1
9
A
VCC
10k
K
1
K
2
VCC
A
RV2
3
VCC
RB4
RB5
RB6
RB7
OPTOCOUPLER-NPN
Ciclo Superior de Desarrollo de Productos Electrónicos
17
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
5.- Programas Robot Baliza
5.1-Diagramas de flujo
Ciclo Superior de Desarrollo de Productos Electrónicos
18
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
Ciclo Superior de Desarrollo de Productos Electrónicos
19
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
5.2.- simu4.asm. (Simulación)
Title "Robot baliza"
; Programa para PIC 16F877.
; Velocidad del Reloj: 4 MHz.
; Reloj instruccion: 1 MHz = 1 uS.
; Perro Guardian deshabilitado.
; Tipo de Reloj XT.
; Proteccion de Codigo: OFF.
;**************************** Elegimos PIC *****************************************************
List p=16f877, f=inhx32
;**************************** Asignacion de Registros de Funciones especiales a direcciones ************
#include <p16f877.inc>
; Este fichero contiene los nombres y direcciones de los
; Registros de funciones especiales.
; Este fichero esta localizado en el directorio
; con el nombre MPASM.
;**************************** Igualdades *******************************************************
TOPE_DER
EQU D'16'
; Tope de giro a la dercha
TOPE_IZQ
EQU D'4'
; Tope de giro a la izquierda
ESCLAVO1 EQU B'01000001' ; Escribimos la direccion del Esclavo1
RECEPTOR
;**************************** Registros ********************************************************
CBLOCK 0X20
SERVO
;Registro para el control de posicion del servo
DISTANCIA
;Registro donde se gusrda la distancia a un obstaculo
CONTROL
;Registro donde se guarda la direcion del último giro
ENDC
;**************************** Seccion Codigo de Reset ******************************************
ORG
0x00
; Direccion del Vector Reset
GOTO COMIENZO
; Comienzo del Programa
ORG 0X05
; Inicio de Programa (Una posición detrás del vector de
; Interrupción).
;**************************** Mensajes *******************************************************
Ciclo Superior de Desarrollo de Productos Electrónicos
20
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
Mensajes
Mensaje0
Mensaje1
Mensaje2
Mensaje3
Mensaje4
ADDWF PCL,F
DT"HACIA DELANTE ",0x00
DT"HACIA DERECHA ",0x00
DT"HACIA IZQUIERDA",0x00
DT"PARADO
",0X00
DT"HACIA
ATRÁS ",0X00
; Posición inicial del mensaje 0.
; Posición inicial del mensaje 1.
; Posición inicial del mensaje 2.
; Posición inicial del mensaje 3.
; Posición inicial del mensaje 4.
;**************************** Sección de Configuración *****************************************
COMIENZO
BSF STATUS,RP0
; Poner RP0 a 1. Ir al Banco 1
MOVLW D'6'
MOVWF ADCON1
; Poner el puerto A como señales digitales
MOVLW B'00111000'
MOVWF TRISA
CLRF TRISB
CLRF TRISD
CLRF TRISE
; Poner el Puerto A como salida de datos.
BCF STATUS,RP0
; Poner RPO a 0. Ir al Banco 0
CLRF PORTD
; Poner el Puerto D a 0.
MOVLW D'10'
MOVWF SERVO
CALL FUTABA
; Inicio el servo a 90º
CALL CONF_PWM_RC2
CALL CONF_PWM_RC1
; Confiruracion de señal PWM por RC2
; Confiruracion de señal PWM por RC2
CALL LCD_Inicializa
; Configuracion del LCD
CALL Config_transmision_I2C
; Configuracion Bus_I2C
CLRF CONTROL
; Inicio a 0 el conrol para salvar obstaculos
; Poner el Puerto B como salida de datos.
; Poner el Puerto D como salida de datos.
; Poner el Puerto E como salida de datos.
Ciclo Superior de Desarrollo de Productos Electrónicos
21
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;**************************** Inicio ********************************************************
SEG4
CALL MEDIR
; Tomar distancia al proximo obstaculo. Guarda el valor
; en el registro de DISTANCIA
MOVF DISTANCIA,W ; Si la distancia es 0 el programa se va a buscar la baliza
BTFSC STATUS,Z
; y no es 0 seguimos preguntando por la distancia
GOTO SEG5
MOVLW D'50'
; Si la distancia es menor de 50 cm vuelve a preguntar por
SUBWF DISTANCIA,W ; la distancia y si no es menor de 50 cm se va a buscar la
BTFSC STATUS,C
; baliza
GOTO SEG5
MOVLW D'30' ; Si la distancia es menor de 30 cm el programa va a la subrutina
SUBWF DISTANCIA,W ; de atras y si no lo es va a buscar la baliza
BTFSC STATUS,C
GOTO SEG5
CALL ATRAS
GOTO SEG4
SEG5
BTFSS PORTA,5; Si el sensor de la derecha esta a nivel alto pasa a leer el sensor
GOTO SEG1
; de la izquierda, si este esta a nivel alto va a PARAR y si
esta
SEG3
SEG1
SEG2
BTFSS PORTA,4
GOTO SEG3
CALL PARAR
GOTO SEG4
CALL IZQUIERD
GOTO SEG4
; a nivel bajo va IZQUIERDA
BTFSS PORTA,4; Si el sensor de la derecha esta a nivel bajo pasa a leer el sensor
GOTO SEG2
; de la izquierda, si este esta a nivel alto va DERECHA y si esta
CALL DERECHA
; a nivel bajo va ADELANTE
GOTO SEG4
CALL DELANTE
GOTO SEG4
; Cada vez que hace una subrutina vuelve al principio de programa
;**************************** Subrutinas **************************************************
DELANTE
CALL LCD_Linea1
MOVLW Mensaje0
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "HACIA ADELANTE"
MOVLW D'10'
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO IGU
; Pregunta si el el servo esta en 90º si lo
; esta pasa a poner el sentido y mover los motores
; y si no seguimos preguntando
Ciclo Superior de Desarrollo de Productos Electrónicos
22
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
DEC
FUT
IGU
BTFSC STATUS,C
GOTO DEC
MOVLW D'3'
ADDWF SERVO,F
GOTO FUT
MOVLW D'3'
SUBWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Preguntamos si el servo esta a menos de 90º
; si lo esta incrementa el angulo y si no
; decrementa el angulo del servo
MOVLW B'01001000'
MOVWF PORTD
; Envia el sentido de giro y enciende el led de adelante
MOVLW B'11111111'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_10ms
; Espera 10ms
RETURN
DERECHA
NO_INC
CALL LCD_Linea1
MOVLW Mensaje1
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "HACIA DERECHA"
MOVLW TOPE_DER
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_INC
MOVLW D'3'
ADDWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Pregunta si el servo esta en la posicion que hay
; en TOPE_DER si lo esta pasa a poner el sentido y
; mover los motores y si no incrementa el angulo del
; servo
MOVLW B'01000001'
MOVWF PORTD
; Envia el sentido de giro y enciende el led de derecha
MOVLW B'11100000'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_10ms
; Espera 10ms
BCF CONTROL,0
; Pone el primer bit a cero del registro de CONTROL
RETURN
IZQUIERD
NO_DEC
CALL LCD_Linea1
MOVLW Mensaje2
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "HACIA IZQUIERDA"
MOVLW TOPE_IZQ
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_DEC
MOVLW D'3'
SUBWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Pregunta si el servo esta en la posicion que hay
; en TOPE_IZQ si lo esta pasa a poner el sentido y
; mover los motores y si no incrementa el angulo del
; servo
MOVLW B'01000100'
; Envia el sentido de giro y enciende el led de izquierda
Ciclo Superior de Desarrollo de Productos Electrónicos
23
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
MOVWF PORTD
PARAR
MOVLW B'11100000'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_10ms
; Espera 10ms
BSF CONTROL,0
RETURN
; Pone el primer bit a uno del registro de CONTROL
CALL LCD_Linea1
MOVLW Mensaje3
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "PARADO"
MOVLW B'00010000'
MOVWF PORTD
; Envia el sentido de giro en posicion de parado
; y enciende el led de parado
CALL Retardo_10ms
; Espera 10ms
RETURN
ATRAS
DECR
IGUA
CALL LCD_Linea1
MOVLW Mensaje3
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "HACIA ATRAS"
BTFSC CONTROL,0
GOTO DECR
MOVLW D'4'
CALL FUTABA
GOTO IGUA
MOVLW D'16'
CALL FUTABA
; Pregunta si es 0 el primer bit del registro
; control si lo es gira el servo a izquierda
; y si no gira el servo a dercha
MOVLW B'00101000'
MOVWF PORTD
; Envia el sentido de giro y enciende el led de atras
MOVLW B'01111111'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_500ms
CALL Retardo_200ms
; Espera 500ms
; Espera 200ms
MOVF SERVO,W
CALL FUTABA
; Vuelve el servo a la posicion que se encontraba antes
; de entrar en esta subruptina
BCF PORTD,5
BSF PORTD,6
; Envia el sentido de giro
MOVLW B'11111000'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
RETURN
MEDIR
CALL Bit_start_I2C
; Llamar a la subrutina de Comienzo.
MOVLW ESCLAVO1 ; Seleccionar esclavo de recepcion. ( 0100,A2,A1,A0,1 )
CALL Transmitir_dato_I2C
;(0100) identifica al C.I. PCF8476.
; (A2,A1,A0)=(000) por hardware.
; El ultimo bit a 1 para poner el C.I. PCF8476 como receptor.
Ciclo Superior de Desarrollo de Productos Electrónicos
24
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
CALL Recibir_dato_I2C ; Llamar a la subrutina de recepcion de datos.
MOVWF DISTANCIA ; Guardar dato recibido en el registro
GUARDAR_DATO.
CALL ReStart_I2C
; Llamar a la subrutina de comenzar sin pasar por parada.
CALL LCD_Linea2
; Manda el LCD a la linea 2
MOVF DISTANCIA,w
CALL BIN_a_BCD
MOVF BCD_Centenas,W
CALL LCD_Nibble
MOVF BCD_Decenas,W
CALL LCD_Nibble
MOVF BCD_Unidades,W
CALL LCD_Nibble
; Subruptina que nos devuelve el número
; en decimas dandonos por separado las
; unidades, decenas y centenas
CALL LCD_UnEspacioBlanco
; Espacio en blanco en el LCD
MOVLW 'c'
CALL LCD_Caracter
MOVLW 'm'
CALL LCD_Caracter
; Pone "cm" en el LCD
CALL Bit_stop_I2C
; Llamar a la subrutina de parada.
RETURN
;**************************** Librerias **********************************************************
include <RETARDOS.INC>
; Librería de Retardos.
Include <PWM_RC2.INC>
; Librería de Control de PWM por la patilla RC2.
Include <PWM_RC1.INC>
; Librería de Control de PWM por la patilla RC1.
Include <LCD_4B_1.INC>
; Librería de Control del LCD.
Include <PWM_Futa.INC>
; Libreria de control de un servo futaba por RC2
INCLUDE <LCD_MENS.INC> ; Librería de Control de mensajes en el LCD.
Include <BIN_BCD.INC ; Librería que transforma un número en binario en BCD.
INCLUDE <I2C.INC>
; Librería I2C básicas de propósito general
END
Ciclo Superior de Desarrollo de Productos Electrónicos
25
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
5.3. - Real4.asm. (Real).
Title "Robot baliza"
; Programa para PIC 16F877.
; Velocidad del Reloj: 4 MHz.
; Reloj instruccion: 1 MHz = 1 uS.
; Perro Guardian deshabilitado.
; Tipo de Reloj XT.
; Proteccion de Codigo: OFF.
;**************************** Elegimos PIC ************************************************
List p=16f877, f=inhx32
;**************************** Asignacion de Registros de Funciones especiales a direcciones **********
#include <p16f877.inc>
; Este fichero contiene los nombres y direcciones de los
; registros de funciones especiales.
; Este fichero esta localizado en el directorio
; con el nombre MPASM.
;**************************** Igualdades ***************************************************
TOPE_DER
EQU D'16'
; Tope de giro a la dercha
TOPE_IZQ
EQU D'4'
; Tope de giro a la izquierda
Sensor
EQU 0xE4 ; Escribimos la direccion del RECEPTOR srf08
;**************************** Registros ****************************************************
CBLOCK 0X20
SERVO
;Registro para el control de posicion del servo
DISTANCIA
;Registro donde se guarda la distancia a un obstaculo
CONTROL
; Registro donde se guarda la direcion del último giro
ENDC
;**************************** Seccion Codigo de Reset ****************************************
ORG
0x00
; Direccion del Vector Reset
GOTO COMIENZO
; Comienzo del Programa
ORG 0X05
; Inicio de Programa (Una posición detrás del vector de
; Interrupción).
Ciclo Superior de Desarrollo de Productos Electrónicos
26
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;**************************** Mensajes *********************************************************
Mensajes
Mensaje0
Mensaje1
Mensaje2
Mensaje3
Mensaje4
ADDWF PCL,F
DT"HACIA DELANTE",0x00
DT"HACIA DERECHA",0x00
DT"HACIA IZQUIERDA",0x00
DT"PARADO
",0X00
DT"HACIA
ATRAS",0X00
; Posición inicial del mensaje 0.
; Posición inicial del mensaje 1.
; Posición inicial del mensaje 2.
; Posición inicial del mensaje 3.
; Posición inicial del mensaje 4.
;**************************** Seccion de Configuracion ********************************************
COMIENZO
BSF STATUS,RP0
; Poner RP0 a 1. Ir al Banco 1
MOVLW D'6'
MOVWF ADCON1
; Poner el puerto A como señales digitales
MOVLW B'00111000'
MOVWF TRISA
CLRF TRISB
CLRF TRISD
CLRF TRISE
; Poner el Puerto A como salida de datos.
BCF STATUS,RP0
; Poner RPO a 0. Ir al Banco 0
CLRF PORTD
; Poner el Puerto D a 0.
MOVLW D'10'
MOVWF SERVO
CALL FUTABA
; Inicio el servo a 90º
CALL CONF_PWM_RC2
CALL CONF_PWM_RC1
; Configuración de señal PWM por RC2
; Configuración de señal PWM por RC2
CALL LCD_Inicializa
; Configuración del LCD
CALL I2C_Ini
; Configuración del Bus_I2C
MOVLW Sensor
; Variamos el rango del amplificador interno del
; Poner el Puerto B como salida de datos.
; Poner el Puerto D como salida de datos.
; Poner el Puerto E como salida de datos.
Sensor
MOVWF SRF08_DIR
MOVLW D'50'
MOVWF SRF08_Byte_H
CALL SRF08_Rango
CLRF CONTROL
; Inicio a 0 el control para salvar obstáculos
Ciclo Superior de Desarrollo de Productos Electrónicos
27
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;**************************** Inicio *************************************************************
SEG4
CALL MEDIR
; Tomar distancia al próximo obstáculo. Guarda el valor
; en el registro de DISTANCIA
MOVF DISTANCIA,W ; Si la distancia es 0 el programa se va a buscar la baliza
BTFSC STATUS,Z
; y no es 0 seguimos preguntando por la distancia
GOTO SEG5
MOVLW D'50'
; Si la distancia es menor de 50 cm vuelve a preguntar por
SUBWF DISTANCIA,W ; la distancia y si no es menor de 50 cm se va a buscar la
BTFSC STATUS,C
; baliza
GOTO SEG5
MOVLW D'30'; Si la distancia es menor de 30 cm el programa va a la
SUBWF DISTANCIA,W ;subrutina de atrás y si no lo es va a buscar la baliza
BTFSC STATUS,C
GOTO SEG5
CALL ATRAS
GOTO SEG4
SEG5
SEG3
SEG1
SEG2
BTFSS PORTA,5; Si el sensor de la derecha esta a nivel alto pasa a leer el sensor
GOTO SEG1
; de la izquierda, si este esta a nivel alto va a PARAR y si esta
BTFSS PORTA,4; a nivel bajo va IZQUIERDA
GOTO SEG3
CALL PARAR
GOTO SEG4
CALL IZQUIERD
GOTO SEG4
BTFSS PORTA,4; Si el sensor de la derecha esta a nivel bajo pasa a leer el sensor
GOTO SEG2
; de la izquierda, si este esta a nivel alto va DERECHA y si esta
CALL DERECHA; a nivel bajo va ADELANTE
GOTO SEG4
CALL DELANTE
GOTO SEG4
; Cada vez que hace una subrutina vuelve al principio de programa
;**************************** Subrutinas ****************************************************
DELANTE
CALL LCD_Linea1
MOVLW Mensaje0
CALL LCD_Mensaje
MOVLW D'10'
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO IGU
; Posiciona el cursor del LCD en la línea 1
; Visualiza el mensaje "HACIA ADELANTE"
; Pregunta si el el servo esta en 90º si lo
; esta pasa a poner el sentido y mover los motores
; y si no seguimos preguntando
Ciclo Superior de Desarrollo de Productos Electrónicos
28
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
DEC
FUT
IGU
BTFSC STATUS,C
GOTO DEC
MOVLW D'3'
ADDWF SERVO,F
GOTO FUT
MOVLW D'3'
SUBWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Preguntamos si el servo está a menos de 90º
; si lo está incrementa el ángulo y si no
; decrementa el ángulo del servo
MOVLW B'01001000'
MOVWF PORTD
; Envía el sentido de giro y enciende el led de adelante
MOVLW B'11111111'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_10ms
; Espera 10ms
RETURN
DERECHA
NO_INC
CALL LCD_Linea1
MOVLW Mensaje1
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la línea 1
; Visualiza el mensaje "HACIA DERECHA"
MOVLW TOPE_DER
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_INC
MOVLW D'3'
ADDWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Pregunta si el servo esta en la posición que hay
; en TOPE_DER si lo esta pasa a poner el sentido y
; mover los motores y si no incrementa el ángulo del
; servo
MOVLW B'01000001'
MOVWF PORTD
; Envía el sentido de giro y enciende el led de derecha
MOVLW B'11100000'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_10ms
BCF CONTROL,0
; Espera 10ms
; Pone el primer bit a cero del registro de CONTROL
RETURN
IZQUIERD
NO_DEC
CALL LCD_Linea1
MOVLW Mensaje2
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la linea 1
; Visualiza el mensaje "HACIA IZQUIERDA"
MOVLW TOPE_IZQ
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_DEC
MOVLW D'3'
SUBWF SERVO,F
MOVF SERVO,W
CALL FUTABA
; Pregunta si el servo está en la posición que hay
; en TOPE_IZQ si lo está pasa a poner el sentido y
; mover los motores y si no incrementa el ángulo del
; servo
MOVLW B'01000100'
; Envía el sentido de giro y enciende el led de izquierda
Ciclo Superior de Desarrollo de Productos Electrónicos
29
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
MOVWF PORTD
MOVLW B'11100000'
CALL PWM_RC1
CALL Retardo_10ms
PARAR
; Manda la velocidad en una señal cuadrada a los motores
; Espera 10ms
BSF CONTROL,0
RETURN
; Pone el primer bit a uno del registro de CONTROL
CALL LCD_Linea1
MOVLW Mensaje3
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la línea 1
; Visualiza el mensaje "PARADO"
MOVLW B'00010000'
MOVWF PORTD
; Envía el sentido de giro en posición de parado
; y enciende el led de parado
CALL Retardo_10ms
; Espera 10ms
RETURN
ATRAS
DECR
IGUA
CALL LCD_Linea1
MOVLW Mensaje3
CALL LCD_Mensaje
; Posiciona el cursor del LCD en la línea 1
; Visualiza el mensaje "HACIA ATRAS"
BTFSC CONTROL,0
GOTO DECR
MOVLW D'4'
CALL FUTABA
GOTO IGUA
MOVLW D'16'
CALL FUTABA
; Pregunta si es 0 el primer bit del registro
; control si lo es gira el servo a izquierda
; y si no gira el servo a derecha
MOVLW B'00101000'
MOVWF PORTD
; Envía el sentido de giro y enciende el led de atrás
MOVLW B'01111111'
CALL PWM_RC1
; Manda la velocidad en una señal cuadrada a los motores
CALL Retardo_500ms
CALL Retardo_200ms
MOVF SERVO,W
CALL FUTABA
BCF PORTD,5
BSF PORTD,6
MOVLW B'11111000'
CALL PWM_RC1
; Espera 500ms
; Espera 200ms
; Vuelve el servo a la posición que se encontraba antes
; de entrar en esta subrutina
; Envía el sentido de giro
; Manda la velocidad en una señal cuadrada a los motores
RETURN
MEDIR
MOVLW Sensor
MOVWF SRF08_DIR
; Direccionamos el Sensor
CALL SRF08_cm
; Realiza medida en centímetros
CALL LCD_Linea2
; Manda el LCD a la línea 2
Ciclo Superior de Desarrollo de Productos Electrónicos
30
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
MOVF SRF08_Byte_L,W
MOVWF DISTANCIA
; Mete la distancia en el registro de
; DISTANCIA en binario
CALL BIN_a_BCD
MOVF BCD_Centenas,W
CALL LCD_Nibble
MOVF BCD_Decenas,W
CALL LCD_Nibble
MOVF BCD_Unidades,W
CALL LCD_Nibble
; Subrutina que nos devuelve el número
; en decimas dándonos por separado las
; unidades, decenas y centenas
CALL LCD_UnEspacioBlanco
; Espacio en blanco en el LCD
MOVLW 'c'
CALL LCD_Caracter
MOVLW 'm'
CALL LCD_Caracter
; Pone "cm" en el LCD
RETURN
;**************************** Librerias *********************************************************
Include <RETARDOS.INC>
; Librería de Retardos.
Include <PWM_RC2.INC>
; Librería de Control de PWM por la patilla RC2.
Include <PWM_RC1.INC>
; Librería de Control de PWM por la patilla RC1.
Include <LCD_4B_1.INC>
; Librería de Control del LCD.
Include <PWM_Futa.INC>
; Librería de control de un servo futaba por RC2
INCLUDE <LCD_MENS.INC> ; Librería de Control de mensajes en el LCD.
Include <BIN_BCD.INC>; Librería que transforma un número en binario en BCD.
INCLUDE <SRF08_L1.inc>
; Librería de control del sonar SRF08
INCLUDE <I2C_16F.INC>
; Librería I2C básicas de propósito general
END
Ciclo Superior de Desarrollo de Productos Electrónicos
31
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
6.- Programas Robot Baliza + Coche Teledirigido.
6.1.- T1_COCHE.asm.
title " Transmisor SERIE Coche Teledirigido"
;************ Leer el Puerto B y transmitirlo via serie ************
;Programa para PIC 16F876.
;Velocidad del Reloj:4 MHz.
;Reloj instruccion: 1 MHz = 1uS.
;Perro Guardian deshabilitado.
;Tipo de Reloj XT.
;Protección de Codigo:OFF.
;**************************** Elegimos PIC *********************************
list p=16f876, f=inhx32
;********** Asignacion de Registros de Funciones especiales a direcciones ************
#include <p16f876.inc> ; Este fichero contiene los nombres y direcciones de los
; registros de funciones especiales.
; Este fichero esta localizado en este directorio
; con el nombre MPASMWIN.EXE.
;***************************** Igualdades ********************************************
LLAVE_ADELANTE
LLAVE_DERECHA
LLAVE_IZQUIERDA
LLAVE_PARAR
LLAVE_ATRAS
TOPE_DERECHA
TOPE_IZQUIERDA
EQU B'01011010' ;(Dato). LLave de ADELANTE.
EQU B'01011110' ;(Dato). LLave de DERECHA.
EQU B'01011011' ;(Dato). LLave de IZQUIERDA.
EQU B'01110110' ;(Dato). LLave de PARAR.
EQU B'01010101' ;(Dato). LLave de ATRAS.
EQU D'15'
EQU D'5'
;***************************** Registros *********************************************
CBLOCK 0X20
REGISTRO_MICROPULSADORES
SERVO
VELOCIDAD
TOPE_VMAX
ENDC
;**************************** Seccion Codigo de Reset *********************************
ORG
0X00
GOTO COMIENZO
;Dirección del Vector Reset
;Comienzo del Programa
;**************************** Seccion de Configuracion ********************************
ORG 0X05
; Inicio de Programa
;(Una posicion detras del vector de Interrupción)
Ciclo Superior de Desarrollo de Productos Electrónicos
32
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
COMIENZO
CALL CONFIGURACION_TRANS_SERIE
;*************************** Configuracion *********************************************
BSF STATUS,RP0
MOVLW B'11111111'
MOVWF TRISB
BCF TRISC,3
BCF STATUS,RP0
MOVLW D'10'
MOVWF SERVO
MOVLW B'01000000'
MOVWF TOPE_VMAX
CLRF VELOCIDAD
;*************************** Principal ***************************************************
;*************************** Testeo de los Micropulsadores.**********************************
PRINCIPAL
BSF PORTC,3
SEG1
MOVF PORTB,W
ANDLW B'00011111'
MOVWF REGISTRO_MICROPULSADORES
SUBLW B'00011111'
BTFSC STATUS,Z
GOTO SEG1
BCF PORTC,3
; Inhabilitar tarjeta de Radiofrecuencia.
; Habilitar tarjeta de Radiofrecuencia.
;*************************** Testeo de los Micropulsadores.*******************************
DERECHA
BTFSC REGISTRO_MICROPULSADORES,4
GOTO IZQUIERDA
MOVLW TOPE_DERECHA
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_INC
INCF SERVO,F
NO_INC
MOVLW LLAVE_DERECHA
MOVWF LLAVE_ENTRADA
MOVF SERVO,W
CALL LANZAR_DATO_SERIE
GOTO PRINCIPAL
IZQUIERDA
BTFSC REGISTRO_MICROPULSADORES,1
GOTO PARAR
MOVLW TOPE_IZQUIERDA
SUBWF SERVO,W
BTFSC STATUS,Z
GOTO NO_DEC
DECF SERVO,F
Ciclo Superior de Desarrollo de Productos Electrónicos
33
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
NO_DEC
MOVLW LLAVE_IZQUIERDA
MOVWF LLAVE_ENTRADA
MOVF SERVO,W
CALL LANZAR_DATO_SERIE
GOTO PRINCIPAL
PARAR
BTFSC REGISTRO_MICROPULSADORES,2
GOTO ADELANTE
MOVLW B'00000000'
MOVWF VELOCIDAD
MOVLW LLAVE_PARAR
MOVWF LLAVE_ENTRADA
MOVLW VELOCIDAD
CALL LANZAR_DATO_SERIE
GOTO PRINCIPAL
ADELANTE
BTFSC REGISTRO_MICROPULSADORES,0
GOTO ATRAS
MOVLW VELOCIDAD
XORWF TOPE_VMAX,W
BTFSC STATUS,Z
GOTO PRINCIPAL
MOVLW B'00010000'
ADDWF VELOCIDAD,F
MOVLW LLAVE_ADELANTE
MOVWF LLAVE_ENTRADA
MOVF VELOCIDAD,W
CALL LANZAR_DATO_SERIE
GOTO PRINCIPAL
ATRAS
BTFSC REGISTRO_MICROPULSADORES,3
GOTO PRINCIPAL
MOVLW VELOCIDAD
BTFSC STATUS,Z
GOTO PRINCIPAL
MOVLW B'00010000'
SUBWF VELOCIDAD,F
MOVLW LLAVE_ATRAS
MOVWF LLAVE_ENTRADA
MOVF VELOCIDAD,W
CALL LANZAR_DATO_SERIE
GOTO PRINCIPAL
;*************************** Librerias ********************************************************
INCLUDE <T_M_S_RF.INC>
Ciclo Superior de Desarrollo de Productos Electrónicos
34
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
INCLUDE <RETARDOS.INC>
END
6.2.- R_C_2.INC.
title "ROBOT CONTROLADO POR RADIOFRECUENCIA"
;Programa para PIC 16F877.
;Velocidad del Reloj:4 MHz.
;Reloj instruccion: 1 MHz = 1 uS.
;Perro Guardian deshabilitado.
;Tipo de Reloj XT.
;Proteccion de Codigo:OFF.
;**************************** Elegimos PIC ******************************************************
list p=16f877, f=inhx32
;**************************** Asignacion de Registros de Funciones especiales a direcciones ************
#include <p16f877.inc>
;Este fichero contiene los nombres y direcciones de los
; registros de funciones especiales.
; Este fichero esta localizado en el directorio
; con el nombre MPASM.
;**************************** Igualdades ******************************************************
LLAVE_ADELANTE
LLAVE_DERECHA
LLAVE_IZQUIERDA
LLAVE_PARAR
LLAVE_ATRAS
EQU B'01011010' ;(Dato). LLave de ADELANTE.
EQU B'01011110' ;(Dato). LLave de DERECHA.
EQU B'01011011' ;(Dato). LLave de IZQUIERDA.
EQU B'01110110' ;(Dato). LLave de PARAR.
EQU B'01010101' ;(Dato). LLave de ATRAS.
;**************************** Registros **************************************************
CBLOCK 0X20
W_TEMP
;(Registros). Registro de salvaguarda de la Rutina de Interr.
STATUS_TEMP
GUARDAR_DATO
RCREG_GUARDA
ENDC
;**************************** Seccion Codigo de Reset *************************************
ORG
0x00
GOTO COMIENZO
;Direccion del Vector Reset
;Comienzo del Programa
;*************************************************** Vector de Interrupcion **************
ORG 0X04
GOTO INTERRUPCION
;Vector de Interrupcion.
Ciclo Superior de Desarrollo de Productos Electrónicos
35
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;**************************** Seccion de Configuracion ****************************************
COMIENZO
BSF STATUS,RP0
MOVLW D'6'
MOVWF ADCON1
MOVLW B'0011000'
MOVWF TRISA
CLRF TRISB
CLRF TRISD
CLRF TRISE
; Poner RP0 a 1. Ir al Banco 1
; Poner el puerto A como señales digitales
; Poner el Puerto A como salida de datos.
; Poner el Puerto B como salida de datos.
BCF STATUS,RP0
CALL CONFIGURACION_RECEP_SERIE;Configurar la Recepcion Serie de datos
CALL CONF_PWM_RC2
CALL CONF_PWM_RC1
BSF STATUS,RP0
; Configurar el Timer0 como temporizador
MOVLW B'00000111'
MOVWF OPTION_REG
BCF STATUS,RP0
MOVLW D'10'
CALL FUTABA
MOVLW D'0'
CALL PWM_RC1
MOVLW D'0'
MOVWF TMR0
BSF INTCON,T0IE
; Inicializar el Temporizador con 0.
; Habilitar la Interrupcion del Timer0.
;**************************** Inicio *************************************************
INICIO
NOP
GOTO INICIO
;************************************************* Rutina de Interrupcion ****************
INTERRUPCION
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
; Salvamos Registros
RECEPCION_SERIE
MOVF RCREG,W
;Preguntamos si ha llegado la LLAVE_ADELANTE".
MOVWF RCREG_GUARDA
XORLW LLAVE_ADELANTE
BTFSS STATUS,Z
GOTO CONSIGNA_PARAR
; Ir a CONSIGNA_PARAR
ADELANTE
MOVLW LLAVE_ADELANTE
; Validamos el dato si hay dos trama de
MOVWF LLAVE_ENTRADA
; 16 bit consecutivos iguales.
CALL RECEPCION_DATO_SERIE
MOVF DATO_SERIE_VALIDO,W
; Guardamos el
; DATO_SERIE_VALIDO en el W y en DATO_CORRECCION.
Ciclo Superior de Desarrollo de Productos Electrónicos
36
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
CALL PWM_RC1; Activamos los motores en funcion del DATO_SERIE_VALIDO
MOVLW B'01000010'
MOVWF PORTD
GOTO RECUPERAR
CONSIGNA_PARAR
MOVF RCREG,W
;Preguntamos si ha llegado la "LLAVE_PARAR".
MOVWF RCREG_GUARDA
XORLW LLAVE_PARAR
BTFSS STATUS,Z
GOTO CONSIGNA_DERECHA
; Ir a CONSIGNA_DERECHA.
MOVLW B'01000010'
MOVWF PORTD
PARAR
MOVLW LLAVE_PARAR
; Validamos el dato si hay dos trama de
MOVWF LLAVE_ENTRADA
; 16 bit consecutivos iguales.
CALL RECEPCION_DATO_SERIE
MOVF DATO_SERIE_VALIDO,W
; Guardamos el
; DATO_SERIE_VALIDO en el W y en DATO_CORRECCION.
CALL PWM_RC1
MOVLW B'01000010'
MOVWF PORTD
GOTO RECUPERAR
CONSIGNA_DERECHA
MOVF RCREG,W
;Preguntamos si ha llegado la "LLAVE_DERECHA".
MOVWF RCREG_GUARDA
XORLW LLAVE_DERECHA
BTFSS STATUS,Z
GOTO CONSIGNA_IZQUIERDA
; Ir a CONSIGNA_IZQUIERDA.
DERECHA
MOVLW LLAVE_DERECHA
; Validamos el dato si hay dos t
MOVWF LLAVE_ENTRADA
;16 bit consecutivos iguales.
CALL RECEPCION_DATO_SERIE
MOVF DATO_SERIE_VALIDO,W
; Guardamos el.;
;DATO_SERIE_VALIDO en el W y en DATO_CORRECCION.
CALL FUTABA
GOTO RECUPERAR
CONSIGNA_IZQUIERDA
MOVF RCREG,W
;Preguntamos si ha llegado la "LLAVE_IZQUIERDA".
MOVWF RCREG_GUARDA
XORLW LLAVE_IZQUIERDA
BTFSS STATUS,Z
GOTO CONSIGNA_ATRAS
; Vamos a leer Sensores.
IZQUIERDA
MOVLW LLAVE_IZQUIERDA
MOVWF LLAVE_ENTRADA
CALL RECEPCION_DATO_SERIE
; Validamos el dato si hay dos trama de
;16 bit consecutivos iguales.
Ciclo Superior de Desarrollo de Productos Electrónicos
37
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
MOVF DATO_SERIE_VALIDO,W
; Guardamos el
;DATO_SERIE_VALIDO en el W y en DATO_CORRECCION.
CALL FUTABA
GOTO RECUPERAR
CONSIGNA_ATRAS
MOVF RCREG,W
;Preguntamos si ha llegado la "LLAVE_ATRAS".
MOVWF RCREG_GUARDA
XORLW LLAVE_ATRAS
BTFSS STATUS,Z
GOTO RECUPERAR
; Vamos a leer Sensores.
ATRAS
MOVLW LLAVE_ATRAS
MOVWF LLAVE_ENTRADA
CALL RECEPCION_DATO_SERIE
MOVF DATO_SERIE_VALIDO,W
; Validamos el dato si hay dos trama de
;16 bit consecutivos iguales.
CALL PWM_RC1
RECUPERAR
BCF PIR1,RCIF
MOVLW D'0'
MOVWF TMR0
; Inicilizamos el Timer0
BCF INTCON,T0IF
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
; Borrar bandera del Timer0.
;Recuperamos Registros.
;Retorno de Interrupción.
;**************************** Librerias *********************************************
include <RETARDOS.INC>
include <PWM_RC2.INC>
include <PWM_RC1.INC>
include <PWM_Futa.INC>
INCLUDE <RM1_S_RF.INC>
; Libreria de Recepcion Serie.
END
Ciclo Superior de Desarrollo de Productos Electrónicos
38
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
7.- Librerías.
7.1.- I2C.INC
title " Librería de Transmisión y recepción de datos con I2C "
Config_transmision_I2C BSF STATUS,RP0
; Selecciono la pagina 1 de la memoria
BSF TRISC,4
BSF TRISC,3
MOVLW 0X09
MOVWF SSPADD
BCF STATUS,RP0
BCF PIR1,SSPIF
BSF SSPCON,SSPM3
; Cargas 09H en el registro SSPADD La velocidad de Transmisión
; será de 100 KHz
; Selecciono la pagina 0 de la memoria
; I2C en modo maestro con una
; F de Tr. = Fosc/(4*(SSPADD+1))
BCF SSPCON,SSPM2
BCF SSPCON,SSPM1
BCF SSPCON,SSPM0
BSF SSPCON,SSPEN
; Permites la configuración serie de los pines SDA y SCL.
GOTO VOLVER
Bit_start_I2C
BSF STATUS,RP0
BSF SSPCON2,SEN
; Selecciono la pagina 1 de la memoria
; Lanzamos el bit de START.
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
; Compruebas si se ha transmitido el Bit de START.
GOTO VOLVER
Transmitir_dato_I2C
MOVWF SSPBUF
; Transmitimos el dato al Esclavo
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
; Compruebas si se ha transmitido el Dato.
BSF STATUS,RP0
; Selecciono la pagina 1 de la memoria
BTFSS SSPCON2,ACKSTAT
; Si el esclavo pone ACKSTAT = 0 la
; transmisión es correcta,
; Si no hay respuesta del esclavo enviamos STOP.
GOTO Trans_correcta
GOTO Bit_stop_I2C
Trans_correcta
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
Ciclo Superior de Desarrollo de Productos Electrónicos
39
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
GOTO VOLVER
Recibir_dato_I2C
BSF STATUS,RP0
BSF SSPCON2,RCEN
; Selecciono la pagina 1 de la memoria
; Permito la Recepción de datos
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
; Compruebo si he recibido algún dato.
MOVF SSPBUF,W
; Dato recibido en el registro SSPBUF
BSF STATUS,RP0
; Selecciono la pagina 1 de la memoria
BSF SSPCON2,ACKDT
BSF SSPCON2,ACKEN
; Pone el maestro el bit de reconocimiento
; de que ha llegado el Dato.
; Permito que el bit de reconocimiento este activo.
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
GOTO VOLVER
Bit_stop_I2C
BSF STATUS,RP0
BSF SSPCON2,PEN
; Selecciono la pagina 1 de la memoria
; Activo STOP
BCF STATUS,RP0
; Selecciono la pagina 0 de la memoria
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
; Compruebo que esta activado.
GOTO VOLVER
ReStart_I2C
BSF
BSF
BCF
STATUS,RP0
SSPCON2,RSEN
STATUS,RP0
BTFSS PIR1,SSPIF
GOTO $-1
BCF
PIR1,SSPIF
VOLVER
; Comenzar de nuevos sin mandar STOP.
; Compruebo que esta activado.
RETURN
Ciclo Superior de Desarrollo de Productos Electrónicos
40
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
7.2.- I2C_16F.INC
;***********************************************************************************************
;
I2C_16FXXX.INC
;
Autor: Mikel Etxebarria
;
(c) Ingeniería de Microsistemas Programados S.L.
;
www.microcontroladores.com
;
Bilbao 2007
;
; El conjunto de rutinas de propósito general que se presentan a continuación permiten realizar las funciones
; básicas del protocolo I2C mediante un PIC16FXXX. Este fichero se debe incluir en los futuros programas
; fuente mediante la directiva INCLUDE:
;
; I2C_INI:
Activa e inicia el módulo MSSP de algunos dispositivos PIC16FXXX para trabajar en el
;
modo I2C Master a 100KHz
; I2C_Send_Start:
Genera en el bus I2C la condición de inicio
; I2C_Senta_Stop:
Genera en el bus I2C la condición de Stop
; I2C_Send_Byte:
;
Transmite el byte contenido en W por el bus I2C. La rutina finaliza cuando se recibe el /ACK
generado por el slave.
; I2C_Read_Byte:
;
;
Lee un byte procedente del dispositivo I2C slave seleccionado y lo devuelve en el registro W.
Seguidamente se genera y transmite el bit /ACK si procede (bit 0 de variable ACK=0) o el
bit NACK (bit 0 de variable ACK=1)
; Leer_I2C:
;
;
;
;
Lee un nº de bytes del dispositivo I2C. La variable Dir_I2C contiene la dirección I2C del
dispositivo.
La variable I2C_Dir_Ini contiene la dirección interna inicial. La variable I2C_N_Bytes
contiene el nº de bytes a leer. Los bytes recibidos se depositan en RAM a partir de la
posición indicada por I2C_Buffer.
; Escr_I2C:
;
;
;
;
Escribe sobre el dispositivo I2C un nº de bytes. La variable Dir_I2C contiene la dirección del
dispositivo.
La variable Dir_Ini contiene la dirección interna inicial. La variable I2C_N_Bytes contiene el
nº de bytes a escribir. Se supone que los bytes a escribir están previamente depositados en un
buffer de memoria cuyo inicio está representado por I2C_Buffer.
ifndef I2C_Var
I2C_16FXXX
messg
;En el programa principal se ha definir la dirección inicial para las variables empleadas en
"ERROR !! - Establecer dirección de inicio de las variables empleadas en I2C_16FXXX (p.e.
I2C_Var equ 0x20)"
endif
;***********************************************************************************************
;Reserva posiciones RAM empleadas por las rutinas I2C. El inicio debe ser ajustado por el usuario
;para que esas posiciones no se solapen con las empleadas por otras rutinas.
cblock
I2C_Var
I2C_ACK
Dir_I2C
I2C_Dir_Ini
I2C_N_Bytes
I2C_Buffer
;Define inicio de posiciones RAM empleadas por las rutinas I2C
;Envío de ACK/NACK. Si I2C_ACK<0>=0 --> ACK si I2C_ACK<0>=1 --> NACK
;Dirección I2C del dispositivo
;Dirección interna del dispositivo I2C
;Nº de bytes a transferir
;Inicio del buffer de transferencia con un dispositivo I2C
Ciclo Superior de Desarrollo de Productos Electrónicos
41
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
endc
;***********************************************************************************************
;I2C_Ini: Ajusta el módulo MSSP en el modo Master con frecuencia de trabajo = Fosc/(4*(SPADD+1))
I2C_Ini
bsf
movlw
movwf
movlw
movwf
bcf
movlw
movwf
STATUS,RP0
b'10000000'
SSPSTAT
.9
SSPADD
STATUS,RP0
b'00101000'
SSPCON
;Página 1
;Velocidad estándar con niveles I2C
;Valor en SSPADD para 100KHz
;Página 0
;Módulo MSSP en ON, modo Master y
;Fscl = Fosc/(4*(SPADD+1))
return
;***********************************************************************************************
;I2C_Send_Start: Envía la condición de inicio
I2C_Send_Start
I2C_Start_Wait
bcf
bsf
bsf
bcf
btfss
goto
PIR1,SSPIF
STATUS,RP0
SSPCON2,SEN
STATUS,RP0
PIR1,SSPIF
I2C_Start_Wait
;Restaura el flag del módulo MSSPç
;Página 1
;Activa secuencia de inicio
;Página 0
;Fin de secuencia de inicio ??
;No, esperar
return
;***********************************************************************************************
;I2C_Send_Stop:
Envía la secuencia de stop
I2C_Send_Stop
bcf
bsf
bsf
bcf
btfss
goto
I2C_Stop_Wait
PIR1,SSPIF
STATUS,RP0
SSPCON2,PEN
STATUS,RP0
PIR1,SSPIF
I2C_Stop_Wait
;Restaura el flag del módulo MSSP
;Página 1
;Activa secuencia de stop
;Página 0
;Fin de secuencia de Stop ??
;No, esperar
return
;***********************************************************************************************
;I2C_Send_Byte:
Transmite el byte del W vía I2C. La rutina finaliza cuando se recibe /ACK
I2C_Send_Byte
bcf
movwf
btfss
goto
I2C_Send_Byte_1
PIR1,SSPIF
SSPBUF
PIR1,SSPIF
I2C_Send_Byte_1
;Restaura el flag del módulo MSSP
;Byte a transmitir pasa al buffer de salida
;Recibido el bit /ACK ??
;No, esperar
return
;***********************************************************************************************
;I2C_Read_Byte: Lee un byte procedente del dispositivo I2C seleccionado y lo devuelve en W
;Seguidamente se genera y transmite el bit /ACK si procede (bit 0 de variable ACK=0) o el
;bit NACK (bit 0 de variable ACK=1)
Ciclo Superior de Desarrollo de Productos Electrónicos
42
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
I2C_Read_Byte
I2C_Read_Wait
ACK_Wait
bcf
bsf
bsf
bcf
btfss
goto
bcf
btfsc
goto
bsf
bcf
bsf
bcf
btfss
goto
movf
PIR1,SSPIF
STATUS,RP0
SSPCON2,RCEN
STATUS,RP0
PIR1,SSPIF
I2C_Read_Wait
PIR1,SSPIF
I2C_ACK,0
No_ACK
STATUS,RP0
SSPCON2,ACKDT
SSPCON2,ACKEN
STATUS,RP0
PIR1,SSPIF
ACK_Wait
SSPBUF,W
;Restaura el flag del módulo MSSP
;Página 1
;Activa el receptor I2C
;Página 0
;Recibidos los 8 bits ??
;No, esperar
;Restaura el flag del módulo MSSP
;Enviar ACK ??
;No, enviar NACK
;Si, selecciona página 1
;Pone bit ACK a "0"
;Activa la secuencia de generación del bit ACK
;Página 0
;Secuencia ACK finalizada ??
;No, esperar
;Lee el byte recibido
return
;Algunos dispositivos precisan que el master envíe un NACK tras recibir el último byte
No_ACK
bsf
bsf
bsf
bcf
btfss
goto
movf
NACK_Wait
STATUS,RP0
SSPCON2,ACKDT
SSPCON2,ACKEN
STATUS,RP0
PIR1,SSPIF
NACK_Wait
SSPBUF,W
;Página 1
;Pone bit ACK a "1"
;Activa la secuencia de generación del bit NACK
;Página 0
;Secuencia NACK finalizada ??
;No, esperar
;Lee el byte recibido
return
;***********************************************************************************************
;Leer_I2C:
Lee un nº de bytes del dispositivo I2C. La variable Dir_I2C contiene la dirección
;I2C del dispositivo. La variable I2C_Dir_Ini contiene la dirección interna inicial. La variable
;I2C_N_Bytes contiene el nº de bytes a leer. Los bytes recibido se depositan en RAM a
;partir de la posición indicada por I2C_Buffer
Leer_I2C
Leer_I2C_1
Leer_I2C_2
Fin_Leer_I2C
movlw
movwf
bcf
call
movf
call
movf
call
call
call
movf
iorlw
call
decfsz
goto
goto
call
movwf
incf
goto
bsf
I2C_Buffer
FSR
I2C_ACK,0
I2C_Send_Start
Dir_I2C,W
I2C_Send_Byte
I2C_Dir_Ini,W
I2C_Send_Byte
I2C_Send_Stop
I2C_Send_Start
Dir_I2C,W
b'00000001'
I2C_Send_Byte
I2C_N_Bytes,F
Leer_I2C_2
Fin_Leer_I2C
I2C_Read_Byte
INDF
FSR,F
Leer_I2C_1
I2C_ACK,0
;Inicio de la dirección del Buffer en RAM
;Envío de ACK tras cada byte leído (excepto el último)
;Secuencia de inicio
;Dirección I2C del dispositivo en modo escritura
;Envía la dirección interna del dispositivo
;Envía secuencia de stop
;Envía secuencia de inicio
;Envía dirección I2C del dispositivo en modo lectura
;Ultimo byte a leer ??
;No
;Si
;Lee el byte del dispositivo y manda ACK
;Almacena en el buffer
;Siguiente posición del buffer
;Continuar leyendo
;Si, enviar NACK cuando se lea el último
Ciclo Superior de Desarrollo de Productos Electrónicos
43
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
call
movwf
incf
call
I2C_Read_Byte
INDF
FSR,F
I2C_Send_Stop
;Lee último byte y manda NACK
;Almacena en el buffer
;Siguiente posición del buffer
;Si, mandar condición de stop
return
;***********************************************************************************************
;Escr_I2C: Escribe sobre el dispositivo I2C un nº de bytes. La variable Dir_I2C contiene la
;dirección del dispositivo. La variable Dir_Ini contiene la dirección interna inicial. La
;variable N_Bytes contiene el nº de bytes a escribir. Se supone que los bytes a escribir están
;previamente depositados en un buffer de memoria cuyo inicio está representado por Buffer
Escr_I2C
movlw
movwf
call
movf
call
movf
call
movf
call
incf
decfsz
goto
call
Escr_I2C_1
I2C_Buffer
FSR
I2C_Send_Start
Dir_I2C,W
I2C_Send_Byte
I2C_Dir_Ini,W
I2C_Send_Byte
INDF,W
I2C_Send_Byte
FSR,F
I2C_N_Bytes,F
Escr_I2C_1
I2C_Send_Stop
;Inicio de la dirección del Buffer en RAM
;Secuencia de inicio
;Dirección I2C del dispositivo en modo escritura
;Envía la dirección interna del dispositivo
;Coge del buffer en RAM el byte a escribir
;Lo escribe sobre el dispositivo I2C
;Siguiente dirección del buffer en RAM
;I2C_Contador,F ;Es el último ??
;No
;Envía secuencia de stop
return
7.3.- BIN_BCD.INC.
;********************************* Librería "BIN_BCD.INC" ****************************************
;
;
===================================================================
;
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;
E. Palacios, F. Remiro y L. López.
www.pic16f84a.com
;
Editorial Ra-Ma. www.ra-ma.es
;
===================================================================
;
; Un número binario natural de 8 bits es convertido a BCD. El resultado se guarda en tres
; posiciones de memorias llamadas: BCD_Centenas, BCD_Decenas y BCD_Unidades.
;
; El procedimiento utilizado es mediante restas de 10, tal como se explicó en el capítulo 9.
;
; Entrada:
En el registro W el número binario natural a convertir.
; Salidas:
En (BCD_Centenas), (BCD_Decenas) y (BCD_Unidades).
;
En el registro W también las decenas (nibble alto) y unidades (nibble bajo).
;********************************** Subrutina "BIN_a_BCD" ****************************************
CBLOCK
BCD_Centenas
BCD_Decenas
BCD_Unidades
; En las subrutinas no se debe fijar la dirección
; de la RAM de usuario. Se toma a continuación de
; la última asignada.
ENDC
Ciclo Superior de Desarrollo de Productos Electrónicos
44
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
BIN_a_BCD
clrf
BCD_Centenas
clrf
BCD_Decenas
movwf BCD_Unidades
; Carga los registros con el resultado inicial.
; En principio las centenas y decenas a cero.
; Se carga el número binario a convertir.
BCD_Resta10
movlw
subwf
btfss
goto
; A las unidades se les va restando 10 en cada
; pasada. (W)=(BCD_Unidades) -10.
; ¿C = 1?, ¿(W) positivo?, ¿(BCD_Unidades)>=10?
; No, es menor de 10. Se acabó.
.10
BCD_Unidades,W
STATUS,C
BIN_BCD_Fin
BCD_IncrementaDecenas
movwf
incf
movlw
subwf
btfss
BCD_Unidades
BCD_Decenas,F
.10
BCD_Decenas,W
STATUS,C
goto
BCD_Resta10
BCD_IncrementaCentenas
clrf
incf
goto
BCD_Decenas
BCD_Centenas,F
BCD_Resta10
; Pone a cero las decenas
; e incrementa las centenas.
; Otra pasada: Resta 10 al número a convertir.
BIN_BCD_Fin
swapf
addwf
BCD_Decenas,W
BCD_Unidades,W
; En el nibble alto de (W) también las decenas.
; En el nibble bajo de (W) las unidades.
return
; Recupera lo que queda por restar.
; Incrementa las decenas y comprueba si ha
; llegado a 10. Lo hace mediante una resta.
; (W)=(BCD_Decenas)-10).
; ¿C = 1?, ¿(W) positivo?,
;¿(BCD_Decenas)>=10?
; No. Vuelve a dar otra pasada, restándole 10 a
; las unidades.
; Vuelve al programa principal.
; La directiva "END" se debe poner en el programa principal no aquí.
;
;
;
;
;
===================================================================
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
E. Palacios, F. Remiro y L. López.
www.pic16f84a.com
Editorial Ra-Ma. www.ra-ma.es
===================================================================
7.4.- PWM_RC1.INC.
title " Librería PWM salida por RC1 "
;El microcontrolador PIC 16f876a tiene un hardware integrado que puede generar 2 señales PWM
;por las patillas RC2 y RC1.
;El periodo para ambas señales se fija con la siguiente fornula
;T =[(PR2+1)*4*Tosc]*(TMR2_Valor_preescalar)
;El nivel alto T1H se controla con 10 bit ( Los 8 bit mas significativo con el registro CCPR1L y
;los dos bit menos significativos con CCP1X y CCP1Y que están en el registro CCP1CON)
;Esta señal sale por la patilla RC2.
;El nivel alto T2H se controla con 10 bit ( Los 8 bit mas significativo con el registro CCPR2L y
;los dos bit menos significativos con CCP2X y CCP2Y que están en el registro CCP2CON)
;Esta señal sale por la patilla RC1.
;Para refrescar el nivel alto T1H que haber transcurrido un tiempo superior a un periodo "T".
Ciclo Superior de Desarrollo de Productos Electrónicos
45
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;El Servomotor de Futaba se controla con una señal cuadrada de periodo "T1".
;La posición del Servomotor lo determina el nivel alto de la señal "T1H"
;El Servomotor de Futaba necesita un periodo "T1" entre 10ms y 30 ms.
;Cargando los registros de forma correcta sale T1 =[(255+1)*4*1uS](16)=16,384 ms (Cristal de cuarzo 1 MHz)
;Tiene un control de Posición de -90 Grados < P (Angular)< +90 Grados controlado con T1H.
;Para -90 Grados corresponde un nivel alto T1H = 0,6 ms
;Para 0 Grados corresponde un nivel alto T1H = 1,2 ms
;Para +90 Grados corresponde un nivel alto T1H = 1,8 ms
;**************************** Igualdades *******************************************************
PERIODO
EQU 0xFF
; Representa el Periodo de la señal de PWM.
;**************************** Sección de Configuración *******************************************
CONF_PWM_RC1
BSF STATUS,RP0
; Ir al Banco1
BCF TRISC,1
; Habilitamos PC1 como salida.
MOVLW PERIODO
MOVWF PR2
; Cargamos el Periodo de la señal de PWM.
BCF STATUS,RP0
; Ir al Banco 0
MOVLW B'00000111'
MOVWF T2CON
;Cargamos el Valor Preescalar.(PWM INTERNO)
MOVLW B'00001100'
;Cargamos los 2 Bit menos significativos del nivel
;Alto de la Señal PWM y configuramos y lanzamos PWM.
;Salida de señal por RC1
MOVWF CCP2CON
MOVLW D'0'
MOVWF CCPR2L
; Inicializamos la PWM con cero.
RETURN
;*************************** Principal **********************************************************
PWM_RC1
;
MOVWF CCPR2L
CALL Retardo_20ms
; Nivel Alto de la señal PWM (Salida por RC1).
; Tiene que transcurrir un periodo antes de refrescar
; el nivel alto de la señal.
RETURN
Ciclo Superior de Desarrollo de Productos Electrónicos
46
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
7.5.- PWM_RC2.INC.
title " Librería PWM salida por RC2 "
;El microcontrolador PIC 16f876a tiene un hardware integrado que puede generar 2 señales PWM
;por las patillas RC2 y RC1.
;El periodo para ambas señales se fija con la siguiente formula
;T =[(PR2+1)*4*Tosc]*(TMR2_Valor_preescalar)
;El nivel alto T1H se controla con 10 bit ( Los 8 bit mas significativo con el registro CCPR1L y
;los dos bit menos significativos con CCP1X y CCP1Y que están en el registro CCP1CON)
;Esta señal sale por la patilla RC2.
;El nivel alto T2H se controla con 10 bit ( Los 8 bit mas significativo con el registro CCPR2L y
;los dos bit menos significativos con CCP2X y CCP2Y que están en el registro CCP2CON)
;Esta señal sale por la patilla RC1.
;Para refrescar el nivel alto T1H que haber transcurrido un tiempo superior a un periodo "T".
;El Servomotor de Futaba se controla con una señal cuadrada de periodo "T1".
;La posición del Servomotor lo determina el nivel alto de la senal "T1H"
;El Servomotor de Futaba necesita un periodo "T1" entre 10ms y 30 ms.
;Cargando los registros de forma correcta sale T1 =[(255+1)*4*1uS](16)=16,384 ms (Cristal de cuarzo 1 MHz)
;Tiene un control de Posición de -90 Grados < P (Angular)< +90 Grados controlado con T1H.
;Para -90 Grados corresponde un nivel alto T1H = 0,6 ms
;Para 0 Grados corresponde un nivel alto T1H = 1,2 ms
;Para +90 Grados corresponde un nivel alto T1H = 1,8 ms
;**************************** Igualdades *********************************************************
PERIODO
EQU 0xFF
; Representa el Periodo de la señal de PWM.
;**************************** Sección de Configuración ********************************************
CONF_PWM_RC2
BSF STATUS,RP0
; Ir al Banco 1
BCF TRISC,2
; Habilitamos PC2 como salida.
MOVLW PERIODO
MOVWF PR2
; Cargamos el Periodo de la señal de PWM.
BCF STATUS,RP0
; Ir al Banco 0
MOVLW B'00000111'
MOVWF T2CON
; Cargamos el Valor Preescalar.(PWM INTERNO)
MOVLW B'00001100'
; Cargamos los 2 Bit menos significativos del nivel
; Alto de la señal PWM y configuramos y lanzamos PWM.
; Salida de señal por RC2
MOVWF CCP1CON
Ciclo Superior de Desarrollo de Productos Electrónicos
47
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
MOVLW D'0'
MOVWF CCPR1L
RETURN
;*************************** Principal ***********************************************************
PWM_RC2
;
MOVWF CCPR1L
CALL Retardo_20ms
; Nivel Alto de la señal PWM (Salida por RC2).
; Tiene que transcurrir un periodo antes de refrescar
; el nivel alto de la señal.
RETURN
7.6.- RETARDOS.INC.
;**************************** Librería "RETARDOS.INC" *****************************************************
;
;
===================================================================
;
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;
E. Palacios, F. Remiro y L. López.
;
Editorial Ra-Ma. www.ra-ma.es
;
===================================================================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos.
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
;*********************************** ZONA DE DATOS ***************************************************************
CBLOCK
R_ContA
R_ContB
R_ContC
; Contadores para los retardos.
ENDC
;
;****************************** RETARDOS de 4 hasta 10 microsegundos ****************************************
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros
; La llamada "call" aporta 2 ciclos máquina.
nop
nop
nop
nop
nop
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina.
Ciclo Superior de Desarrollo de Productos Electrónicos
48
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
Retardo_5micros
nop
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina.
Retardo_4micros
; La llamada "call" aporta 2 ciclos máquina.
return
; El salto del retorno aporta 2 ciclos máquina.
;
; ********************************* RETARDOS de 20 hasta 500 microsegundos *********************************
;
Retardo_500micros
; La llamada "call" aporta 2 ciclos máquina.
nop
movlw d'164'
goto
RetardoMicros
Retardo_200micros
nop
movlw d'64'
goto
RetardoMicros
Retardo_100micros
movlw d'31'
goto
RetardoMicros
Retardo_50micros
nop
movlw d'14'
goto
RetardoMicros
Retardo_20micros
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina. Este es el valor de "K".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina. Este es el valor de "K".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "K".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina.
; Aporta 1 ciclo máquina. Este es el valor de "K".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
movlw d'5'
; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
movwf R_ContA
; Aporta 1 ciclo máquina.
Rmicros_Bucle
decfsz R_ContA,F
goto
Rmicros_Bucle
; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
; Aporta (K-1)x2 ciclos máquina.
return
; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros: 2 + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) = 50 cm = 50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros : 2 + 1 + (2 + 3K) = 20 cm = 20 µs. (para K= 5 y 4 MHz).
;
; *************************************RETARDOS de 1 ms hasta 200 ms. ******************************************
Ciclo Superior de Desarrollo de Productos Electrónicos
49
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;
Retardo_200ms
movlw d'200'
goto
Retardos_ms
Retardo_100ms
movlw d'100'
goto
Retardos_ms
Retardo_50ms
movlw d'50'
goto
Retardos_ms
Retardo_20ms
movlw d'20'
goto
Retardos_ms
Retardo_10ms
movlw d'10'
goto
Retardos_ms
Retardo_5ms
movlw d'5'
goto
Retardos_ms
Retardo_2ms
movlw d'2'
goto
Retardos_ms
Retardo_1ms
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "M".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
movlw d'1'
; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
movwf R_ContB
; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249'
movwf R_ContA
; Aporta Mx1 ciclos máquina. Este es el valor de "K".
; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop
decfsz R_ContA,F
goto
R1ms_BucleInterno
decfsz R_ContB,F
; Aporta KxMx1 ciclos máquina.
; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
; Aporta (K-1)xMx2 ciclos máquina.
; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
Ciclo Superior de Desarrollo de Productos Electrónicos
50
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
goto
R1ms_BucleExterno
return
;
;En total estas subrutinas tardan:
; Aporta (M-1)x2 ciclos máquina.
; El salto del retorno aporta 2 ciclos máquina.
; - Retardo_200ms:
2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms:
2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms :
2 + 1 + 2 + (2 + 4M + 4KM) = 50007 cm = 50 ms. (M= 50 y K=249).
; - Retardo_20ms :
2 + 1 + 2 + (2 + 4M + 4KM) = 20007 cm = 20 ms. (M= 20 y K=249).
; - Retardo_10ms :
2 + 1 + 2 + (2 + 4M + 4KM) = 10007 cm = 10 ms. (M= 10 y K=249).
; - Retardo_5ms :
2 + 1 + 2 + (2 + 4M + 4KM) = 5007 cm = 5 ms. (M= 5 y K=249).
; - Retardo_2ms :
2 + 1 + 2 + (2 + 4M + 4KM) = 2007 cm = 2 ms. (M= 2 y K=249).
; - Retardo_1ms :
2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249).
;
; *********************************RETARDOS de 0.5 hasta 20 segundos ******************************************
;
Retardo_20s
; La llamada "call" aporta 2 ciclos máquina.
movlw d'200'
goto
Retardo_1Decima
Retardo_10s
movlw d'100'
goto
Retardo_1Decima
Retardo_5s
; Aporta 1 ciclo máquina. Este es el valor de "N".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "N".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
movlw d'50'
goto
Retardo_1Decima
Retardo_2s
; Aporta 1 ciclo máquina. Este es el valor de "N".
; Aporta 2 ciclos máquina.
; La llamada "call" aporta 2 ciclos máquina.
movlw d'20'
goto
Retardo_1Decima
; Aporta 1 ciclo máquina. Este es el valor de "N".
; Aporta 2 ciclos máquina.
Retardo_1s
movlw d'10'
goto
Retardo_1Decima
; La llamada "call" aporta 2 ciclos máquina.
; Aporta 1 ciclo máquina. Este es el valor de "N".
; Aporta 2 ciclos máquina.
Retardo_500ms
; La llamada "call" aporta 2 ciclos máquina.
movlw d'5'
; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
; + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
movwf R_ContC
; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100'
movwf R_ContB
; Aporta Nx1 ciclos máquina. Este es el valor de "M".
; Aporta Nx1 ciclos máquina.
Ciclo Superior de Desarrollo de Productos Electrónicos
51
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
R1Decima_BucleExterno
movlw d'249'
movwf R_ContA
; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno
nop
decfsz
goto
decfsz
goto
decfsz
goto
R_ContA,F
R1Decima_BucleInterno
R_ContB,F
R1Decima_BucleExterno
R_ContC,F
R1Decima_BucleExterno2
return
;
;En total estas subrutinas tardan:
; - Retardo_20s:
;
; - Retardo_10s:
;
; - Retardo_5s:
;
; - Retardo_2s:
;
; - Retardo_1s:
;
; - Retardo_500ms:
;
;
;
;
;
;
; Aporta KxMxNx1 ciclos máquina.
; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
; Aporta (K-1)xMxNx2 ciclos máquina.
; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
; Aporta (M-1)xNx2 ciclos máquina.
; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
; Aporta (N-1)x2 ciclos máquina.
; El salto del retorno aporta 2 ciclos máquina.
2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
(N=200, M=100 y K=249).
2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
(N=100, M=100 y K=249).
2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s.
(N= 50, M=100 y K=249).
2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s.
(N= 20, M=100 y K=249).
2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s.
(N= 10, M=100 y K=249).
2 + 1 + (2 + 4N + 4MN + 4KMN) = 500025 cm = 0,5 s.
(N= 5, M=100 y K=249).
===================================================================
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
E. Palacios, F. Remiro y L. López.
Editorial Ra-Ma. www.ra-ma.es
===================================================================
7.7.- LCD_4B_1.INC.
;************************************ Librería "LCD_4B_1.INC" ***********************************
;
;
===================================================================
;
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;
E. Palacios, F. Remiro y L. López.
;
Editorial Ra-Ma. www.ra-ma.es
;
===================================================================
;
; Estas subrutinas permiten realizar las tareas básicas de control de un módulo LCD de 2
; líneas por 16 caracteres, compatible con el modelo LM016L.
;
; El visualizador LCD está conectado al Puerto B del PIC mediante un bus de 4 bits. Las
; conexiones son:
; Las 4 líneas superiores del módulo LCD, pines <DB7:DB4> se conectan a las 4
;
líneas superiores del Puerto B del PIC, pines <RB7:RB4>.
; Pin RS del LCD a la línea RA0 del PIC.
; Pin R/W del LCD a la línea RA1 del PIC, o a masa.
; Pin Enable del LCD a la línea RA2 del PIC.
Ciclo Superior de Desarrollo de Productos Electrónicos
52
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;
; Se utilizan llamadas a subrutinas de retardo de tiempo localizadas en la librería RETARDOS.INC.
;
;******************************** ZONA DE DATOS **********************************************
CBLOCK
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISB
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
LCD_CaracteresPorLinea
EQU
#DEFINE
#DEFINE
#DEFINE
#DEFINE
PORTA,0
PORTA,1
PORTA,2
PORTB
LCD_PinRS
LCD_PinRW
LCD_PinEnable
LCD_BusDatos
.16
; Número de caracteres por línea de la pantalla.
; ********************************Subrutina "LCD_Inicializa" **************************************
;
; Inicialización del módulo LCD: Configura funciones del LCD, produce reset por software,
; borra memoria y enciende pantalla. El fabricante especifica que para garantizar la
; configuración inicial hay que hacerla como sigue:
;
LCD_Inicializa
bsf
bcf
bcf
bcf
bcf
bcf
STATUS,RP0
LCD_PinRS
LCD_PinEnable
LCD_PinRW
STATUS,RP0
LCD_PinRW
bcf
bcf
call
movlw
call
call
movlw
call
call
movlw
call
movlw
call
LCD_PinEnable
LCD_PinRS
Retardo_20ms
b'00110000'
LCD_EscribeLCD
Retardo_5ms
b'00110000'
LCD_EscribeLCD
Retardo_200micros
b'00110000'
LCD_EscribeLCD
b'00100000'
LCD_EscribeLCD
; Configura las líneas conectadas al pines RS,
; R/W y E.
; En caso de que esté conectado le indica
; que se va a escribir en el LCD.
; Impide funcionamiento del LCD poniendo E=0.
; Activa el Modo Comando poniendo RS=0.
; Escribe el dato en el LCD.
; Interface de 4 bits.
; Ahora configura el resto de los parámetros:
call
call
call
call
LCD_2Lineas4Bits5x7
LCD_Borra
LCD_CursorOFF
LCD_CursorIncr
; LCD de 2 líneas y caracteres de 5x7 puntos.
; Pantalla encendida y limpia. Cursor al principio
; de la línea 1. Cursor apagado.
; Cursor en modo incrementar.
return
Ciclo Superior de Desarrollo de Productos Electrónicos
53
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;********************************** Subrutina "LCD_EscribeLCD" ********************************
;
; Envía el dato del registro de trabajo W al bus de dato y produce un pequeño pulso en el pin
; Enable del LCD. Para no alterar el contenido de las líneas de la parte baja del Puerto B que
; no son utilizadas para el LCD (pines RB3:RB0), primero se lee estas líneas y después se
; vuelve a enviar este dato sin cambiarlo.
LCD_EscribeLCD
andlw
movwf
movf
andlw
iorwf
b'11110000'
LCD_Dato
LCD_BusDatos,W
b'00001111'
LCD_Dato,F
; Se queda con el nibble alto del dato que es el
; que hay que enviar y lo guarda.
; Lee la información actual de la parte baja
; del Puerto B, que no se debe alterar.
; Enviará la parte alta del dato de entrada
; y en la parte baja lo que había antes.
; Acceso al Banco 1.
; Guarda la configuración que tenía antes TRISB.
bsf
movf
movwf
movlw
andwf
bcf
STATUS,RP0
TRISB,W
LCD_GuardaTRISB
b'00001111'
PORTB,F
STATUS,RP0
movf
movwf
call
bsf
bcf
LCD_Dato,W
LCD_BusDatos
Retardo_20micros
LCD_PinEnable
LCD_PinEnable
; Recupera el dato a enviar.
; Envía el dato al módulo LCD.
bsf
movf
movwf
bcf
return
STATUS,RP0
LCD_GuardaTRISB,W
PORTB
STATUS,RP0
; Acceso al Banco 1. Restaura el antiguo valor en
; la configuración del Puerto B.
; Realmente es TRISB.
; Acceso al Banco 0.
; Las 4 líneas inferiores del Puerto B se dejan
; como estaban y las 4 superiores como salida.
; Acceso al Banco 0.
; Permite funcionamiento del LCD mediante un pequeño
; pulso y termina impidiendo el funcionamiento del LCD.
; ******************************* Subrutinas variadas para el control del módulo LCD ******************
;
; Los comandos que pueden ser ejecutados son:
;
LCD_CursorIncr
; Cursor en modo incrementar.
movlw b'00000110'
goto
LCD_EnviaComando
LCD_Linea1
; Cursor al principio de la Línea 1.
movlw b'10000000'
goto
LCD_EnviaComando
; Dirección 00h de la DDRAM
LCD_Linea2
.
movlw b'11000000'
goto
LCD_EnviaComando
; Cursor al principio de la Línea 2
LCD_PosicionLinea1
; Cursor a posición de la Línea 1, a partir de la
iorlw
goto
; dirección 00h de la DDRAM más el valor del
; registro W.
b'10000000'
LCD_EnviaComando
LCD_PosicionLinea2
; Dirección 40h de la DDRAM
; Cursor a posición de la Línea 2, a partir de la
Ciclo Superior de Desarrollo de Productos Electrónicos
54
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
iorlw
goto
b'11000000'
LCD_EnviaComando
LCD_OFF
; dirección 40h de la DDRAM más el valor del
; registro W.
; Pantalla apagada.
movlw b'00001000'
goto
LCD_EnviaComando
LCD_CursorON
; Pantalla encendida y cursor encendido.
movlw b'00001110'
goto
LCD_EnviaComando
LCD_CursorOFF
; Pantalla encendida y cursor apagado.
movlw b'00001100'
goto
LCD_EnviaComando
LCD_Borra
; Borra toda la pantalla, memoria DDRAM y pone el
movlw b'00000001'
goto
LCD_EnviaComando
LCD_2Lineas4Bits5x7
movlw b'00101000'
goto
LCD_EnviaComando
; cursor a principio de la línea 1.
; Define la pantalla de 2 líneas, con caracteres
; de 5x7 puntos y conexión al PIC mediante bus de
; 4 bits.
;************************* Subrutinas "LCD_EnviaComando" y "LCD_Caracter" *********************
;
; "LCD_EnviaComando". Escribe un comando en el registro del módulo LCD. La palabra de
; comando ha sido entregada a través del registro W. Trabaja en Modo Comando.
; "LCD_Caracter". Escribe en la memoria DDRAM del LCD el carácter ASCII introducido a
; a través del registro W. Trabaja en Modo Dato.
;
LCD_EnviaComando
bcf
goto
LCD_PinRS
LCD_Envia
; Activa el Modo Comando, poniendo RS=0.
LCD_PinRS
LCD_CodigoCGROM
; Activa el "Modo Dato", poniendo RS=1.
; Obtiene el código para correcta visualización.
LCD_Caracter
bsf
call
LCD_Envia
movwf LCD_GuardaDato
call
LCD_EscribeLCD
swapf LCD_GuardaDato,W
call
btfss
call
call
LCD_EscribeLCD
LCD_PinRS
Retardo_2ms
Retardo_50micros
; Guarda el dato a enviar.
; Primero envía el nibble alto.
; Ahora envía el nibble bajo. Para ello pasa el
; nibble bajo del dato a enviar a parte alta del byte.
; Se envía al visualizador LCD.
; Debe garantizar una correcta escritura manteniendo
; 2 ms en modo comando y 50 µs en modo carácter.
return
Ciclo Superior de Desarrollo de Productos Electrónicos
55
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;***************************Subrutina "LCD_CodigoCGROM" *************************************
;
; A partir del carácter ASCII número 127 los códigos de los caracteres definidos en la
; tabla CGROM del LM016L no coinciden con los códigos ASCII. Así por ejemplo, el código
; ASCII de la "Ñ" en la tabla CGRAM del LM016L es EEh.
;
; Esta subrutina convierte los códigos ASCII de la "Ñ", "º" y otros, a códigos CGROM para que
; que puedan ser visualizado en el módulo LM016L.
;
; Entrada:
En (W) el código ASCII del carácter que se desea visualizar.
; Salida: En (W) el código definido en la tabla CGROM.
LCD_CodigoCGROM
movwf LCD_Dato
LCD_EnheMinuscula
sublw
btfss
goto
movlw
movwf
goto
'ñ'
STATUS,Z
LCD_EnheMayuscula
b'11101110'
LCD_Dato
LCD_FinCGROM
; Guarda el valor del carácter y comprueba si es
; un carácter especial.
; ¿Es la "ñ"?
; No es "ñ".
; Código CGROM de la "ñ".
LCD_EnheMayuscula
movf
sublw
btfss
goto
movlw
movwf
goto
LCD_Dato,W
'Ñ'
STATUS,Z
LCD_Grado
b'11101110'
LCD_Dato
LCD_FinCGROM
; Recupera el código ASCII de entrada.
; ¿Es la "Ñ"?
LCD_Dato,W
'º'
STATUS,Z
LCD_FinCGROM
b'11011111'
LCD_Dato
; Recupera el código ASCII de entrada.
; ¿Es el símbolo "º"?
; No es "Ñ".
; Código CGROM de la "ñ". (No hay símbolo para
; la "Ñ" mayúscula en la CGROM).
LCD_Grado
movf
sublw
btfss
goto
movlw
movwf
; No es "º".
; Código CGROM del símbolo "º".
LCD_FinCGROM
movf
return
LCD_Dato,W
; En (W) el código buscado.
; *******************Subrutina "LCD_DosEspaciosBlancos" y "LCD_LineaBlanco" *********************
;
; Visualiza espacios en blanco.
LCD_LineaEnBlanco
movlw LCD_CaracteresPorLinea
goto
LCD_EnviaBlancos
LCD_UnEspacioBlanco
movlw .1
Ciclo Superior de Desarrollo de Productos Electrónicos
56
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
goto
LCD_EnviaBlancos
LCD_DosEspaciosBlancos
movlw .2
goto
LCD_EnviaBlancos
LCD_TresEspaciosBlancos
movlw .3
LCD_EnviaBlancos
movwf LCD_Auxiliar1
; (LCD_Auxiliar1) se utiliza como contador.
LCD_EnviaOtroBlanco
movlw
call
decfsz
goto
''
LCD_Caracter
LCD_Auxiliar1,F
LCD_EnviaOtroBlanco
; Esto es un espacio en blanco.
; Visualiza tanto espacios en blanco como se
; haya cargado en (LCD_Auxiliar1).
return
;********************** Subrutinas "LCD_ByteCompleto" y "LCD_Byte" *****************************
;
; Subrutina "LCD_ByteCompleto", visualiza el byte que almacena el registro W en el
; lugar actual de la pantalla. Por ejemplo, si (W)=b'10101110' visualiza "AE".
;
; Subrutina "LCD_Byte" igual que la anterior, pero en caso de que el nibble alto sea cero
; visualiza en su lugar un espacio en blanco. Por ejemplo si (W)=b'10101110' visualiza "AE"
; y si (W)=b'00001110', visualiza " E" (un espacio blanco delante).
;
; Utilizan la subrutina "LCD_Nibble" que se analiza más adelante.
;
LCD_Byte
movwf
andlw
btfss
goto
movlw
call
goto
LCD_Auxiliar2
b'11110000'
STATUS,Z
LCD_VisualizaAlto
''
LCD_Caracter
LCD_VisualizaBajo
; Guarda el valor de entrada.
; Analiza si el nibble alto es cero.
; Si es cero lo apaga.
; No es cero y lo visualiza.
; Visualiza un espacio en blanco.
LCD_ByteCompleto
movwf LCD_Auxiliar2
; Guarda el valor de entrada.
LCD_VisualizaAlto
swapf
call
LCD_Auxiliar2,W
LCD_Nibble
; Pone el nibble alto en la parte baja.
; Lo visualiza.
LCD_VisualizaBajo
movf
call
LCD_Auxiliar2,W
LCD_Nibble
; Repite el proceso con el nibble bajo.
; Lo visualiza.
return
Ciclo Superior de Desarrollo de Productos Electrónicos
57
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
; *******************************Subrutina "LCD_Nibble" ****************************************
;
; Visualiza en el lugar actual de la pantalla, el valor hexadecimal que almacena en el nibble
; bajo del registro W. El nibble alto de W no es tenido en cuenta. Ejemplos:
; - Si (W)=b'01010110', se visualizará "6".
; - Si (W)=b'10101110', se visualizará "E".
;
LCD_Nibble
andlw
movwf
sublw
btfss
goto
movf
addlw
goto
b'00001111'
LCD_Auxiliar1
0x09
STATUS,C
LCD_EnviaByteLetra
LCD_Auxiliar1,W
'0'
LCD_FinVisualizaDigito
; Se queda con la parte baja.
; Lo guarda.
; Comprueba si hay que representarlo con letra.
; El número se pasa a carácter ASCII sumándole
; el ASCII del cero y lo visualiza.
LCD_EnviaByteLetra
movf
addlw
LCD_Auxiliar1,W
'A'-0x0A
; Sí, por tanto, se le suma el ASCII de la 'A'.
LCD_FinVisualizaDigito
goto
;
;
;
;
;
LCD_Caracter
; Y visualiza el carácter. Se hace con un "goto"
; para no sobrecargar la pila.
===================================================================
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
E. Palacios, F. Remiro y L. López.
Editorial Ra-Ma. www.ra-ma.es
===================================================================
7.8.- LCD_MENS.INC.
;**************************** Librería "LCD_MENS.INC" ********************************
;
;
===================================================================
;
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;
E. Palacios, F. Remiro y L. López.
;
Editorial Ra-Ma. www.ra-ma.es
;
===================================================================
;
; Librería de subrutinas para el manejo de mensajes a visualizar en un visualizador LCD.
CBLOCK
LCD_ApuntaCaracter
LCD_ValorCaracter
ENDC
; Indica la posición del carácter a visualizar
; respecto del comienzo de todos los mensajes,
; (posición de la etiqueta "Mensajes").
; Código ASCII del carácter a
; visualizar.
; Los mensajes tienen que estar situados dentro de las 256 primeras posiciones de la
; memoria de programa, es decir, no pueden superar la dirección 0FFh.
Ciclo Superior de Desarrollo de Productos Electrónicos
58
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
; ******************************** Subrutina "LCD_Mensaje" **************************************
;
; Visualiza por pantalla el mensaje apuntado por el registro W.
;
; Los mensajes deben localizarse dentro de una zona encabezada por la etiqueta "Mensajes" y que
; tenga la siguiente estructura:
;
; Mensajes
; ¡Etiqueta obligatoria!
;
addwf PCL,F
; Mensaje0
; Posición inicial del mensaje.
;
DT ".. ..", 0x00
; Mensaje terminado en 0x00.
; Mensaje1
;
...
;
...
; FinMensajes
;
; La llamada a esta subrutina se realizará siguiendo este ejemplo:
;
;
movlw Mensaje0
; Carga la posición del mensaje.
;
call
LCD_Mensaje
; Visualiza el mensaje.
;
LCD_Mensaje
movwf
movlw
subwf
decf
LCD_ApuntaCaracter
Mensajes
LCD_ApuntaCaracter,F
LCD_ApuntaCaracter,F
; Posición del primer carácter del mensaje.
; Halla la posición relativa del primer carácter
; del mensaje respecto de etiqueta "Mensajes".
; Compensa la posición que ocupa "addwf PCL,F".
LCD_VisualizaOtroCaracter
movf
call
movwf
movf
btfsc
goto
LCD_ApuntaCaracter,W
Mensajes
LCD_ValorCaracter
LCD_ValorCaracter,F
STATUS,Z
LCD_FinMensaje
; Obtiene el código ASCII del carácter apuntado.
; Guarda el valor de carácter.
; Lo único que hace es posicionar flag Z. En caso
; que sea "0x00", que es código indicador final
; de mensaje, sale fuera.
LCD_NoUltimoCaracter
call
incf
goto
LCD_Caracter
LCD_ApuntaCaracter,F
LCD_VisualizaOtroCaracter
; Visualiza el carácter ASCII leído.
; Apunta a la posición del siguiente carácter
; dentro del mensaje.
LCD_FinMensaje
return
; Vuelve al programa principal.
; ****************************Subrutina "LCD_MensajeMovimiento" ******************************;
; Visualiza un mensaje de mayor longitud que los 16 caracteres que pueden representarse
; en una línea, por tanto se desplaza a través de la pantalla.
;
; En el mensaje debe dejarse 16 espacios en blanco, al principio y al final para
; conseguir que el desplazamiento del mensaje sea lo más legible posible.
;
CBLOCK
LCD_CursorPosicion
ENDC
; Contabiliza la posición del cursor dentro de la
; pantalla LCD
Ciclo Superior de Desarrollo de Productos Electrónicos
59
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
LCD_MensajeMovimiento
movwf
movlw
subwf
decf
LCD_ApuntaCaracter
Mensajes
LCD_ApuntaCaracter,F
LCD_ApuntaCaracter,F
; Posición del primer carácter del mensaje.
; Halla la posición relativa del primer carácter
; del mensaje respecto de la etiqueta "Mensajes".
; Compensa la posición que ocupa "addwf PCL,F".
LCD_PrimeraPosicion
;
clrf
call
LCD_CursorPosicion
LCD_Linea2
; El cursor en la posición 0 de la línea.
call
LCD_Borra
; Se sitúa en la primera posición de la línea 1 y
; borra la pantalla.
LCD_VisualizaCaracter
movlw
subwf
btfss
goto
LCD_CaracteresPorLinea ;
LCD_CursorPosicion,W
STATUS,Z
LCD_NoEsFinalLinea
¿Ha llegado a final de línea?
LCD_EsFinalLinea
;
call
call
movlw
subwf
goto
Retardo_100ms
Retardo_200ms
LCD_CaracteresPorLinea-1
LCD_ApuntaCaracter,F
LCD_PrimeraPosicion
LCD_NoEsFinalLinea
movf LCD_ApuntaCaracter,W
call
Mensajes
movwf LCD_ValorCaracter
movf LCD_ValorCaracter,F
btfsc
STATUS,Z
goto
LCD_FinMovimiento
; Lo mantiene visualizado durante este tiempo.
; Apunta a la posición del segundo carácter visualizado
; en pantalla, que será el primero en la siguiente
; visualización de línea, para producir el efecto
; de desplazamiento hacia la izquierda.
; Obtiene el ASCII del carácter apuntado.
; Guarda el valor de carácter.
; Lo único que hace es posicionar flag Z. En caso
; que sea "0x00", que es código indicador final
; de mensaje, sale fuera.
LCD_NoUltimoCaracter2
call
incf
LCD_Caracter
LCD_CursorPosicion,F
incf
goto
LCD_ApuntaCaracter,F
LCD_VisualizaCaracter
; Visualiza el carácter ASCII leído.
; Contabiliza el incremento de posición del
; cursor en la pantalla.
; Apunta a la siguiente posición por visualizar.
; Vuelve a visualizar el siguiente carácter
; de la línea.
LCD_FinMovimiento
return
;
;
;
;
;
; Vuelve al programa principal.
===================================================================
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
E. Palacios, F. Remiro y L. López.
Editorial Ra-Ma. www.ra-ma.es
===================================================================
Ciclo Superior de Desarrollo de Productos Electrónicos
60
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
7.9.- SRF08_L1.INC.
;***********************************************************************************************
;
SRF08_16FXXX.INC
;
Autor: Mikel Etxebarria
;
(c) Ingeniería de Microsistemas Programados S.L.
;
www.microcontroladores.com
;
Bilbao 2007
;
;El conjunto de rutinas que se presentan a continuación permiten realizar las funciones de control
;del sonar SRF08 de la firma Devantech mediante el interface I2C con un PIC16FXXX. Este fichero
;se debe incluir en los futuros programas fuente mediante la directiva INCLUDE:
;
;SRF08_in:
El SRF08 inicia una nueva medida en in. Resultado en SRF08_Byte_H y SRF08_Byte_L
;SRF08_cm:
El SRF08 inicia una nueva medida en cm. Resultado en SRF08_Byte_H y SRF08_Byte_L
;SRF08_us:
El SRF08 inicia una nueva medida en us. Resultado en SRF08_Byte_H y SRF08_Byte_L
;SRF08_Luz:
;
Realiza la medida de luminosidad que recibe el sónar SRF08 a través de la célula LDR.
El resultado de 8 bits se deposita almacena en SRF08_Byte_H
;SRF08_Rango:
;
;
Ajusta el rango de la distancia a medir: distancia=((rango*43)+43). Para medidas de
distancia cortas, un menor rango permite medidas mas rápidas. Por defecto el rango
es de 0xff (11 m).El nuevo rango se indica en SRF08_Byte_H.
;SRF08_Firm:
;
Lee la versión del firmware interno del sónar SRF08. El resultado se deposita en
SRF08_Byte_H
;SRF08_I2C_Dir:
Cambia la dirección I2C del SRF08. SRF08_Byte_H debe contener la nueva dirección I2C
ifndef SRF08_Var
;En el programa principal se ha definir la dirección inicial para las variables
;empleadas en SRF08_16FXXX.inc
messg
"ERROR !! - Establecer dirección de inicio de las variables empleadas en SRF08_16FXXX
(p.e. SRF08_Var equ 0x20)"
endif
SRF08 equ
0xe0
;Dirección I2C del SRF08 de fabrica.
cblock
SRF08_Var
SRF08_Byte_H
SRF08_Byte_L
SRF08_Comando
SRF08_DIR
;Define inicio de posiciones RAM empleadas por las
;rutinas SRF08
;Resultado de la lectura (alto)
;Resultado de la lectura (bajo)
;Comando a ejecutar
;Variable que se tiene que inicializar en el programa
;principal
;con la dirección del sensor.
;Ejemplo: MOVLW 0XE0
;
MOVWF SRF08_DIR
endc
Ciclo Superior de Desarrollo de Productos Electrónicos
61
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;**********************************************************************************************
;SRF08_in: Realiza una medida en pulgadas. El resultado se almacén en SRF08_Byte_H y en SRF08_Byte_L
SRF08_in
movlw 0x50
movwf SRF08_Comando
goto
SRF08_Ejec
;Almacena comando a ejecutar
;Ejecuta el comando
;**********************************************************************************************
;SRF08_cm: Realiza una medida en cm. El resultado se almacén en SRF08_Byte_H y en SRF08_Byte_L
SRF08_cm
movlw 0x51
movwf SRF08_Comando
goto
SRF08_Ejec
;Almacena comando a ejecutar
;Ejecuta el comando
;**********************************************************************************************
;SRF08_us: Realiza una medida en us. El resultado se almacén en SRF08_Byte_H y en SRF08_Byte_L
SRF08_us
movlw 0x52
movwf SRF08_Comando
goto
SRF08_Ejec
;Almacena comando a ejecutar
;Ejecuta el comando
;***********************************************************************************************
;SRF08_Ejec: El SRF08 ejecuta un determinado comando.
SRF08_Ejec
call
I2C_Send_Start
movlw SRF08_DIR
call
I2C_Send_Byte
movlw 0
call
I2C_Send_Byte
movf SRF08_Comando,W
call
I2C_Send_Byte
call
I2C_Send_Stop
call Retardo_100ms
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x00 (registro de comandos)
;Enviar comando a ejecutar
;Secuencia de stop
;Temporización de 80mS necesaria para realizar la
ejecución
;Secuencia para la lectura del resultado medido por el SRF08
movlw
movwf
movlw
movwf
SRF08_DIR
Dir_I2C
2
I2C_Dir_Ini
movlw
movwf
call
movlw
movwf
movf
movwf
incf
movf
movwf
2
I2C_N_Bytes
Leer_I2C
I2C_Buffer
FSR
INDF,W
SRF08_Byte_H
FSR,F
INDF,W
SRF08_Byte_L
;Almacena dirección I2C del dispositivo (el SRF08)
;Dirección inicial interna 0x02 (byte alto del resultado de
la medida)
;Nº de bytes a leer (2, parte alta y baja de la medida)
return
Ciclo Superior de Desarrollo de Productos Electrónicos
62
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;***********************************************************************************************
;SRF08_Luz: Realiza la medida de luminosidad que recibe el sónar SRF08 a través de la célula LDR. El resultado
;de 8 bits se deposita almacena en SRF08_Byte_H
SRF08_Luz
movlw 0x51
movwf SRF08_Comando
call
SRF08_Ejec
;Al ejecutar un comando cualquiera, la medida de luz se
;actualiza. Se ejecuta el comando de medir distancia en
;cm
;Ejecuta el comando
;A continuación se lee el contenido de la posición 1 que contiene el valor procedente de la célula LDR
movlw
movwf
movlw
movwf
movlw
movwf
call
movf
movwf
SRF08_DIR
Dir_I2C
1
I2C_Dir_Ini
1
I2C_N_Bytes
Leer_I2C
I2C_Buffer,W
SRF08_Byte_H
;Almacena dirección I2C del dispositivo (el SRF08)
;Dirección inicial interna 0x01 (registro del sensor de luz)
;Nº de bytes a leer (1)
;Realiza la lectura
;Almacena el resultado
return
;***********************************************************************************************
;SRF08_Rango: Ajusta el rango de la distancia a medir: distancia=((rango*43)+43). Para medidas de distancia
;cortas, un menor rango permite medidas mas rápidas. Por defecto el rango es de 0xff (11 m). El nuevo rango
;se indica en SRF08_Byte_H.
SRF08_Rango
call
movlw
call
movlw
call
movf
call
call
I2C_Send_Start
SRF08_DIR
I2C_Send_Byte
2
I2C_Send_Byte
SRF08_Byte_H,W
I2C_Send_Byte
I2C_Send_Stop
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x02 (registro de rango)
;Carga el rango
;Transmite el nuevo rango
;Secuencia de stop
return
;***********************************************************************************************
;SRF08_Firm: Lee la versión del firmware interno del sónar SRF08. El resultado se deposita en
;SRF08_Byte_H
SRF08_Firm
movlw
movwf
movlw
movwf
SRF08_DIR
Dir_I2C
0
I2C_Dir_Ini
movlw
movwf
call
movlw
movwf
movf
movwf
1
I2C_N_Bytes
Leer_I2C
I2C_Buffer
FSR
INDF,W
SRF08_Byte_H
;Almacena dirección I2C del dispositivo (el SRF08)
;Dirección inicial interna 0x00 (nº de versión del
firmware interno)
;Nº de bytes a leer
;Leer dispositivo
;Almacena el resultado
return
Ciclo Superior de Desarrollo de Productos Electrónicos
63
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
;***********************************************************************************************
;SRF08_I2C_Dir: Cambia la dirección I2C del SRF08. SRF08_Byte_H debe contener la nueva dirección I2C
SRF08_I2C_Dir
call
movlw
call
movlw
call
movlw
call
call
call
movlw
call
movlw
call
movlw
call
call
call
movlw
call
movlw
call
movlw
call
call
call
movlw
call
movlw
call
movf
call
call
I2C_Send_Start
SRF08
I2C_Send_Byte
0
I2C_Send_Byte
0xA0
I2C_Send_Byte
I2C_Send_Stop
I2C_Send_Start
SRF08
I2C_Send_Byte
0
I2C_Send_Byte
0xAA
I2C_Send_Byte
I2C_Send_Stop
I2C_Send_Start
SRF08
I2C_Send_Byte
0
I2C_Send_Byte
0xA5
I2C_Send_Byte
I2C_Send_Stop
I2C_Send_Start
SRF08
I2C_Send_Byte
0
I2C_Send_Byte
SRF08_Byte_H,W
I2C_Send_Byte
I2C_Send_Stop
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x00 (registro de comandos)
;1ª secuencia para el cambio de dirección
;Enviar comando a ejecutar
;Secuencia de stop
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x00 (registro de comandos)
;2ª secuencia para el cambio de dirección
;Enviar comando a ejecutar
;Secuencia de stop
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x00 (registro de comandos)
;3ª secuencia para el cambio de dirección
;Enviar comando a ejecutar
;Secuencia de stop
;Secuencia de inicio
;Dirección I2C del SRF08 modo escritura
;Dirección interna 0x00 (registro de comandos)
;Nueva dirección I2C
;Enviar comando a ejecutar
;Secuencia de stop
return
Ciclo Superior de Desarrollo de Productos Electrónicos
64
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.- Diseño de Placas de Circuitos Impresos.
8.1.- Alimentación del Circuito + Cargador del Programa.
8.1.1.- Esquema Eléctrico.
8.1.2.- Cara de Componentes
y de pistas Top Copper.
8.1.3.- Cara de pistas Bottom Copper .
Ciclo Superior de Desarrollo de Productos Electrónicos
65
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.2.- Control + Potencia + etc.
8.2.1.- Esquema Eléctrico.
Ciclo Superior de Desarrollo de Productos Electrónicos
66
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.2.2.- Cara de Componentes y de pistas Top Copper .
8.2.3.- Cara de pistas Bottom Copper .
Ciclo Superior de Desarrollo de Productos Electrónicos
67
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.3.- Mando.
8.3.1.- Esquema Eléctrico.
Mando
VDD
U2E
Emisor de Datos CEBEK C-0503
GND1
Ve
-
R7E
GND2
220
220uF
Antena
R6E
C2E
220uF
VSS
E_RF1E
BD136_JOAN
3
GND3
VO
C1E
9V
D7E
1
2
3
4
15
A
2.2k
11
2
VI
13
1
BAT1E
1
GND
1
2
K
INTERRUPTOR_JOAN
1N4007_JOAN
A
Q1E
7805_JOAN
Vcc
SW6E
2
D6E
CON1E
LED-RED_JOAN
K
1
BORNIER1_JOAN
C3E
15pF
U1E
220
220
220
220
220
RB0E
RB1E
RB2E
RB3E
RB4E
A
R5E
A
R4E
A
R3E
A
R2E
A
R1E
LED-YELLOW_JOAN
LED-GREEN_JOAN
LED-RED_JOAN
LED-RED_JOAN
LED-RED_JOAN
Adelante
1
1
2
SW3E
RB4E
SW4E
SW5E
2
Atras
RB2E
2
Izquierda
SW2E
2
2
SW1E
RB0E
1
RB3E
1
1
RB1E
K
D5E
K
D4E
K
D3E
K
D2E
K
D1E
Parar
Derecha
8.3.2.- Cara de Componentes
y de pistas Top Copper .
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RC0/T1OSO/T1CKI
RA5/AN4/SS
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
9
10
1
2
3
4
5
6
7
VDD
X1E
4MHz
C4E
15pF
PIC16F876_JOAN
8.3.3.- Cara de pistas Bottom Copper .
Ciclo Superior de Desarrollo de Productos Electrónicos
68
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.4.- Baliza
8.4.1.- Esquema Eléctrico.
8.4.2.- Cara de Componentes
y de pistas Top Copper .
8.4.3.- Cara de pistas Bottom Copper .
Ciclo Superior de Desarrollo de Productos Electrónicos
69
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
8.5.- Sensores de infrarrojos
8.5.1.- Esquema Eléctrico.
8.4.2.- Cara de Componentes
y de pistas Top Copper .
8.4.3.- Cara de pistas Bottom Copper .
Ciclo Superior de Desarrollo de Productos Electrónicos
70
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
9.- Diseño mecánico.
9.1.- Carrocería Placa-Robot.
Ciclo Superior de Desarrollo de Productos Electrónicos
71
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
10.- Lista de Componentes.
10.1.- Alimentación del Circuito + Cargador del Programa.
Lista de materiales Fuente y cargador.DSN
Título:
Autor:
Revision:
Creado:
Ultima modificación:
Número de Componentes:
Fuente y cargador. DSN
José Villaverde Gura
lunes, 08 de octubre de 2007
jueves, 29 de noviembre de 2007
22
1 Resistencia.
Cantidad:
1
Referencia
R1
Valor
220
Coste Unitario
0.05
Coste
0.05
Coste Unitario
0.05
0.05
0.30
0.15
Coste
0.05
0.10
0.60
0.60
Coste Unitario
1
2
Coste
2
2
Coste Unitario
0.20
0.20
Coste
0.60
0.20
Coste Unitario
1
0.5
Coste
1
1
1
6
0.5
1
6
0.5
9 Condensadores.
Cantidad:
1
2
2
4
Referencia
C2
C3, C9
C1, C4
C5-C8
Valor
330nF
100nF
220uF
1uF
2 Circuitos Integrados.
Cantidad:
1
1
Referencia
U1
U2
Valor
7805
MAX232
4 Diodos.
Cantidad:
3
1
Referencia
D1-D3
D4
Valor
1N4007
LED-GREEN_JOAN
6 Componentes diversos.
Cantidad:
1
2
Referencia
J1
J2, J3
1
1
1
SW1
Placa C.I.
Zócalo de C.I.
Coste total 1
Valor
CONN-D9M (Macho)
CONN-SIL5 ( Macho- Macho
Cuadrado Acodado)
INT_ENCENDIDO
50x74 cm
16 patillas
Alimentación del Circuito + Cargador de Programa
Ciclo Superior de Desarrollo de Productos Electrónicos
15,70 €
72
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
viernes, 08 de febrero de 2008 18:41:31
10.2.- Control + Potencia + etc.
Lista de materiales fabricar.DSN
Título:
Autor:
Revisión:
Creado:
Ultima modificación:
Número de Componentes:
fabricar.DSN
José Villaverde Gura
jueves, 22 de noviembre de 2007
miércoles, 19 de diciembre de 2007
66
12 Resistencias
Cantidad:
1
1
3
5
2
Referencia
R3
R4
R6,R14,R15
R8-R11, R18
R21, R22
Valor
10k
100
200
330
4,7k
Coste Unitario
0.05
0.05
0.05
0.05
0.05
Coste
0.05
0.05
0.15
0.25
0.10
Valor
15pF
100nF
Coste Unitario
0.05
0.05
Coste
0.10
0.05
Valor
PIC16F876
OPTOCOUPLER-NPN
L298
Coste Unitario
5
0.5
1
Coste
5
0,5
1
Referencia
Q3,Q4
Valor
BD136
Coste Unitario
1
Coste
2
Referencia
D5- D8
D2,D12
D1,D10
D9
Valor
1N4007
LED-YELLOW_JOAN
LED-RED_JOAN
LED-GREEN_JOAN
Coste Unitario
0.20
0.20
0.20
0.20
Coste
0.80
0.40
0.40
0.20
3 Condensadores
Cantidad:
2
1
Referencia
C5, C6
C7
3 Circuitos Integrados.
Cantidad:
1
1
1
Referencia
U2
U3
U4
2 Transistores
Cantidad:
2
9 Diodos.
Cantidad:
4
2
2
1
Ciclo Superior de Desarrollo de Productos Electrónicos
73
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
37 Componentes diversos.
Cantidad:
1
3
2
2
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
4
4
4
Referencia
Conector de BAT1
Conector de CMP1
INICIO, RESET
J2, J3 (Macho-Hembra Cuadrado)
JUMP1 ( Macho-Macho Cuadrado)
Conector de LCD1
LCD1
Conector de MOTOR
MOT_ DER, MOT_IZQ
RF1
Conector de RF2
RF2
RV2
Conector de ULTR1-ULTR3
ULTR1-ULTR3
X1
Placa de C.I.
Zócalo de C.I.
Zócalo de C.I.
Batería
Separadores metálicos Macho-Hembra
Tuercas
Tornillos
Coste total 2
Valor
Bornier 2
CONN-SIL3
PULSADOR
CONN-SIL5
CONN_SIL3
CONN-SIL14
LCD-16 X 2
Bornier 2
9V
ANTENA_JOAN
CONN-SIL15
CEBEK-C-0504_JOAN
10k
CONN-SIL5
SRF08_JOAN
CRYSTAL_JOAN (1 MHz)
100 x 120 cm.
40 patillas
6 patillas
12V/ 2200 mA
Métrica 3
Métrica 3
Métrica 3 x 10 mm.
Coste Unitario
0.30
0.10
0.20
0.15
0.10
0.15
7
0.30
10
0.0
0.5
7
0.30
0.15
35
1
12
0.5
0.5
20
0.5
0.1
0.1
Coste
0.30
0.30
0.40
0.30
0.10
0.15
7
0.30
20
0.0
0.5
7
0.30
0.15
35
1
12
0.5
0.5
20
2
0.4
0.4
119,65 €
Control+Potencia+etc
viernes, 08 de febrero de 2008 18:58:31
10.3.- Baliza
Lista de materiales Baliza.DSN
Título:
Autor:
Revisión:
Creado:
Ultima modificación:
Número de Componentes:
Mando.DSN
José Villaverde Gura
miércoles, 16 de febrero de 2005
viernes, 08 de febrero de 2008
31
4 Resistencias.
Cantidad:
1
1
1
1
Referencia
R2
R4
R5
R13
Valor
120
4.7k
330
13k
Coste Unitario
0.05
0.05
0.05
0.05
Ciclo Superior de Desarrollo de Productos Electrónicos
Coste
0.05
0.05
0.05
0.05
74
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
3 Condensadores.
Cantidad:
1
1
1
Referencia
C1
C2
C3
Valor
100uF
1nF
100nF
Coste Unitario
0.30
0.05
0.05
Coste
0.30
0.05
0.05
Referencia
U1
Valor
NE555
Coste Unitario
1
Coste
1
Referencia
Q1
Valor
BD139
Coste Unitario
1
Coste
1
Referencia
D2(EMISOR
D2
D1
Valor
EMISOR
LED-GREEN_JOAN
1N4007_JOAN
Coste Unitario
2
0.20
0.20
Coste
2
0.20
0.20
Valor
Bornier 2
INTERRUPTOR_JOAN
8 patillas
9V
Métrica 3
Métrica 3
Métrica 3 x 10 mm.
Coste Unitario
0.30
1
0.5
1
0.5
0.1
0.1
0.5
1
Coste
0.30
1
0.5
1
2
0.4
0.4
0.5
1
1 Circuitos Integrados.
Cantidad:
1
1 Transistor.
Cantidad:
1
3 Diodos.
Cantidad:
1
1
1
19 Componentes diversos.
Cantidad:
1
1
1
1
4
4
4
1
1
Referencia
Conector de BAT1E
SW6E
Zócalo de C.I.
Batería de petaca
Separadores metálicos Macho-Hembra
Tuercas
Tornillos
Porta Baterías
Soporte de plástico
Coste total 3
5 x 10 cm.
Baliza
13,90 €
viernes, 08 de febrero de 2008 20:25:59
Ciclo Superior de Desarrollo de Productos Electrónicos
75
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
10.4.- Sensor de infrarrojos
Lista de materiales SFH5110.DSN
Título:
Autor:
Revisión:
Creado:
Ultima modificación:
Número de Componentes:
Sfh5110.DSN
José Villaverde Gura
jueves, 22 de noviembre de 2007
miércoles, 19 de diciembre de 2007
10
4 Resistencias
Cantidad:
2
2
Referencia
R24,R26
R23,R25
Valor
10k
10
Coste Unitario
0.05
0.05
Coste
0.10
0.10
Valor
47uF
Coste Unitario
0.05
Coste
0.10
Valor
CONN-SIL3
SFH5110
Coste Unitario
0.10
1
Coste
0.20
2
2 Condensadores
Cantidad:
2
Referencia
C18, C19
4 Componentes diversos.
Cantidad:
2
2
Referencia
Conector de CMP1
INF3,INF4
Coste total 4
2,50 €
SFH5110
10.5.- Chasis.
Lista de materiales Chasis.DSN
Título:
Autor:
Revisión:
Creado:
Ultima modificación:
Número de Componentes:
Chasis.DSN
José Villaverde Gura
miércoles, 16 de febrero de 2005
viernes, 08 de febrero de 2008
11
11Componentes diversos.
Cantidad:
1
2
2
Referencia
Soporte de plástico
Prolongadores de eje.
Tornillos
Valor
26 x 13 cm
M3x 40
Coste Unitario
2
0.15
0.10
Ciclo Superior de Desarrollo de Productos Electrónicos
Coste
2
0.30
0.20
76
I.E.S. Joan Miró (S.S. de los Reyes) / Dpto. Electrónica
2
4
Tuercas
Arandelas
Coste total 4
M3
M3
0.10
0.05
0.20
0.20
2,90 €
Chasis
viernes, 08 de febrero de 2008 20:25:59
11.- Coste Económico.
11.1.- Desarrollo del Proyecto.
Coste 20 € / Hora.






10 Horas de desarrollo Hardware. ..................................................................
30 Horas de desarrollo Software. ...................................................................
10 Horas de montaje del Prototipo. ................................................................
10 Horas de realización de la Memoria. ........................................................
5 Horas de búsqueda de materiales. ..............................................................
10 Horas de Pruebas. ......................................................................................
200 €
600 €
200 €
200 €
100 €
200 €
______
1500 €
11.2.- Material .




Alimentación del Circuito + Cargador de Programa. .................................. 15,70 €
Control+Potencia+etc. ................................................................................. 119,65 €
Mando. .......................................................................................................... 13,90 €
Chasis….... ..................................................................................................... 2,90 €
_______
152,15 €
Total. ..................................................................................................................... 1652,15 €
12.- Bibliografía.
13.- Anexos.
12.1.- Características Eléctricas del Motor de Corriente Continua.
12.2.- Características Eléctricas Tarjeta Emisora SAW para
Datos 433,92 MHz. ( CEBEK C-0503 ).
12.3.- Características Eléctricas Tarjeta Receptora de
Datos 433,92 MHz. ( CEBEK C-504 ).
12.4.- Características Eléctricas del Sonar SRF08.
12.5.- Características principales del PIC 16F876A.
Ciclo Superior de Desarrollo de Productos Electrónicos
77
Descargar