CUENTA REVOLUCIONES DIGITAL PARA EL AUTOMOVIL



INTRODUCCION  

PRINCIPIO DE FUNCIONAMIENTO

 
LA REALIZACION  
PROGRAMA EN ENSAMBLADOR  
CARA DE PISTAS  
ESQUEMATICO DEL CIRCUITO  
MATERIALES UTILZADOS  
VIABILIDAD ECONOMICA  
           
           
DOWNLOAD: ensamblador.asm cara de pistas

esquematico

 











INTRODUCCION



A pesar de la gran irrupción de la electrónica en el automóvil, parece ser que el indicador de revoluciones del

motor aún no es una realidad en todos los modelos de coches. La realización de un aparato de este tipo es muy

atractiva para el experimentador, pero existe una cierta dificultad en encontrar en el mercado un instrumento de

medida cuya escala sea adecuada y que además, resista bien las vibraciones. Por tanto, a continuación se ha

realizado el montaje de un indicador de revoluciones de visualización digital cuyo coste, gracias a una racional

elección de sus componentes, es por lo menos parecida al de los dispositivos comercialmente con instrumentos

de aguja.

 



 

 

 

 

 







PRINCIPIO DE FUNCIONAMIENTO



Para contar el número de revoluciones por minuto de un motor, es preciso disponer de un sensor que proporcione esta información con un eventual coeficiente multiplicador fijo y conocido. En los coches, este sensor existe en forma de ruptor o de su equivalente electrónico. Efectivamente, en los bornes del ruptor se dispone de un impulso eléctrico por cada encendido de una bujía, lo cual, para un motor de cuatro tiempos, proporciona dos impulsos por segundo.

Por tanto, bastara con realizar un pequeño frecuenciómetro (con un 555) que mida la frecuencia de repetición para saber el numero de revoluciones del motor. La frecuencia del reloj del frecuenciómetro deberá establecerse de manera que permita una visualización directa en r.p.m. necesidad de conversión o de traducción por parte del usuario.La salida de la señal del frecuenciómetro irá como entrada a la una de las patillas de la PIC16F84 donde analizará la frecuencia para luego poder hacer los pasos necesarios para su conversión


La PIC16F84 es un microcontrolador de 8-Bit con 18 pines y 13 entradas\salidas tiene una gran diversidad de características donde se puede encontrar mas información sobre el mismo en la pagina xxxxxx@xxxxx.com

Nosotros hemos utilizado sus patinaje PA0..PA3 y PB0..PB3 como salidas y PB4 como entrada y de esta manera podremos manipular de alguna forma todos los componentes del circuito, eso sí, siempre programando debidamente el integrado con un software en ensamblador que será el que nos manipule todo el circuito. Esto requiere unos conocimientos medios de programación en ASM por lo que sino seria imposible llevar a la practica el proyecto. Mas a delante se detallara el proceso seguido para programar la PIC y las dificultades encontradas.

La salida de la PIC nos va a proporcionar una señal de salida en decimal que se la aplicaremos a un decodificador 4511 y que nos hará una conversión para a su salida se pueda visualizar en unos displays las r.p.m. Como los coches de verdad estos disponen de unos dispositivos que hacen que el vehículo mantenga un relentin y donde este suele mantenerse en unas 10.000 r.p.m. Este paso también se ha tenido en cuenta y en el momento que se ponga en marcha el circuito se podrá visualizar el relentin.

Existen otros dispositivos electrónicos que hay que tener en cuenta por que son simples pero básicos se trata de los transistores que tendrán como utilidad una gran tarea como la de hacer esa visualización de los displays. Estos se activaran y viceversa a una velocidad muy alta que será de mS. Estos transistores estarán manipulados a través de los puertos PB0..PB3 que se definieron como salidas para poder ponerlos a uno o a cero.

 



 

 

 

 






LA REALIZACION



Lo primero que se estudio fue el diseño del circuito o el hardware del proyecto donde se usaron los conocimientos ya adquiridos en el primer año de estudios. El diseño del circuito no tiene una gran dificultades de realización por lo que hemos usados elementos muy discretos a la hora de su diseño.

En lo primero que se pensó fue en realizar una partición de la placa comunicada a través de un BUS-40 para poder utilizarla como un pequeño entrenador y mas adelante otras personas puedan utilizarlo para poder experimentar con el proyecto

Se ha utilizado un microcontrolador PIC16F84 que será donde grabaremos el programa en ensamblador para direccionar los puertos y hacer los cálculos de conversión de datos. En el microcontrolador hemos colocados unos componentes necesarios para que su rendimiento sea correcto y en el que se a llevado su patilla 5 a masa indicada en el integrado como patilla Vss. Por la patilla 14 y 4 del PIC se a alimentado y es la patilla cuyo nombre de denominación se encuentra en los manuales por Vdd la patilla 14 y la 4 como MCLR ya que es una entrada que se activa a nivel bajo y en este caso no nos interesa que se active y llevándola a la alimentación no nos la activara. En la patilla 15 y 16 del PIC se han cortocircuitado con un cristal de cuarzo donde a cada patilla también se ha llevado a masa unos condensadores, esto creara una señal de reloj que producirá como el arranque del integrado a la hora de su funcionamiento.

A las salidas del integrado RA0..RA4 y RB0..RB7 se han conectado a un puerto con un bus de 40 pines donde sus patillas 2 y 1 se han conectado a alimentación y sus patillas 40 y 39 a la masa. A través de este puerto se transmitirán los datos de la placa madre a el circuito del cuenta revoluciones. Con este mismo puerto se pueden conectar otros circuitos o proyectos realizados por compañeros con distintos proyectos.

A la salida del bus 40 de la placa que vamos a realizar hemos distribuido los puertos de una manera ordenada y lógica para que cuando nos toque programar el PIC nos resulte una manera cómoda de utilizarlos, y los hemos asignado de la siguiente manera:

Del PB0..PB3 los hemos usado como salida para lograr activar o desactivar los transistores que irán polarizados correctamente con su resistencia de 10K

El PB4 lo usamos como entrada de datos donde irán conectado el simulador del cuenta revoluciones diseñado con un 555.

Los puertos PA0..PA3 los usamos como salida de datos y a su vez como entrada de datos al decodificador BCD 7Seg. La salida que se obtiene en estos puertos es en BCD.

El siguiente paso que se dio fue el como se iba a realizar un generador de pulsos y se decidió con el integrado 555 con unos elementos discretos. Le colocamos un potenciómetro para poder variar esa frecuencia de señal y que sea mas real la simulación. Para ello se realizaron unos cálculos de los conocimientos adquiridos en el primer año.

También tuvimos que pensar como hacer la visualización de el cambio de revoluciones y lo hicimos con la colocación de un decodificador BCD y a sus salidas conectarle unos displays de cátodo común que se manipularían con unos transistores que se conectarían a los puertos adecuados y definidos correctamente para mas tarde proceder con su planteamiento del programa.

Como se puede apreciar el circuito no tiene una gran dificultad a la hora de su diseño por lo que con unos conocimientos básicos de electrónico general se podría realizar este proyecto de los único que seria mas complicado seria a la hora de su diseño de placas ya que es necesario unos procesos con unas maquinas de un coste elevado y de uso muy particular de laboratorios de electrónico ya que los productos químicos requieren un mantenimiento. El otro inconveniente seria la complejidad del diseño del programa en ensamblador por lo que serian necesarios unos conocimientos medios para poder llegar a las conclusiones para su bien funcionamiento.

A continuación realizamos el esquemático en el programa Eagle y donde se creo una cara de pistas y otra de componentes para proceder con los pasos de la obtención de ficheros de taladro para poder realizar la placa con un proceso continuo.

Una vez realizada los taladros en la placa se pasaría a los procesos químicos en los que se realizarían unos procesos de oxidación de pistas ..... y finalmente le estañado de las mismas.

El siguiente paso seria el montaje de los componentes en la placa y su buen funcionamiento de la misma. Se experimentara con el circuito para poder redactar su buen funcionamiento y mejorar su posible hardware y software.

 




 

 

 

 






PROGRAMA EN ENSAMBLADOR



;#############################################################
; Fichero : revol.asm
; Autor : angel sereno rodriguez.
; Fecha: Enero del 2002.
; Version: 0.0
; Sistema RAD-MICROS.
; Placa Microcontroladora: micro-p1684.
; Placa de Aplicaciones: apli-miniclock.
; Placa de programacion: Programador Superpro II/P. ( XELTEK )
; Bus: bus-40.
; Codigo para: PIC16C84 y PIC16F84
; Clock: 4MHz , XT. -> Ciclo = 1 uS.
; Reset: Power On Reset.
; Watch dog: Inhabilitado.
; Proteccion de codigo: Inhabilitado.
; Ficheros requeridos: H16f84a.inc
; Funcion : Similador de un cuenta revoluciones digital.
;#############################################################

                          LIST p=PIC16F84A              ; Directiva para definir micro.
                          #include <H16f84a.inc>       ; Fichero standard de cabezera.

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;#################### DEFINICIONES ###########################

w_temp              EQU 0x0C        ; Variable para guardar W.
status_temp      EQU 0x0D        ; Variable para guardar STATUS.
con0                   EQU 0x0E         ; Variable para guardar contador 0.
con1                   EQU 0x0F         ; Variable para guardar contador 1.
u_rpm                EQU 0x11          ; Unidades rpm.
d_rpm                EQU 0x12          ; Decenas rpm.
c_rpm                 EQU 0x13         ; Unidades rpm.
u_m_rpm           EQU 0x14         ; Decenas rpm.
u_t                     EQU 0x16          ; Unidades de segundo.
d_t                      EQU 0x17         ; Decenas de segundo.
c_t                      EQU 0x18          ; Unidades de minuto.
u_m_t                EQU 0x19          ; Decenas de minuto.
con_0                EQU 0x1A         ;


;################ COMIENZO DEL PROGRAMA #####################

                   ORG       0x00                  ; Vector de Reset.
                   GOTO    inicio                ; Programa Principal.

;########## TRATAMIENTO DE INTERRUPCIONES ####################

ORG              0x04                       ; Vector de interrupcion.
MOVWF      w_temp                 ; Guarda W.
MOVF           STATUS,W
MOVWF      status_temp          ; Guarda STATUS.

BCF               INTCON,GIE        ; Inhabilito interrupciones.

;Pregunto quien realiza la interrupcion
BTFSS           INTCON,T0IF             ; TOIF sube bandera??
CALL             es_RB4                        ; No sube. RBIF sube bandera.
CALL            tiempo                           ; Si sube bandera TOIF.
GOTO            fuera                             ; Rutina para salir al P.P.

;************************************************************
;Rutina: es_RB4
;Funcion: Incrementa cuando sube bandera RBIF
;Entradas:
;Salidas: u_t, d_t, c_t, u_m_t
;Variables utilizadas:
;************************************************************

es_RB4            BTFSS      PORTB,4
                          GOTO      es_RB4

;Incremento d_t
INCF            d_t,F               ; d_t + 1 = d_t
MOVF         d_t,W             ; W = d_t
SUBLW       0x0A               ; 10 - W = STATUS
BTFSS         STATUS,Z    ; Z = ??
GOTO          sal                   ; Z = 0
MOVLW     0x00                ; Z = 1 y W = L(0x00)
MOVWF     d_t                  ; d_t = 0x00

;Incremento c_t
INCF           c_t,F                ; c_t + 1 = c_t
MOVF         c_t,W              ; W = c_t
SUBLW      0x0A                ; 10 - W = STATUS
BTFSS         STATUS,Z    ; Z = ??
GOTO          sal                   ; Z = 0
MOVLW     0x00                 ; Z = 1 y W = L(0x00)
MOVWF     c_t                   ; c_t = 0x00

;Incremento u_m_t
INCF             u_m_t,F         ; u_m_t + 1 = u_m_t
MOVF           u_m_t,W       ; W = u_m_t
SUBLW        0x0A               ; 10 - W = STATUS
BTFSS          STATUS,Z     ; Z = ??
GOTO           sal                    ; Z = 0
MOVLW      0x00                 ; Z = 1 y W = L(0x00)
MOVWF      u_m_t             ; u_m_t = 0x00
GOTO           sal                   ; Salta a la rutina de salida
sal RETURN

;*************************************************************
;FIN DE LA RUTINA
;*************************************************************

;************************************************************
;Rutina: tiempo
;Funcion: tiempo para 500mS
;Entradas:
;Salidas:
;Variables utilizadas:con0
;************************************************************
tiempo           DECFSZ        con0,F             ; con0 - 1 = con0
                       GOTO             sal_1               ; Z = 0
                       DECFSZ        con_0,F
                       GOTO            sal_1

                       MOVLW       0xFF                 ; Z = 1 , W = L = 0xFF
                       MOVWF       con0                 ; con0 = W
                       MOVLW       0x04                  ; Z = 1 , W = L = 0x04
                       MOVWF       con_0               ; con_0 = W

                       CALL             cambio            ; Salto a la rutina cambio.


sal_1     RETURN
;*************************************************************
;FIN DE LA RUTINA
;*************************************************************

;************************************************************
;Rutina: cambio
;Funcion: Cambia valores para refrescar el display
;Entradas: u_t, d_t, c_t, u_m_t
;Salidas: u_rpm, d_rpm, c_rpm, u_m_rpm
;Variables utilizadas: u_t, d_t, c_t, u_m_t, u_rpm, d_rpm, c_rpm, u_m_rpm
;************************************************************
cambio            MOVF          u_t,W         ; W = u_t
                         MOVWF     u_rpm         ; u_rpm = u_t
                         CLRF            u_t              ; Reset de u_t

                         MOVF          d_t,W         ; W = d_t
                         MOVWF      d_rpm         ; d_rpm = d_t
                         CLRF            d_t               ; Reset de d_t

                        MOVF           c_t,W          ; W = c_t
                        MOVWF       c_rpm         ; c_rpm = c_t
                        CLRF              c_t              ; Reset de c_t

                         MOVF          u_m_t,W    ; W = u_m_t
                         MOVWF      u_m_rpm    ; u_m_rpm = u_m_t
                        CLRF             u_m_t          ; Reset de u_m_t

RETURN
;*************************************************************
;FIN DE LA RUTINA
;*************************************************************

fuera        MOVF         status_temp,W             ; W = satatus_temp
                 MOVWF     STATUS                        ; Recupera STATUS.
                 SWAPF       w_temp,F
                 SWAPF       w_temp,W                     ; Recupera W.
                 BCF              INTCON,RBIF               ; Bajo bandera de RBIF
                 BCF              INTCON,T0IF               ; Bajamos Bandera T0IF.
                 BSF              INTCON,GIE                  ; Habilitamos interrupciones
                 RETFIE        ; Retorno de interrupcion.

;*************************************************************
;FIN DE LA INTERRUPCION
;*************************************************************

;#############################################################
;#############################################################
;#############################################################
;#############################################################
;#############################################################
;#############################################################

;#############################################################
;################ PROGRAMA PRINCIPAL #########################


inicio                  BSF              STATUS,RP0                      ; Banco 1
                            MOVLW     B'10000001'                          ; Divisor = 4
                            MOVWF     OPTION_REG                     ; Configuramos TMR0
                            MOVLW     B'00010000'                           ; W = L = 0x10
                            MOVWF     TRISB                                   ; Configuramos I/O PORTB
                            CLRF           TRISA                                   ; Configuramos I/O PORTA

                           BCF              STATUS,RP0                        ; Banco 0
                           CLRF            PORTB                                   ; Pongo como entrada el PORTB

                           MOVLW       0xFF                                       ; Variable para temporizar.
                           MOVWF      con0                                        ; con0 x divisor x TMR0 = X segundo.

                           MOVLW      0x04                                           ; Variable para temporizar.
                           MOVWF     con_0                                        ; con0 x divisor x TMR0 = X segundo.

                           MOVLW     0x3F                                           ; Variable para temporizar.
                           MOVWF    con1                                            ; con0 x divisor x TMR0 = X segundo.

                            CLRF           u_t                                              ; Reset u_t
                            CLRF           d_t                                              ; Reset d_t
                            CLRF           c_t                                               ; Reset c_t
                            CLRF           u_m_t                                          ; Reset u_m_t

                            CLRF          TMR0                                           ; TMR0 = 0

                            MOVLW    B'10101000'                                 ; Habilitamos RBIE,GIE,TOIE.
                            MOVWF    INTCON
 

bucle                   CALL       display             ; Rutina que visualiza el display
                            GOTO       bucle                ; Rutina de retorna al bucle

;################### FIN DEL PROGRAMA PRINCIPAL ##############
;#############################################################

;************************************************************
;Rutina: display
;Funcion: Visualizar en los displays
;Entradas:
;Salidas: PORTB,X
;Variables utilizadas: u_rpm, d_rpm, c_rpm, u_m_rpm
;************************************************************

display      MOVF              u_rpm,W           ; W = u_rpm
                   MOVWF          PORTA             ; PORTA = W
                   BSF                   PORTB,0           ; PORTB,0 = ACTIVO
                   CALL                delay                  ; Rutina de retardo
                   BCF                  PORTB,0             ; PORTB,0 = DESACTIVO

                   MOVF               d_rpm,W           ; W = d_rpm
                   MOVWF           PORTA             ; PORTA = W
                   BSF                   PORTB,1             ; PORTB,1 = ACTIVO
                   CALL                delay                   ; Rutina de retardo
                   BCF                   PORTB,1             ; PORTB,1 = DESACTIVO

                   MOVF               c_rpm,W             ; W = c_rpm
                   MOVWF          PORTA                ; PORTA = W
                   BSF                   PORTB,2              ; PORTB,2 = ACTIVO
                  CALL                 delay                    ; Rutina de retardo
                  BCF                    PORTB,2              ; PORTB,2 = DESACTIVO

                  MOVF                u_m_rpm,W         ; W = u_m_rpm
                   MOVWF           PORTA                 ; PORTA = W
                  BSF                     PORTB,3              ; PORTB,3 = ACTIVO
                  CALL                 delay                      ; Rutina de retardo
                  BCF                    PORTB,3                ; PORTB,3 = DESACTIVO
 
                 RETURN                      ; Retorno al bucle inicial

;*************************************************************
;FIN DE LA RUTINA
;*************************************************************

;************************************************************
;Rutina: delay
;Funcion: Realiza un retardo en los displays
;Entradas:
;Salidas:
;Variables utilizadas: con1
;************************************************************

delay        MOVLW       0x3F        ; W = 0x4F
                  MOVF           con1       ; con1 = W
loop          DECFSZ        con1,F   ;   con1 - 1 = con1
                  GOTO           delay      ; Z = 0
                  RETURN                      ; z = 1

;*************************************************************
;FIN DE LA RUTINA
;*************************************************************

END ; Fin de programa.



 

 


 

 

 

 










CARA DE PISTAS





 


 

 

 

 

 







ESQUEMATICO DEL CIRCUITO



 






 

 

 

 






MATERIALES UTILIZADOS



Ordenador para el desarrollo de los procesos de diseño y programación.

*Programa de diseño de circuitos electrónicos (Eagle, Orcad).

*Maquinaria de taladro para perforación de la placa.

*Elementos químicos para procesos de diseño de pistas.

Programador de microcontroladores.

Fuente de alimentación



*.Todos estos puntos se pueden sustituir por una placa Board.



 




 

 

 

 






VIABILIDAD ECONOMICA



COMPONENTE

VALOR

REFERENCIA

P.UNIDAD

P.TOTAL

1

Microcontrolador

PIC16F84

PIC16F84

4,22

4,22

1

Cristal de cuarzo

4MHz

Cristal de cuarzo 4MHz

0,72

0,72

1

Diodo Led

1N4148

LED-1N4148

0,06

0,06

1

Resistencia

2.2K R-US_0207/10

0207/10

0,03

0,03

8

Resistencia

180 R-US_0207/10

0207/10

0,03

0,24

4

Resistencia

10K R-US_0207/10

0207/10

0,03

0,12

1

Resistencia

390K R-US_0207/10

0207/10

0,03

0,03

1

Resistencia

1K R-US_0207/10

0207/10

0,03

0,03

1

Potenciómetro

100K POT-US_0207/10

0207/10

0,04

0,04

2

Condensadores

22pF

C2,5-3

0,06

0,12

1

Condensadores

12µF

C2,5-3

0,06

0,06

1

Condensadores

100nF

C2,5-3

0,06

0,06

1

Decodificador

4511BCD-7se

4511N DIL16

0,72

0,72

5

Display-7 seg

DIS-7Seg-CC

7SEG-CK

0,12

0,6

4

Transistores

BCD-107

BCD-107

0,06

0,24

1

LM-555-N

LM-555-N

LM-555-N

0,30

0,30

TOTAL PESETAS---------------------------------------------------------------------------------------------------------------------------------

1395 PTA

TOTAL EUROS------------------------------------------------------------------------------------------------------------------------------------

8,40

*Todos estos precios pertenecen a la fecha del 11-10-01 por lo que han podido ser modificados hasta la fecha actual.

   





FINAL DEL PROYECTO



Este proyecto lo realicé en el ultimo curso del modulo de Grado Superior en Desarrollo en Productos Electrónicos en el centro Leonardo da Vinci para la asignatura de Desarrollo de Proyectos.

ANGEL SERENO RODRIGUEZ PROYECTO DEL  D.P.E. *CUENTA REVOLUCIONES DIGITAL PARA EL AUTOMOVIL*

1-02-2002 ASR