TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: george19 en 01 de Marzo de 2004, 09:51:00
-
Tengo que hacer un programa para un proyecto, el cual controla el nº de coches que hay en el parking y un semáforo de ocupado cuando llega a 9.
Por RA0 entran los impulsos de contaje ascendente y por RA1 descendente. En el puerto B conectamos un display que cuenta de 0 a 9 y cuando llega a 9 en RB7 tenemos un impulso alto para activar el semaforo
Agradeceria que alguien me ayudara, a poder ser hoy porque mañana tengo que presentarlo.
-
;*****************************************************************
;contador de 8 vehiculos
; NORBERTO PELLEGRINI 01/02/2004
; UN sensor INCREMENTA
;OTRO SENSOR RESTA - SI HAY 9 VEHICULOS, ENCIENDE LUZ ROJA
; PERO NENE, PARA LA PROXIMA, ESTUDIA... ESTO SE APRENDE CONSULTANDO
; NO EXISTE AUN UN MANUAL PARA ANDAR EN BICICLETA... TE DARAN CONSEJOS...
; PERO SOLO SE APRENDE A LOS GOLPES.....
; ESTO, REVISALO, PROBALO... MAMALO.. SINO EL PROFE, TE HACE PURE CON SOLO 2 PREGUNTAS!!!
; POR LO MENOS, ANALIZALO, ASI TENES IDEA DE COMO FUNCIONA... Y CUALES SERIAN LAS MEJORAS!!!
; GRABAR EN LA EEPROM ANTE CORTES DE LUZ... ETC... E S T U D I AAAAA 
;el cual controla el nº de coches que hay en el parking y un semáforo
;de ocupado cuando llega a 9.
;Por RA0 entran los impulsos de contaje ascendente
; y por RA1 descendente.
; En el puerto B conectamos un display que cuenta de 0 a 9 y
; cuando llega a 9 en
; RB7 tenemos un impulso alto para activar el semaforo
;Agradeceria que alguien me ayudara, a poder ser hoy porque mañana tengo que presentarlo.
;*****************************************************************
LIST P=16F84A
#INCLUDE "p16f84A.inc"
ERRORLEVEL -302, -307 ;(NO FIGURAN LOS ERRORES DE CAMBIO DE PAGINA)
;**********************************************************************
__CONFIG _CP_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC ;CONFIGURO
;PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO PERRO GUARDIAN=ON,ETC
reset org 00h ;el vector de reset es la dirección 00
goto INICIO ;se salta al inicio del programa
#DEFINE RELE PORTB,7 ;RELE SEMAFORO
#DEFINE PULSUMA PORTA,0 ;PULSUMA
#DEFINE PULRESTA PORTA,1 ;PULRESTA
CBLOCK H"0C"
DELAY
MEMORIA
VEHICULO
loops2
loops
ENDC
;************* 7 SEGMENTOS DISPLAY + UNO ****************************
; SEGMENTOS BAPCDGFE
CERO EQU B"11011011" ; LOS 7 BIT SON LOS
UNO EQU B"10010000" ; SEGMENTOS
DOS EQU B"11001101" ;
TRES EQU B"11011100" ;
CUATRO EQU B"10010110" ;
CINCO EQU B"01011110" ; ***A***
SEIS EQU B"01011111" ; * *
SIETE EQU B"11010000" ; *F *B
OCHO EQU B"11011111" ; ***G***
NUEVE EQU B"11011110" ; * *
DIEZ EQU B"00000000" ; *E *C
ONCE EQU B"00000000" ; ***D***
;*****************************************************
;SUBRUTINA PARA CONVERTIR CADA CONTADOR A DIGITOS (18)
;*****************************************************
CONV_DIG MOVF VEHICULO,W
CALL NUMEROS
MOVWF PORTB ;
RETLW 0
;******************************************************
; TABLA DE LOS NUMEROS + EL UNO
;******************************************************
NUMEROS ADDWF PCL,F ;SUBRUTINA PARA MANDAR NUMERO AL DISPLAY
RETLW CERO
RETLW UNO
RETLW DOS
RETLW TRES
RETLW CUATRO
RETLW CINCO
RETLW SEIS
RETLW SIETE
RETLW OCHO
RETLW NUEVE
MOVLW .1 ;CON ESTO LIMITO EL MAXIMO
MOVWF VEHICULO ;SI SE SUPERA DE 9, SE COLOCA EN UNO
RETLW UNO
;*************************************************************************************
; RETARDO ANTIRREBOTE
;*************************************************************************************
DEMORA ; RETURN
movlw .80 ;RETARDO DE 80 MILISEGUNDOS PARA ANTIRREBOTE
movwf loops
top2 movlw .110
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2,1
goto top
decfsz loops,1
goto top2
retlw 0
;**************************************************************************
; SUBRUTINA DE LECTURA DE ENTRADAS DE PULSADORES
; PULSUMA , PULRESTA
LEER
BTFSS PULSUMA ;PULSADOR A MASA
GOTO PULSA1
BTFSS PULRESTA ;PULSADOR A MASA
GOTO PULSA2
RETLW 0 ;NO SE PULSO NINGUNO
PULSA1 CALL DEMORA
BTFSC PULSUMA ;ESTA PULSADO?, SI ESTA PULSADO SALTA
RETLW 0
BTFSS PULSUMA ;ESPERAR A QUE SUELTE EL PULSADOR Y SALTA
GOTO $-1 ; NO SOLTO, SEGUIR ESPERANDO
INCF VEHICULO,F ;SUMO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
RETLW 0
PULSA2 CALL DEMORA
BTFSC PULRESTA ;ESTA PULSADO?, SI ESTA PULSADO SALTA
RETLW 0
BTFSS PULRESTA ;ESPERAR A QUE SUELTE EL PULSADOR Y SALTA
GOTO $-1 ; NO SOLTO, SEGUIR ESPERANDO
DECF VEHICULO,F ;RESTO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
RETLW 0
VERIFICAR BCF RELE ;SIEMPRE LO APAGO Y VERIFICO SI LLEGO AL MAXIMO
MOVLW .9
XORWF VEHICULO,W
BTFSS STATUS,Z
GOTO TIEMPO_FUNCION
BSF RELE ;SE ACTIVA EL RELE DE SALIDA
RETLW 0
;**********************************************************************
; PROGRAMA PRINCIPAL
INICIO CLRF PORTA
BSF STATUS,RP0 ;BANCO 1
MOVLW B"11111011" ;COLOCO COMO ENTRADAS Y UNA SALIDA RELE
MOVWF TRISA
MOVLW B"00000000" ; TODAS SALIDAS AL DISPLAY Y RELE
MOVWF TRISB
BCF STATUS,RP0 ;BANCO 0
;---------------------------------------------------------------
CLRF VEHICULO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
BCF RELE
FUNCIONAMIENTO
CALL LEER
CALL VERIFICAR
GOTO $-2 ;QUEDA EN LOOP
END
Norberto
-
Gracias, tienes razón en lo que dices, si a mi me gustaría poderlo hacer pero peor profesor que este no hay en ningun lado. El control de la vallas lo logré hacer pero este no habia manera.
Intentaré entenderlo.
Un saludo
-
Hola, por algun otro lado, ta habia contestado... para eso necesitas 4 sensores, uno a cada lado de la barrera o valla, entonces, el sensor de entrada, enciende un bit del puerto que actua en el motor, se habre la barrera,pasa por el segundo sensor, que borra el bit, y se cierra la barrera.... aqui sigues con el programa del contador.....
para la salida seria igual, solo que resta...
Saludos al profesor 
espero que lo entiendas....
suerte mañana!
Norberto
-
Estoy aprendiendo todo eso de los pics, y me intereso el proyecto del estacionamiento asi q lo compile con MPlab, pero me sale un error en :
VERIFICAR BCF RELE ;SIEMPRE LO APAGO Y VERIFICO SI LLEGO AL MAXIMO
MOVLW .9
XORWF VEHICULO,W
BTFSS STATUS,Z
GOTO TIEMPO_FUNCION<<--
-ERROR,etiqueta no predeterminada
BSF RELE ;SE ACTIVA EL RELE DE SALIDA
RETLW 0
esa instruccion manda el programa a la etiqueta TIEMPO_FUNCION
PERO NO ESTA DEFINIDA EN EL PROGRAMA.
ES DE ALGUN TIEMPO O RETARDO?
O QUE SE SUPONE Q DEBE HACER?
-
Hola, creo que al copiar y pegra.... pero bueno, reemplaza el goto tiempo_funcion... simplemente por RETLW 0

Norberto
-
, OK , ya se corrigio el error thanks, solo una molestia mas, el display es catodo comun verdad?.pero en q patitas del pic lo conecto RBO a 1 del display,RB1 a 2 del display, RB2 a 3....
RB7 a led indicador del semaforo.
Si no es mucha molestia..
-

, ya solucione el problema (los),RBO-"B",RB1-"A", RB2-"P",RB3"C",RB4-"D",RB5"G",RB6-"F",RB7-"E", BUENO ASI ESTABA ORIGINALMENTE PERO NO PRENDIA LA "E", POR Q POR AHI MISMO SALE LA SEÑAL PARA EL SEMAFORO , ASI Q LA CAMBIE ALA SALIDA DEL PUNTO DEL DISPLAY Y LE CAMBIE LOS BITS DE SALIDA AL DISPLAY Y YAS TA JALANDO. PERFECTAMENTE.
NO SE MUY BIEN COMO PERO FUNCIONA..