TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: sino55 en 03 de Noviembre de 2004, 11:35:00
-
Hola a todos, por favor, alguien me puede ayudar a buscar informacion o algo, para un proyecto con pic 16f84a para un scalextrix cuya funcion, es contar las vueltas de los coches y el tiempo ke tardan,, gracias de antemano
-
si, si, muy lindo el scalectric, pero aparte del f84, q mas pensas ponerle? LCD? como visulizaras los datos? como sera la entrada de informacion al pic?
dale una vueltita mas a la idea y a las teclas....
-
Pues si, Tengo ke ponerle una LCD de 2X16 para visualizar los tiempos y vueltas de los corredores.. Asi ke si me puedes ayudar te lo agradezco..
-
Conseguirás ayuda mucho más rápido si pones aquí lo que ya llevas avanzado del proyecto.
Y si no has comenzado, ¿a qué esperas?. Ya verás qué gratificante es ir viendo cómo van saliendo las cosas y como se resuelven las que no salen a la primera.
-
Pues la verdad es ke no tengo nada, solo info ke he sacado de internet.. pero no encuentro nada de mi proyecto en concreto... Supongo ke es facil. pero estoy empezando y no tengo ni idea.. ademas tampoco se han parado a explicarme mucho..
asi ke si por favor me aportais alguna pagina o algo ke me sirva... de escandalo
-
Hombre pues no se yo creo que lo más fácil sería usar algun tipo de sensor óptico para detectar el paso de los coches, luego lo demás ya sería cuestión de programar. Aunque creo que saldría más barato emplear 7segments en vez de un LCD ya que creo que no requieres más de 4.
-
Si e mas barato y eso, pero de todos modos me exigen ke sea con lcd, voy a utilizar sensores infrarojos para detectar el paso de los coches, mas o menos tengo el programa, pero no se como se programa una lcd... si sabeis algo donde pueda buscar algun hilo o lo ke sea... Gracias
-
Hay mucha información por sobre cómo controlar LCD, e incluso librerías completas ya hechas para facilitarte el trabajo, aunque dependerá del lenguaje de programación que vayas a utilizar.
Lo más normal es que te hagas de un LCD compatible con el Hitachi 44780, que son la mayoría y para los cuales encontrarás más info.
En fin, dinos en qué lenguaje programarás tu proyecto y te indicamos por dónde buscar.
-
Voy a utilizar en ensamblador... Y otra cosita, para contar el numero de vueltas, lo hago atraves de RA4 por interrupciones, o hay alguna manera mejor de hacerlo?
GRacias
-
Voy a utilizar en ensamblador... Y otra cosita, para contar el numero de vueltas, lo hago atraves de RA4 por interrupciones, o hay alguna manera mejor de hacerlo?
GRacias
-
RE: cuentavueltas y cronometro para scalextric[/b]
<
-
Yo creo que lo ideal sería que usaras interrupciones, aunque como imagino querrás controlar los tiempos de más de un coche, podrías utilizar la interrupción por cambio de estado en los bits RB4-RB7, asignando cada pin a una pista del circuito (¿o tienes más de cuatro pistas?).
Mira aquí, hay un ejemplo de programa en ASM que usa ese tipo de interrupción:
http://perso.wanadoo.es/chyryes/tutoriales/pic9.htm
Con respecto al LCD en ASM, date una vuelta por esta web, no sólo hay drivers para el modelo estándar 44780, sino para muchos más:
http://www.piclist.org/techref/io/lcd/pic.htm
Ya nos irás contando cómo avanzas. Me gustaría poder probar el circuito contigo una vez terminado y echar unas carreras; cuánto tiempo hace que no cae un scalextric en mis manos
-
Ok.. voy a utilizar dos coches, asi que utilizare solo dos patillas, no? Tengo que hacer registros contadores para el tiempo, y tb para el numero de vueltas no??
GRACIAS
-
Claro, tendrás bastante con dos patillas.
Con respecto a los registros que necesitaras, no conozco nada de assembler, por lo que quizás te despiste más que ayudarte, pero supongo que para el tiempo necesitarás más de un registro, dado que la velocidad del PIC es muy alta y darás muchas vueltas a un registro de 8 bits antes siquiera que los coches se pongan en marcha.
-
![Sonrisa Gigante Sonrisa Gigante]()
![Sonrisa Gigante Sonrisa Gigante]()
En el foro de Picbasic, en un tema llamado Rutinas y programas en PBP, puesto por mi, coloque un proyecto (que no es mio) en el cual se cronometraba con ciertos sensores, mostrando en un LCD, como precisas.
Supongo que agregarle el conteo es cosa de nada, ya tienes los elementos necesarios....
-
Hola:
para los sensores lo mas practico son los reel switchs ,cada vez que pasa un auto se cerrara el switch ,son baratos y efectivos ,el mismo iman de los motores te los activa sin problema.Si lo haces en Pro o en plus solo deberas incrementar una variable por cada paso del auto...
La forma que se me ocurre mas facil para el tiempo seria tener un loop de conteo activado ,como sabes cuanto dura cada conteo dependiendo del Xtal que uses podras aber parando el conteo y leyendolo cuando el switch se activo...Me explico mejor ...un lazo for n=0 to 2000 por ejemplo next n,haces el calculo cada cuanto incrementa y cuando el auto pasa por el switch lo lees sacando los segundos y decimas correspondientes,lo pones a 0 y asi hasta que pase de nuevo...No es muy ortodoxa pero funciona sin interrupciones para no complicarte...
es una idea que teal vez te oriente...
saludos
khasistos
-
Hla si lo he hecho al final por el puerto A Ra3 y Ra4, tengo lo siguiente para la cuenta.. sirve bien.. lo ke llevo pero aun kiero hacerlo en lcd. etc.. mirad a ver ke os parece.
;*********************************************************************************************
;
;Programa CIRCUITO.ASM FECHA:
;
;Circuito de carreras controlado por un microcontrolador que nos indicara el tiempo que cada coche
;emplea en dar una vuelta.
;
;Programa para el PIC 16F84A Velocidad de reloj: 4 MHz Ciclo de Instrucion:1 MHz
;
;Perro guardian: Desactivado Tipo de reloj:XT Proteccion de codigo:OFF
;
;****************************SELECCION DEL PIC Y SISTEMA DE NUMERACION************************
LIST p=16F84A ;Tipo de microcontrolador
RADIX hex ;Seleciona el sistema hexadecimal por defecto
;***************************DEFINICION DE VARIABLES Y REGISTROS ESPECIALES*************
include <p16F84A.inc> ;Define todos los registros y variables
;del PIC 16F84
CONTADOR1 EQU 0X0C ;Registro del contador1
CONTADOR2 EQU 0X0D ;Registro del contador2
CONTADOR3 EQU 0X0E ;Registro del contador3
CONTADOR4 EQU 0X0F ;Registro del contador4
CONTADOR5 EQU 0X10 ;Registro del contador5
CONTADOR6 EQU 0X11 ;Registro del contador6
CONTADOR7 EQU 0X12 ;Registro del contador7
CONTADOR8 EQU 0X13 ;Registro del contador8
CONTADOR9 EQU 0X14 ;Registro del contador9
CONTADOR10 EQU 0X15 ;Registro del contador10
CONTADOR11 EQU 0X16 ;Registro del contador11
CONTADOR12 EQU 0X17 ;Registro del contador12
#DEFINE BANCO1 bsf STATUS,RP0
#DEFINE BANCO0 bcf STATUS,RP0
;*************************COMIENZO DEL PROGRAMA*************************************
ORG 0X00 ;Direccion del vector reset
goto INICIO ;Comienza el programa
INICIO BANCO1 ;Seleciona el banco1
movlw b"00011000" ;Carga un 1 en el registro de trabajo w
movwf TRISA ;Pone el TRISA de PORTA como entradas y salidas
clrf TRISB ;Pone el TRISB de PORTB como salida
movlw b"00000000" ;Carga un 0 en el registro de trabajo w
movwf TRISB ;Mueve el contenido de w en TRISB
BORRADO BANCO0 ;Selecciona el BANCO 0
clrf PORTB ;Borra el contenido del PORTB
clrf CONTADOR1 ;Borra el contenido del contador1
clrf CONTADOR2 ;Borra el contenido del contador2
clrf CONTADOR3 ;Borra el contenido del contador3
clrf CONTADOR4 ;Borra el contenido del contador4
clrf CONTADOR5 ;Borra el contenido del contador5
clrf CONTADOR6 ;Borra el contenido del contador6
movlw .10 ;Carga 10 decimal en el registro w
movwf CONTADOR4 ;Mueve el contenido de w en CONTADOR4
movlw .9 ;Carga 9 decimal en el registro w
movwf CONTADOR5 ;Mueve el contenido de w en CONTADOR5
movlw .5 ;Carga 6 decimal en el registro w
movwf CONTADOR6
TESTEO
btfsc PORTA,3 ;Testea y comprueba si la entrada RA0 es
;1 lee instruccion si es 0 salta
;a la siguiente instruccion
goto RELOJ ;Vete a la subrutina RELOJ
btfsc PORTA,4 ;Testea y comprueba si la entrada RA0 es
;1 lee instruccion si es 0 salta
;a la siguiente instruccion
goto RELOJ2 ;Vete a la subrutina RELOJ
goto TESTEO ;Vete a la subrutina TESTEO
RELOJ clrf CONTADOR1 ;Borra el contenido del contador1
clrf CONTADOR2 ;Borra el contenido del contador2
clrf CONTADOR3 ;Borra el contenido del contador3
clrf PORTB ;Borra el contenido del puerto b
nop
nop
movlw .100
movwf CONTADOR2
BUCLE1 movlw .199
movwf CONTADOR1
BUCLE0 nop
nop
decfsz CONTADOR1,F
goto BUCLE0
decfsz CONTADOR2,F
goto BUCLE1
movlw .31
movwf CONTADOR3
BUCLE2 decfsz CONTADOR3,F
goto BUCLE2
nop
nop ;Hasta aqui, hace la cuenta de las decimas (100ms)
bsf PORTB,0 ;Indica que ha pasado una decima
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR4,F
goto RELOJ
bsf PORTB,1 ;Indica que ha pasado un segundo
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR5,F
goto CARGA
bsf PORTB,2 ;Indica que han pasado 10 segundos
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR6,F
goto CARGA2
bsf PORTB,3 ;Indica que ha pasado un minuto
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
goto BORRADO
CARGA
movlw .10
movwf CONTADOR4
goto RELOJ
CARGA2
movlw .10
movwf CONTADOR4
movlw .10
movwf CONTADOR5
goto RELOJ
BORRADO2 BANCO0 ;Selecciona el BANCO 0
clrf PORTB ;Borra el contenido del PORTB
clrf CONTADOR7 ;Borra el contenido del contador1
clrf CONTADOR8 ;Borra el contenido del contador2
clrf CONTADOR9 ;Borra el contenido del contador3
clrf CONTADOR10 ;Borra el contenido del contador4
clrf CONTADOR11 ;Borra el contenido del contador5
clrf CONTADOR12 ;Borra el contenido del contador6
movlw .10 ;Carga 10 decimal en el registro w
movwf CONTADOR10 ;Mueve el contenido de w en CONTADOR4
movlw .9 ;Carga 9 decimal en el registro w
movwf CONTADOR11 ;Mueve el contenido de w en CONTADOR5
movlw .5 ;Carga 6 decimal en el registro w
movwf CONTADOR12
RELOJ2 clrf CONTADOR7 ;Borra el contenido del contador1
clrf CONTADOR8 ;Borra el contenido del contador2
clrf CONTADOR9 ;Borra el contenido del contador3
clrf PORTB ;Borra el contenido del puerto b
nop
nop
movlw .100
movwf CONTADOR8
BUCLEB movlw .199
movwf CONTADOR7
BUCLEA nop
nop
decfsz CONTADOR7,F
goto BUCLEA
decfsz CONTADOR8,F
goto BUCLEB
movlw .31
movwf CONTADOR9
BUCLEC decfsz CONTADOR9,F
goto BUCLEC
nop
nop ;Hasta aqui, hace la cuenta de las decimas (100ms)
bsf PORTB,4 ;Indica que ha pasado una decima
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR10,F
goto RELOJ2
bsf PORTB,5 ;Indica que ha pasado un segundo
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR11,F
goto CARGA3
bsf PORTB,6 ;Indica que han pasado 10 segundos
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR12,F
goto CARGA4
bsf PORTB,7 ;Indica que ha pasado un minuto
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
goto BORRADO2
CARGA3
movlw .10
movwf CONTADOR10
goto RELOJ2
CARGA4
movlw .10
movwf CONTADOR10
movlw .10
movwf CONTADOR11
goto RELOJ2
end
-
Chaval tu lo q tiens q hacer es juntarte con el Raul y EL Abeja q ellos son unos makinas de esto seguro q te resuelven la duda.