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