Top Banner
Coche Teledirigido Profesor: Pedro Alonso Sanz Instituto: I.E.S. Joan Miró Localidad: San Sebastián de los Reyes
38

Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

Oct 15, 2018

Download

Documents

lecong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

Coche Teledirigido

Profesor: Pedro Alonso Sanz

Instituto: I.E.S. Joan Miró

Localidad: San Sebastián de los Reyes

Page 2: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

2

Índice Página

1.- Hardware ..................................................................................................................... 2

1.1.- Esquema Eléctrico simulado del Mando y Coche Teledirigido .................................. 3 1.2.- Esquema Eléctrico del Mando ................................................................................... 4 1.3.- Esquema Eléctrico del Coche Teledirigido ................................................................ 5 1.4.- Placa del Mando ........................................................................................................ 6 1.5.- Placa del Coche Teledirigido ..................................................................................... 7 1.6.- Lista de Materiales del Mando. ................................................................................. 8 1.7.- Lista de Materiales del Coche Teledirigido................................................................ 10 1.8.- Carrocería. ................................................................................................................. 12 2.- Software ....................................................................................................................... 13 2.1.- Programa del Mando (TR_CO_1.ASM) ..................................................................... 13

2.1.1.- Diagrama de Flujo ...................................................................................... 13 2.1.2.- Programa del Transmisor del Coche Teledirigido ...................................... 17 2.1.3.- Librería T_M_S_RF.INC ............................................................................ 20 2.1.4.- Librería RETARDOS.INC .......................................................................... 21 2.2.- Programa del Coche Teledirigido (RE_CO_1.ASM) .................................................. 25

2.2.1.- Diagrama de Flujo ...................................................................................... 25 2.2.2.- Programa del Receptor del Coche Teledirigido .......................................... 32

2.2.3.- Librería R_S_M_RF.INC ............................................................................ 36

Page 3: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

3

1.- Hardware.

1.1.- Esquema Eléctrico simulado del Mando y Coche Teledirigido.

Page 4: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

4

1.2.- Esquema Eléctrico del Mando.

Page 5: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

5

1.3.- Esquema Eléctrico del Coche Teledirigido.

Page 6: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

6

1.4.- Placa del Mando.

Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

Page 7: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

7

1.5.- Placa del Coche Teledirigido.

Top Cooper and Top Silk Bottom Cooper

Bottom Cooper (Mirror)

Page 8: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

8

1.6.- Lista de Materiales del Mando.

Lista de materiales del Mando1.DSN

Título : Mando1.DSN

Autor : Pedro Alonso Sanz

Revision :

Fecha de creación : sábado, 16 de septiembre de 2006

Ultima modificación : jueves, 28 de septiembre de 2006

Número de componentes : 36

7 Resistors

Quantity: References Value

6 R1-R6 220

1 R7 2.2k

3 Capacitors

Quantity: References Value

2 C2, C3 15pF

1 C4, C1 220uF

2 Integrated Circuits

Quantity: References Value

1 U1 7805_JOAN

1 U2 PIC16F876_JOAN

1 Transistors

Page 9: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

9

Quantity: References Value

1 Q1 BD136_JOAN

7 Diodes

Quantity: References Value

1 D1 1N4007_JOAN

1 D2 LED-YELLOW_JOAN

1 D3 LED-GREEN_JOAN

4 D4-D7 LED-RED_JOAN

10 Miscellaneous

Quantity: References Value

5 ADELANTE, ATRAS, DERECHA, IZQUIERDA, PARAR PULSADOR_JOAN

1 ANTENA BORNIER1_JOAN

1 E1 CEBEK-C-0503_JOAN

1 ENCENDIDO INTERRUPTOR_JOAN

1 VCC 9V

1 X1 CRYSTAL_JOAN (4 MHz )

sábado, 04 de noviembre de 2006 19:29:35

1.7.- Lista de Materiales del Coche Teledirigido

Lista de materiales Coche Teledirigido 1.DSN

Título : Coche Teledirigido 1.DSN

Page 10: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

10

Autor : Pedro Alonso Sanz

Revision :

Fecha de creación : sábado, 16 de septiembre de 2006

Ultima modificación : jueves, 28 de septiembre de 2006

Número de componentes : 36

9 Resistors

Quantity: References Value

1 R1 220

1 R2 68

1 R3 470

1 R4 47k

5 R5-R9 220

3 Capacitors

Quantity: References Value

1 C1,C4 220uF

2 C2, C3 15pF

3 Integrated Circuits

Quantity: References Value

1 U1 PIC16F876_JOAN

1 U2 L298

1 U4 7805_JOAN

1 Transistors

Quantity: References Value

1 Q1 BD136_JOAN

Page 11: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

11

12 Diodes

Quantity: References Value

5 D1, D3-D6 1N4007_JOAN

2 D2, D11 LED-RED_JOAN

2 D7, D9 LED-YELLOW_JOAN

2 D8, D10 LED-GREEN_JOAN

1 D12 DIODO_ZENER_JOAN (6.8V)

8 Miscellaneous

Quantity: References Value

1 ANTENA (17 CM) BORNIER1_JOAN

1 BAT1 12V

1 MOTOR DC 12V

1 RF1 CEBEK-C-0504_JOAN

1 SERVOMOTOR SERVOMOTOR-PWM_JOAN

1 SW1 INTERRUPTOR_JOAN

1 SW2 PULSADOR_JOAN

1 X1 CRYSTAL_JOAN

martes, 17 de octubre de 2006 23:17:25

1.8.- Carrocería.

Page 12: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

12

Page 13: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

13

2.- Software

2.1.- Programa del Mando (TR_CO_1.ASM) 2.1.1.- Diagrama de Flujo del Transmisor del Coche Teledirigido

¿ PB0 =1 ?

VELOCIDAD_MAS

NO

SI

¿ PB1 =1 ?

IZQUIERDA

NO

SI

¿ PB2 =1 ?

PARAR

NO

SI

¿ PB3 =1 ?

VELOCIDAD_MENOS

NO

SI

¿ PB4 =1 ?

DERECHA

NO

SI

; Principal PC3 1 ;Inhabilitar Tarjeta de radiofrecuencia

Retardo_100mS

1

Sección de código de Reset ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Transmisor Coche Teledirigido

TR_C0_1.ASM

Elegimos PIC List p=16f876 , f=inhx32

Asignación de nombres de RFS a direcciones.

#include <p16f876.inc>

; Registros CBLOCK 0X20 VELOCIDAD POSICION ENDC

Sección de Configuración

ORG 0x05 ; Inicio de Programa

COMIENZO

RP0 1 ; Ir al Banco 1 TRISB 11111111 B ; Poner el Puerto B como entrada de datos. TRISC(3) 0 ; Poner el PC3 como salida de datos. RP0 0 ; Ir al Banco 0

POSICIÓN #POS_CENTRAL ; Posición central del Servomotor VELOCIDAD #VEL_CERO ; Motor tractor parado.

CONFIGURACION_TRANS_SERIE

1

; Igualdades MAX_VEL_ADE = D'248' ; Máxima velocidad hacia adelante. MAX_VEL_ATR = D’0’ ; Máxima velocidad hacia atrás. VEL_CERO = D’128’ ; Velocidad cero. INC_VEL = D’8’ ; Incremento de velocidad. POS_MAX_DE = D’28’ ; Posición máxima del Servo hacia la derecha. POS_MAX_IZ = D’9’ ; Posición máxima del Servo hacia la Izquierda. POS_CENTRAL = D’19’ ; Posición central del Servomotor. INC_POS = D’1’ ; Incremento de posición. LLAVE_VELOCIDAD = D'205' ; LLave Velocidad. LLAVE_POSICION = D'121 ; LLave Posición.

Page 14: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

14

Subrutina de VELOCIDAD_MAS

¿ VELOCIDAD = MAX_VEL_ADE ?

; Incrementar la velocidad VELOCIDAD VELOCIDAD + #INC_VEL

; Lanzar código de velocidad vía radiofrecuencia

LANZAR_VELOCIDAD

RETURN

SI

NO

Subrutina de VELOCIDAD_MENOS

¿ VELOCIDAD = MAX_VEL_ATR ?

;Decrementar la velocidad VELOCIDAD VELOCIDAD - #INC_VEL

; Lanzar código de velocidad vía radiofrecuencia

LANZAR_VELOCIDAD

RETURN

SI

NO

Subrutina de PARAR

; Parar Coche VELOCIDAD #VEL_CERO

; Lanzar código de velocidad vía radiofrecuencia

LANZAR_VELOCIDAD

RETURN

Subrutina de DERECHA

¿ POSICION = POS_MAX_DE ?

; Incrementar la posición. POSICION POSICION + #INC_POS

; Lanzar código de posición vía radiofrecuencia

LANZAR_POSICION

RETURN

SI

NO

Subrutina de IZQUIERDA

¿ POSICION = POS_MAX_IZ ?

; Decrementar la posición. POSICION POSICION - #INC_POS

; Lanzar código de posición vía radiofrecuencia

LANZAR_POSICION

RETURN

SI

NO

Page 15: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

15

Subrutina de LANZAR_VELOCIDAD

; Cargar llave de velocidad LLAVE_ENTRADA #LLAVE_VELOCIDAD

; Lanzar código de velocidad vía radiofrecuencia

LANZAR_DATO_SERIE

RETURN

; Cargar en W el contenido de VELOCIDAD

W VELOCIDAD

Subrutina de LANZAR_POSICION

; Cargar llave de posición.

LLAVE_ENTRADA #LLAVE_POSICION

; Lanzar código de velocidad vía radiofrecuencia

LANZAR_DATO_SERIE

RETURN

; Cargar en W el contenido de POSICION

W POSICION

Librería de Transmisión de datos (Carga en el W el dato a transmitir)

(Cargar la llave de entrada en el registro LLAVE_ENTRADA)

T_M_S_RF.INC

; Igualdades TODOCERO = 00000000 B

; Registros CBLOCK DATO_TRANSMITIDO CONTADOR_TRANSMISIÓN LLAVE-ENTRADA ENDC

;Sección de Configuración CONFIGURACION_TRANS_SERIE RPO 1 ; Ir al Banco 1 SPBRG D’39’ ; Cargar la Velocidad de Transmisión de Datos

Baud Rate = Fosc/(64(X+1)) Baud Rate = 4MHz/(64(39+1)) = 1562,5 BIT por segundo

TXSTA 00100000 B ; Configuración de la transmisión

serie de datos (Modo Asíncrono y baja velocidad.

RP0 0 ; Ir al Banco 0 SPEN 1 ;Activamos la Puerta Serie (TX)

RETURN

2

Page 16: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

16

2

LANZAR_DATO_SERIE DATO _ TRANSMITIDO W

; Cargar el número de transmisión CONTADOR_TRANSMISIÓN D’10’

; Lanzar TODOCERO TXREG #TODOCERO

¿ Ha terminado la transmisión ?

¿ TRMT = 1 ?

SI

NO

; Lanzar LLAVE_ENTRADA TXREG #LLAVE_ENTRADA

¿ Ha terminado la transmisión ?

¿ TRMT = 1 ?

NO

SI

; Lanzar DATO_TRANSMITIDO TXREG #DATO_TRANSMITIDO

¿ Ha terminado la transmisión ?

¿ TRMT = 1 ?

SI NO

; Decrementar el registro CONTADOR_TRANSMISION CONTADOR_TRANSMISION CONTADOR_TRANSMISIÓN - 1

¿ CONTADOR_TRANSMISIÓN = 0 ?

RETURN

NO

SI

Page 17: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

17

2.1.2.- Programa del Transmisor del Coche Teledirigido

title " Transmisor Coche Teledirigido"

;***************************** Leer el Puerto B y transmitirlo vía serie ********************************* ;Programa para PIC 16F876. ;Velocidad del Reloj: 4 MHz. ;Reloj instrucción: 1 MHz = 1uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT. ;Protección de Código: OFF. ;**************************** Elegimos PIC *************************************************************** list p=16f876, f=inhx32 ;********** Asignación de etiquetas 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 el directorio ; con el nombre MPASM ;******************************************* Igualdades *************************************************** MAX_VEL_ADE EQU D'248' ; Máxima velocidad hacia adelante. MAX_VEL_ATR EQU D’0’ ; Máxima velocidad hacia atrás. VEL_CERO EQU D’128’ ; Velocidad cero. INC_VEL EQU D’8’ ; Incremento de velocidad. POS_MAX_DE EQU D’28’ ; Posición máxima del Servo hacia la derecha. POS_MAX_IZ EQU D’9’ ; Posición máxima del Servo hacia la Izquierda. POS_CENTRAL EQU D’19’ ; Posición central del Servomotor. INC_POS EQU D’1’ ; Incremento de posición. LLAVE_VELOCIDAD EQU D'205' ; LLave Velocidad. LLAVE_POSICION EQU D'121’ ; LLave Posición. ;******************************************** Registros **************************************************** CBLOCK 0X20 VELOCIDAD POSICION ENDC ;************************************ Sección Código de Reset ****************************************** ORG 0X00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa ;************************************ Sección de Configuración *****************************************

ORG 0X05 ; Inicio de Programa ;(Una posición detrás del vector de Interrupción) COMIENZO CALL CONFIGURACION_TRANS_SERIE BSF STATUS,RP0

Page 18: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

18

MOVLW B'11111111' MOVWF TRISB BCF TRISC,3 BCF STATUS,RP0 MOVLW POS_CENTRAL ; Posición central del Servomotor

(Dirección). MOVWF POSICION MOVLW VEL_CERO ; Motor tractor parado. MOVWF VELOCIDAD ;**************************************** Principal ********************************************************* ;********** Testeo de los Micropulsadores de Velocidad y lanzamiento de su información.********* SEG1 BSF PORTC,3 ; Inhabilitar tarjeta de Radiofrecuencia. ; CALL Retardo_100ms BTFSS PORTB,0 ; ¿Aumentamos velocidad? CALL VELOCIDAD_MAS BTFSS PORTB,1 ; ¿Vamos hacia la izquierda? CALL IZQUIERDA BTFSS PORTB,2 ; ¿Paramos? CALL PARAR BTFSS PORTB,3 ; ¿Disminuimos la velocidad? CALL VELOCIDAD_MENOS BTFSS PORTB,4 CALL DERECHA ; ¿Vamos hacia la derecha? GOTO SEG1 ;*************************** Subrutina de VELOCIDAD_MAS ****************************************** VELOCIDAD_MAS MOVF VELOCIDAD,W ; ¿Hemos llegado a la máxima

Velocidad hacia adelante? SUBLW MAX_VEL_ADE BTFSC STATUS,Z GOTO SALIR_VEL_MAS MOVLW INC_VEL ; Incrementar la velocidad . ADDWF VELOCIDAD,F CALL LANZAR_VELOCIDAD ; Lanzar el código de velocidad vía

radiofrecuencia. SALIR_VEL_MAS RETURN ;*************************** Subrutina de VELOCIDAD_MENOS *************************************** VELOCIDAD_MENOS MOVF VELOCIDAD,W ; ¿Hemos llegado a la máxima

Velocidad hacia atrás? SUBLW MAX_VEL_ATR BTFSC STATUS,Z GOTO SALIR_VEL_MENOS MOVLW INC_VEL ; Decrementar la velocidad. SUBWF VELOCIDAD,F CALL LANZAR_VELOCIDAD ; Lanzar el código de velocidad vía

radiofrecuencia SALIR_VEL_MENOS RETURN

Page 19: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

19

;************************** Subrutina de PARAR ******************************************************** PARAR MOVLW VEL_CERO ; Parar el coche. MOVWF VELOCIDAD CALL LANZAR_VELOCIDAD ; Lanzar el código de velocidad vía

radiofrecuencia RETURN ;*************************** Subrutina de DERECHA **************************************************** DERECHA MOVF POSICION,W ; ¿Hemos llegado a la máxima

posición hacia la derecha? SUBLW POS_MAX_DE BTFSC STATUS,Z GOTO SALIR_DER MOVLW INC_POS ; Incrementar posición. ADDWF POSICION,F CALL LANZAR_POSICION ; Lanzar el código de posición vía

radiofrecuencia SALIR_DER RETURN ;*************************** Subrutina de IZQUIERDA ************************************************** IZQUIERDA MOVF POSICION,W ; ¿Hemos llegado a la máxima

posición hacia la izquierda? SUBLW POS_MAX_IZ BTFSC STATUS,Z GOTO SALIR_IZQ MOVLW INC_POS ; Decrementar posición. SUBWF POSICION,F CALL LANZAR_POSICION ; Lanzar el código de posición vía

radiofrecuencia SALIR_IZQ RETURN ;*************************** Subrutina de LANZAR_VELOCIDAD ************************************** LANZAR_VELOCIDAD BCF PORTC,3 ; Habilitar tarjeta de Radiofrecuencia. MOVLW LLAVE_VELOCIDAD ; Cargar llave de velocidad. MOVWF LLAVE_ENTRADA MOVF VELOCIDAD,W CALL LANZAR_DATO_SERIE ; Lanzar datos vía radiofrecuencia. RETURN ;*************************** Subrutina de LANZAR_POSICION **************************************** LANZAR_POSICION BCF PORTC,3 ; Habilitar tarjeta de Radiofrecuencia. MOVLW LLAVE_POSICION ; Cargar llave de posición. MOVWF LLAVE_ENTRADA MOVF POSICION,W CALL LANZAR_DATO_SERIE ; Lanzar datos vía radiofrecuencia. RETURN ;*************************** Librerias ********************************************************************** INCLUDE <T_M_S_RF.INC> INCLUDE <RETARDOS.INC> END

Page 20: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

20

2.1.3.- Librería T_M_S_RF.INC ; Librería de Transmisor SERIE vía Radiofrecuencia para una Tarjeta ; Emisora SAW para Datos 433,92 MHz. ( CEBEK C-0503 ) ; Cargar la llave de entrada en el registro LLAVE_ENTRADA ; Cargar en W el dato a transmitir

;***************************** Igualdades **************************************************************** TODOCERO EQU B'00000000' ;(Dato). Llave para iniciar un código, la tarjeta de ; transmisión de datos necesita el pulso de STOP para ; transmitir un código. ;***************************** Registros ******************************************************************* CBLOCK DATO_TRANSMITIDO CONTADOR_TRANSMISION LLAVE_ENTRADA ENDC ;**************************** Sección de Configuración ************************************************* CONFIGURACION_TRANS_SERIE BCF STATUS,RP1 ; Ir al Banco 1. BSF STATUS,RP0 MOVLW D'39' MOVWF SPBRG ; Cargar la Velocidad de Transmisión de

Datos. ; BR = (Fosc/64(X+1))

BR = (4MHz/64(39+1)) = 1562,5 Hz MOVLW B'00100000' MOVWF TXSTA ; Configuración de la Transmisión Serie. BCF STATUS,RP0 ; Ir al Banco 0. BCF STATUS,RP1 BSF RCSTA,SPEN ;Activamos la Puerta Serie (TX). RETURN ;*************************** Lanzar Llaves y Muestra Digital ****************************************** LANZAR_DATO_SERIE MOVWF DATO_TRANSMITIDO MOVLW d'10' MOVWF CONTADOR_TRANSMISION MOVLW TODOCERO ;Lanzar llave TODOCERO. MOVWF TXREG ;Transmisión de Datos en Serie. BSF STATUS,RP0 SEG1_TRANSMISION BTFSS TXSTA,TRMT ;Preguntamos si se ha transmitido el dato. GOTO SEG1_TRANSMISION REPETIR_TRANSMISION BCF STATUS,RP0 ;Lanzar llave LLAVE_ENTRADA.

Page 21: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

21

MOVF LLAVE_ENTRADA,W MOVWF TXREG ;Transmisión de Datos en Serie. BSF STATUS,RP0 SEG2_TRANSMISION BTFSS TXSTA,TRMT ;Preguntamos si se ha transmitido el dato. GOTO SEG2_TRANSMISION BCF STATUS,RP0 ;Lanzar DATO_TRANSMITIDO. MOVF DATO_TRANSMITIDO,W MOVWF TXREG ;Transmisión de Datos en Serie. BSF STATUS,RP0 SEG3_TRANSMISION BTFSS TXSTA,TRMT ;Preguntamos si se ha transmitido el dato. GOTO SEG3_TRANSMISION BCF STATUS,RP0 DECFSZ CONTADOR_TRANSMISION,F GOTO REPETIR_TRANSMISION RETURN

2.1.4.- Librería 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 ; Contadores para los retardos. R_ContB R_ContC 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 ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina.

Page 22: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

22

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 ; Aporta 1 ciclo máquina. movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina. movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_20micros ; 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 ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto Rmicros_Bucle ; 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. ------------------------------------------------------------------------------ ; Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Page 23: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

23

Retardo_1ms ; 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' ; Aporta Mx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta Mx1 ciclos máquina. R1ms_BucleInterno nop ; Aporta KxMx1 ciclos máquina. decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar). goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina. decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ;En total estas subrutinas tardan: ; - 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' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_10s ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_5s ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_2s ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_1s ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; 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' ; Aporta Nx1 ciclos máquina. Este es el valor de "M". movwf R_ContB ; Aporta Nx1 ciclos máquina.

Page 24: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

24

R1Decima_BucleExterno movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta MxNx1 ciclos máquina. R1Decima_BucleInterno nop ; Aporta KxMxNx1 ciclos máquina. decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar). goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina. decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar). goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina. decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ;En total estas subrutinas tardan: ; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s. ; (N=200, M=100 y K=249). ; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s. ; (N=100, M=100 y K=249). ; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s. ; (N= 50, M=100 y K=249). ; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s. ; (N= 20, M=100 y K=249). ; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s. ; (N= 10, M=100 y K=249). ; - Retardo_500ms: 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 ; ===================================================================

Page 25: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

25

2.2.- Programa del Coche Teledirigido (RE_CO_1.ASM)

2.2.1.- Diagrama de Flujo

Receptor del Coche Teledirigido

RE_CO_1.ASM

Elegimos PIC List p=16f876 , f=inhx32

Asignación de nombres de RFS a direcciones.

#include <p16f876.inc>

; Igualdades POS_CENTRAL = D'19' ; Posición central del Servomotor. VEL_CERO_INI = D'255' ; Velocidad cero. LLAVE_VELOCIDAD = D'205' ;Llave Velocidad. LLAVE_POSICION = D'121' ;Llave Posición. PERIODO = D’255’ ;Representa el Periodo

de la señal de PWM.

; Registros CBLOCK 0X20 VELOCIDAD POSICION W_TEMP STATUS_TEMP RCREG_GUARDA ENDC

Sección de código de Reset ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

1

Vector de Interrupción ORG 04H

GOTO INTERRUPCION

1

Sección de Configuración ORG 0X05H

COMIENZO RP0 1 ; Ir al Banco 1

TRISB 00000000 B ; Poner Puerto B como salida de dato

TRISC 00000000 B ; Poner Puerto C como salida de dato RP0 0 ; Ir al Banco 0 PORTC 00000000 B ; Limpiar el Puerto C.

CONFIGURACION_RECEP_SERIE

RP0 1 ; Ir al Banco 1 PR2 #PERIODO ; Cargamos el Periodo de

la señal de PWM. RP0 0 ; Ir al Banco 0 T2CON 00000111 B ;Cargamos el Valor

Preescalar. (PWM INTERNO) CCP1CON 00001100 B ;Cargamos los 2 BIT menos significativos del

nivel Alto de la Señal PWM y configuramos y lanzamos el PWM.

Salida de señal por RC2 CCP2CON 00001100 B ;Cargamos los 2 BIT

menos significativos del nivel Alto de la Señal PWM y configuramos y lanzamos el PWM.

Salida de señal por RC1 POSICION #POS_CENTRAL ;Posicionamos el

Servo en el centro. VELOCIDAD #VEL_CERO_INI ;Posicionamos el

Servo en el centro. PORTB 11111101 B ;Activamos el Led de Parada.

; Principal

CCPR1L POSICION ; Nivel Alto de la señal PWM

(Salida por RC2) (Rueda delantera).

CCPR2L VELOCIDAD ; Nivel Alto de la señal PWM

(Salida por RC1) (Ruedas tractoras).

Retardo 20 ms

Page 26: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)
Page 27: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

27

RETFIE

Rutina de Interrupción INTERRUPCION

¿ RCIF = 1?

; Salvar Registros W_TEMP W STATUS_TEMP STATUS

RETFIE

NO

SI

; Guardamos el registro RCREG RCREG_GUARDA RCREG

¿Ha llegado la llave de velocidad?

¿ RCREG =

LLAVE_VELOCIDAD ?

;Ir a la subrutina de Velocidad

SUBR_VELOCIDAD

¿Ha llegado la llave de posición?

¿ RCREG_GUARDA = LLAVE_POSICION ?

;Ir a la subrutina de Posición

SUBR_POSICION

; Recuperar Registros STATUS STATUS_TEMP W W_TEMP

SI

NO

SI

NO

Page 28: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

28

Subrutina SUBR_VELOCIDAD

El Dato se queda cargado en el registro DATO_SERIE_VALIDO

RECEPCION_DATO_SERIE

;Cargar la llave de velocidad en llave de entrada

LLAVE_ENTRADA LLAVE_VELOCIDAD

¿DATO_SERIE_VALIDO = 128?

¿DATO_SERIE_VALIDO > 128?

¿DATO_SERIE_VALIDO < 128?

;Complementar el código a 128

VELOCIDAD 128 - VELOCIDAD

;Multiplicar por 2 el contenido del registro VELOCIDAD

VELOCIDAD 2 X VELOCIDAD

VEL_CERO

MA_128

ME_128

SI

SI

SI

NO

NO

NO

RETURN

Subrutina MA_128

; Transformamos los códigos del registro comprendidos entre 129 y 255 en códigos de 1 a 127 y los cargamos en el registro VELOCIDAD. DATO_SERIE_VALIDO (7) 0 VELOCIDAD DATO_SERIE_VALIDO

;Inversor de giro hacia adelante

PC3 1 PC4 0 PC5 1

;Activar led de señalización PB3 0 ; Led Adelante ON. PB2 1 ; Led Atras OFF. PB1 1 ; Led Parada OFF.

RETURN

Page 29: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

29

Subrutina ME_128

; Transformamos los códigos del registro DATO_SERIE_VALIDO comprendidos entre 0 y 127 en códigos de 128 a 1 y los cargamos en el registro VELOCIDAD.

VELOCIDAD <- 128 - DATO_SERIE_VALIDO

;Inversor de giro hacia atrás

PC3 0 PC4 1 PC5 1

;Activar led de señalización PB3 1 ; Led Adelante OFF. PB2 0 ; Led Atras ON. PB1 1 ; Led Parada OFF.

RETURN

Subrutina SUBR_POSICION

El Dato se queda cargado en el registro DATO_SERIE_VALIDO

RECEPCION_DATO_SERIE

;Cargar la llave de posición en llave de entrada

LLAVE_ENTRADA LLAVE_POSICION

¿POSICION = #POS_CENTRAL?

¿POSICION > #POS_CENTRAL?

¿POSICION < #POS_CENTRAL?

SI

SI

SI

NO

NO

NO

RETURN

;Cargar el dato serie valido en posición.

POSICION DATO_SERIE_VALIDO

;Activar led de señalización PB4 1 ; Led Izquierda OFF. PB0 0 ; Led Derecha ON.

;Activar led de señalización PB4 0 ; Led Izquierda ON. PB0 1 ; Led Derecha OFF.

;Desactivar led de señalización PB4 1 ; Led Izquierda OFF. PB0 1 ; Led Derecha OFF.

Subrutina VEL_CERO

;Cargamos 1 en el registro velocidad

VELOCIDAD 1

;Inversor de giro desactivado

PC3 0 PC4 0 PC5 0

;Activar led de señalización PB3 1 ; Led Adelante OFF. PB2 1 ; Led Atras OFF. PB1 0 ; Led Parada ON.

RETURN

Page 30: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

30

R_S_M_RF.INC

; Igualdades

; Registros CBLOCK DATO_SERIE1 DATO_SERIE2 DATO_SERIE_VALIDO LLAVE_ENTRADA ENDC

Sección de Configuración

CONFIGURACION_RECEP_SERIE RP0 1 ; Ir al Banco 1 BRGH 0 ;Trabajar con velocidad baja de

recepción. SPBRG D’9’ ; Cargar la velocidad de

Transmisión de datos Baud Rate = Fosc/(64(X+1)) Baud Rate = 1MHz/(64(9+1)) = 1562,5 BIT por segundo

SYNC 0 ; Habilitamos la recepción

asíncrona. INTCON 11000000 B ; Habilitar la Interrupción serie PIE1 00100000 B ; Habilitar la Interrupción serie RP0 0 ; Ir al Banco 0 RCSTA 10010000 B ; Configurar y lanzar la recepción

serie (Habilitar puerto serie, 8 BIT y recepción continua).

RETURN

2

Page 31: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

31

SI

;Validamos los datos recibidos DATO_SERIE_VALIDO DATO_SERIE1

RETURN

;Borramos flag de Recepción

RCIF 0

; Guardamos el dato segundo

DATO_SERIE2 RCREG

¿ Son iguales los datos recibidos ?

¿ DATO_SERIE1 = DATO_SERIE2 ?

¿ Ha llegado un nuevo dato ?

¿ RCIF = 1 ?

SI

; Guardamos el dato primero

DATO_SERIE1 RCREG

; Borramos flag de Recepción

RCIF 0

¿ Ha llegado la llave de entrada ? ¿ RCREG = LLAVE_ENTRADA ?

; Borramos flag de Recepción

RCIF 0

SI

2

¿ Ha llegado un nuevo dato ?

¿ RCIF = 1 ?

NO

NO

NO

SI

NO

RECEPCION_DATO_SERIE RCIF 0 ; Borramos flag de Recepción

Page 32: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

32

2.2.2.- Programa del Receptor del Coche Teledirigido title " Receptor Coche Teledirigido " ;Programa para PIC 16F876a. ;Velocidad del Reloj = 1 MHz. ;Reloj instrucción: 250 kHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT. ;Protección de Código: OFF. ;****************************************** Elegimos PIC ************************************************* list p=16f876, f=inhx32 ;*************** Asignación de etiquetas 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 el directorio ; con el nombre MPASM. ;******************************************** Igualdades ************************************************** POS_CENTRAL EQU D'19' ; Posición central del Servomotor. VEL_CERO_INI EQU D'255' ; Velocidad cero. LLAVE_VELOCIDAD EQU D'205' ;Llave Velocidad. LLAVE_POSICION EQU D'121' ;Llave Posición. PERIODO EQU D’255’ ;Representa el Periodo de la la señal de PWM. ;*********************************** Registros ************************************************************* CBLOCK 0X20 VELOCIDAD POSICION W_TEMP ;Registro de salvaguarda de la Rutina de Interrupción. STATUS_TEMP RCREG_GUARDA ENDC ;********************************** Sección Código de Reset ******************************************** ORG 0X00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa ;************************************* Vector de Interrupción ******************************************** ORG 0X04 GOTO INTERRUPCION ;Vector de Interrupción. ;************************************ Sección de Configuración ***************************************** ORG 0X05 ;Inicio de Programa ;(Una posición detrás del vector de Interrupción).

Page 33: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

33

COMIENZO BSF STATUS,RP0 ; Ir al Banco 1. CLRF TRISB ; Poner el PORTB como salida de datos. CLRF TRISC ; Poner el PORTC como salida de datos. BCF STATUS,RP0 ; Ir al Banco 0. CLRF PORTC ; Limpiar el PORTC. CALL CONFIGURACION_RECEP_SERIE ;Configuración de la Recepción

serie. BSF STATUS,RP0 ; Ir al Banco 1.

MOVLW PERIODO ; Cargamos el Periodo de la señal de PWM. MOVWF PR2 BCF STATUS,RP0 ; Ir al Banco 0.

MOVLW B'00000111' ;Cargamos el Valor Preescalar.(PWM INTERNO) MOVWF T2CON MOVLW B'00001100' ;Cargamos los 2 BIT menos significativos del nivel ;Alto de la Señal PWM y configuramos y lanzamos

PWM. MOVWF CCP1CON ;Salida de señal por RC2 MOVLW B'00001100' ;Cargamos los 2 BIT menos significativos del nivel ;Alto de la Señal PWM y configuramos y lanzamos

PWM. MOVWF CCP2CON ;Salida de señal por RC1 MOVLW POS_CENTRAL ;Posicionamos el Servo en el centro. MOVWF POSICION MOVLW VEL_CERO_INI ;El coche esta parado. MOVWF VELOCIDAD MOVLW B'11111101' ;Activamos el Led de Parada. MOVWF PORTB ;******************************************** Principal ***************************************************** PRINCIPAL MOVF POSICION,W MOVWF CCPR1L ; Nivel Alto de la señal PWM (Salida por RC2)

(Rueda delantera). MOVF VELOCIDAD,W MOVWF CCPR2L ; Nivel Alto de la señal PWM.(Salida por RC1)

(Ruedas tractoras). CALL Retardo_20ms ; Tiene que transcurrir un periodo antes de refrescar

; el nivel alto de la señal. GOTO PRINCIPAL ;**************************************** Rutina de Interrupción ***************************************** INTERRUPCION BTFSS PIR1,RCIF ; Detectamos si ha interrumpido la Recepción Serie. RETFIE SALVAR MOVWF W_TEMP ; Salvamos Registros SWAPF STATUS,W MOVWF STATUS_TEMP MOVF RCREG,W ;Guardamos el registro RCREG. MOVWF RCREG_GUARDA XORLW LLAVE_VELOCIDAD ;Preguntamos si ha llegado la

Page 34: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

34

BTFSS STATUS,Z "LLAVE_VELOCIDAD". GOTO IR_POSICION CALL SUBR_VELOCIDAD ;Ir a la subrutina de Velocidad GOTO RECUPERAR IR_POSICION MOVF RCREG_GUARDA,W ;Preguntamos si ha llegado la

"LLAVE_POSICION". XORLW LLAVE_POSICION BTFSC STATUS,Z CALL SUBR_POSICION ;Ir a la subrutina de Posición. RECUPERAR SWAPF STATUS_TEMP,W ;Recuperamos Registros. MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W RETFIE ;Retorno de Interrupción. ;********************************* Subrutina SUBR_VELOCIDAD ************************************** SUBR_VELOCIDAD MOVLW LLAVE_VELOCIDAD ;Cargar la LLAVE_VELOCIDAD

en el registro LLAVE_ENTRADA. MOVWF LLAVE_ENTRADA CALL RECEPCION_DATO_SERIE ;Ir a la subrutina de recepción

de datos serie. COMPARACION MOVLW D'128' ;Si DATO_SERIE_VALIDO = 128 ir a la

Subrutina de VELOCIDAD _ CERO. SUBWF DATO_SERIE_VALIDO,W BTFSC STATUS,Z GOTO VELOCIDAD_CERO BTFSC STATUS,C ;Si DATO_SERIE_VALIDO < 128 ir a la

Subrutina de ME_128. GOTO MAYOR_128 ;Si DATO_SERIE_VALIDO > 128 ir a la

Subrutina de MA_128. GOTO MENOR_128 MAYOR_128 CALL MA_128 GOTO SAL_VELOCIDAD MENOR_128 CALL ME_128 GOTO SAL_VELOCIDAD VELOCIDAD_CERO CALL VEL_CERO SAL_VELOCIDAD MOVF VELOCIDAD,W ;VELOCIDAD <- 128-VELOCIDAD

;(Complementar el código a 128) SUBLW D'128' ;Esto es debido a que el TRT del

;circuito se satura con cero. MOVWF VELOCIDAD RLF VELOCIDAD,F ;VELOCIDAD <- VELOCIDAD * 2

;(Multiplicar por 2 la Velocidad) RETURN ;Esto es debido a que el registro

;CCPR2L va de 0 a 255. ;************************************* Subrutina VEL_CERO ******************************************** VEL_CERO MOVLW D'1' ;Cargamos 1 en el registro VELOCIDAD. MOVWF VELOCIDAD BCF PORTC,3 ;Inversor de giro esta desactivado. BCF PORTC,4 BCF PORTC,5

Page 35: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

35

BSF PORTB,3 ;Led Adelante OFF. BSF PORTB,2 ;Led Atras OFF. BCF PORTB,1 ;Led Parada ON. RETURN ;****************************************** Subrutina MA_128 ******************************************* MA_128 BCF DATO_SERIE_VALIDO,7 ; Transformamos los códigos

; del registro DATO_SERIE_VALIDO MOVF DATO_SERIE_VALIDO,W ; comprendidos entre 129 y 255 en

; códigos de 1 a 127 y los cargamos MOVWF VELOCIDAD ; en el registro VELOCIDAD. BSF PORTC,3 ; Inversor de giro hacia adelante. BCF PORTC,4 BSF PORTC,5 BCF PORTB,3 ;Led Adelante ON. BSF PORTB,2 ;Led Atras OFF. BSF PORTB,1 ;Led Parada OFF. RETURN ;******************************************** Subrutina ME_128 ***************************************** ME_128 MOVF DATO_SERIE_VALIDO,W ; Transformamos los códigos del

; registro DATO_SERIE_VALIDO SUBLW D'128' ; comprendidos entre 0 y 127 en

; códigos de 128 a 1 MOVWF DATO_SERIE_VALIDO MOVF DATO_SERIE_VALIDO,W MOVWF VELOCIDAD ; VELOCIDAD <- 128 - DATO_SERIE_VALIDO BCF PORTC,3 ; Inversor de giro hacia atrás. BSF PORTC,4 BSF PORTC,5 BSF PORTB,3 ;Led Adelante OFF. BCF PORTB,2 ;Led Atras ON. BSF PORTB,1 ;Led Parada OFF. RETURN ;************************************* Subrutina SUBR_POSICION ************************************* SUBR_POSICION MOVLW LLAVE_POSICION ;Cargar la LLAVE_POSICION

en el registro LLAVE_ENTRADA.

MOVWF LLAVE_ENTRADA CALL RECEPCION_DATO_SERIE ;Ir a la subrutina de recepción

de datos serie. MOVF DATO_SERIE_VALIDO,W ;Cargar el

DATO_SERE_VALIDO en POSICION.

MOVWF POSICION MOVLW POS_CENTRAL ;Preguntamos si estamos en la

posición central

SUBWF POSICION,W ;Si POSICION = #POS_CENTRAL ir a

Page 36: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

36

CENTRO. BTFSC STATUS,Z GOTO CENTRO BTFSC STATUS,C ;Si POSICION < #POS_CENTRAL ir a

DERECHA. GOTO DERECHA ;Si POSICION > #POS_CENTRAL ir a IZQUIERDA. GOTO IZQUIERDA DERECHA BSF PORTB,4 ;Led Izquierda OFF. BCF PORTB,0 ;Led Derecha ON. GOTO SALIR_POSICION IZQUIERDA BCF PORTB,4 ;Led Izquierda ON. BSF PORTB,0 ;Led Derecha OFF. GOTO SALIR_POSICION CENTRO BSF PORTB,4 ;Led Izquierda OFF. BSF PORTB,0 ;Led Derecha OFF. SALIR_POSICION RETURN ;*********************************************** Librerías ************************************************** INCLUDE <R_M_S_RF.INC> INCLUDE <RETARDOS.INC>

END

2.2.3.- Librería R_S_M_RF.INC ; Librería Receptor SERIE vía Radiofrecuencia para una Tarjeta Emisora ; SAW ; para Datos 433,92 MHz. ( CEBEK C-0504 ) ; La Llave de entrada aleatoria. ; Los datos se validan si llegan dos datos idénticos consecutivos. ; El dato recibido se carga en el registro DATO_SERIE_VALIDO ; ;Si se reciben dos datos consecutivos se valida el dato. ; Esta configurada la Interrupción en Recepción Serie. Es necesario cargar el Vector de interrupción ; ORG 0X04 ; GOTO INTERRUPCION ; Se pregunta primero en la rutina de interrupción serie que llave de entrada ha llegado y se carga la llave de entrada que corresponda. (Ejemplo Proyecto de Transmisión de datos) ; La Subrutina de Recepción Serie devuelve el dato valido en el Registro DATO_SERIE_VALIDO ;**************************** Igualdades ****************************************************************** ;**************************** Registros******************************************************************** CBLOCK DATO_SERIE1 DATO_SERIE2 DATO_SERIE_VALIDO LLAVE_ENTRADA ENDC

Page 37: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

37

;**************************** Sección de Configuración ************************************************* CONFIGURACION_RECEP_SERIE BSF STATUS,RP0 ; Banco 1 BCF STATUS,RP1 BCF TXSTA,BRGH ;Trabajar con velocidad baja de

recepción. BSF TRISC,7

MOVLW D'39' ; Cargar la Velocidad de Recepción de Datos.

MOVWF SPBRG BCF TXSTA,SYNC MOVLW B'11000000' ;Habilitar Interrupción Serie MOVWF INTCON MOVLW B'00100000' ;Habilitar Interrupción Serie MOVWF PIE1 BCF STATUS,RP0 ; Banco 0 BCF STATUS,RP1 MOVLW B'10010000' ; Configurar y lanzar la

Recepción Serie MOVWF RCSTA RETURN ;****************************** Subrutina de Recepción Serie ****************************************** ;Tiene que estar dentro de la Rutina de INTERRUPCION RECEPCION_DATO_SERIE BCF PIR1,RCIF ;Borramos Flag de la Recepción. NO_DATO_SERIE1 BTFSS PIR1,RCIF ;Preguntamos si hemos recibido una

nuevo DATO. GOTO NO_DATO_SERIE1 MOVF RCREG,W MOVWF DATO_SERIE1 ;Guardamos el Dato Primero

BCF PIR1,RCIF ;Borramos Flag de la Recepción.

NO_LLAVE_ENTRADA BTFSS PIR1,RCIF ;Preguntamos si ha llegado la Llave "LLAVE_ENTRADA".

GOTO NO_LLAVE_ENTRADA MOVF RCREG,W ;Preguntamos si ha llegado la

Llave "LLAVE_ENTRADA". XORWF LLAVE_ENTRADA,W BTFSS STATUS,Z ;Si es correcta la Llave

volvemos a preguntar. GOTO SALIR_SERIE ;No es correcta la Llave

volvemos al PP previa recuperación de registros.

BCF PIR1,RCIF ;Borramos Flag de la

Recepción. NO_DATO_SERIE2 BTFSS PIR1,RCIF ;Preguntamos si hemos

recibido una nuevo DATO.

Page 38: Diagrama de Flujo · 6 1.4.- Placa del Mando. Top Cooper and Top Silk Bottom Cooper Bottom Cooper (Mirror)

38

GOTO NO_DATO_SERIE2 MOVF RCREG,W MOVWF DATO_SERIE2 ;Guardamos el Dato Segundo MOVF DATO_SERIE1,W ;Si ambos datos son Iguales

validamos el dato serie recibido.

SUBWF DATO_SERIE2,F BTFSS STATUS,Z GOTO SALIR_SERIE VALIDAR_DATO_SERIE MOVF DATO_SERIE1,W MOVWF DATO_SERIE_VALIDO ; El Dato se queda cargado

en el Registro DATO_SERIE_VALIDO

SALIR_SERIE BCF PIR1,RCIF RETURN