En esta oportunidad quiero compartir con ustedes un sencillo reloj basado en un Microcontrolador PIC de la serie 16F84A y usando display ánodo común de 7 segmentos.
Adicionalmente usa otros circuitos con la finalidad de expander el número de salidas, tanto para control como para datos, y de esa forma podemos contar con más displays y más opciones de Configuración. Entre estos circuitos tenemos el conocido 74LS47, de cuál dejaré el esquema mostrando la disposición de sus pines (Figura 1), así como su tabla de verdad (Figura 2). Para mayor información pueden consultar el datasheet de este componente.
Disposición de pines
Tabla de Verdad
Otro circuit usado es el 74LS138, el cuál funcionará como selector de display para realizar el efecto de barrido. No detallaré tampoco a este componente puesto que no es el objetivo de este post, pero si dejaré algunas imágenes, que al igual que las anteriores, nos da una vista rápida de la disposición y el funcionamiento de este integrado.
Disposición de pines
Tabla de Verdad
También dejaré el diagrama de pines de un display de 7 segmentos.
Ahora, una vez conocido el funcionamiento de los componentes individuales, a continuación muestro el diagrama total del reloj, en donde veremos como estos integrados interactuan entre sí para poder obtener nuestro sencillo reloj digital.
Las resistencias que van a los displays son de 330Ω (Naranja, Naranja, Marrón) y las que van a los transistores son de 1KΩ (Marrón, Negro, Rojo). Y claro, las resistencias que van a los pulsadores son de 10KΩ (Marrón, Negro, Naranja).
Antes que nada tenemos que conectar los componentes básicos para el funcionamiento del microcontrolador pic, que son las conexiones a tierra y 5 voltios, el reloj de 4MHz y los capacitores.
Luego podemos armar el siguiente diagrama esquemático para tener en funcionamiento a nuestro sencillo Reloj Digital.
Archivos adjuntos del proyecto:
El código está escritor en ensamblador. Pueden usar el mplab para recompilarlo y usarlo de acuerdo a sus necesidades.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> M_UNI equ H'1D' ; Registro para las unidades de los minutos. M_DEC equ H'1C' ; Registro para las decenas de los minutos. H_UNI equ H'1F' ; Registro para las unidades de las horas. H_DEC equ H'1E' ; Registro para las decenas de las horas. S_UNI equ H'20' ; Registro para las unidades de los segundos. S_DEC equ H'21' ; Registro para las decenas de los segundos. BARR equ H'1B' ; Registro para almacenar el número de barridos. PAUSE equ H'1A' ; Registro para almacenar el tiempo de barrido. ;Algunas definiciones de registros y pines ;----------------------------------------- #DEFINE REINICIO PORTA,0 ; Pulsador conectado a RA0. #DEFINE MINUTO PORTA,1 ; Pulsador conectado a RA1. #DEFINE HORA PORTA,2 ; Pulsador conectado a RA2. #DEFINE DISPLAY PORTB ; El display está conectado al Puerto B. ORG 0 Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf DISPLAY ; Línea del LED configurada como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf PORTA bcf STATUS,RP0 ; Acceso al Banco 0. ;Inicialización de Registros ;--------------------------- clrf S_UNI clrf S_DEC clrf M_UNI clrf M_DEC clrf H_UNI clrf H_DEC clrf BARR ;--------------------------- Principal clrf BARR ; Limpiamos el registro de barridos ;Para el botón de reinicio no importa los rebotes ;------------------------------------------------ VerificarPulsadorReset btfss REINICIO ; ¿Pulsador reposo?, ¿Pulsador=1? call InicializarRegistros ;------------------------------------------------------------------------------ ;Para el botón de incremento de minutos si importan los rebotes ;-------------------------------------------------------------- VerificarPulsadorMinutos btfsc MINUTO ; ¿Pulsador presionado?, ¿(Pulsador)=0? goto VerificarPulsadorHoras ; No vuelve a leerlo call Temporizador ; Espera a que se estabilicen los niveles de tensión. btfsc MINUTO ; Comprueba si es un rebote. goto VerificarPulsadorHoras ; Era un rebote y sale. goto SoloMinutosEnUno ; Salta a la subrutina para incrementar los minutos en 1 ;------------------------------------------------------------------------------ ;Para el botón de incremento de horas también importan los rebotes ;----------------------------------------------------------------- VerificarPulsadorHoras ;------------------------------------------------------------------------------ btfsc HORA ; ¿Pulsador presionado?, ¿(Pulsador)=0? goto SoloSegundosEnUno ; No vuelve a leerlo call Temporizador ; Espera a que se estabilicen los niveles de tensión. btfsc HORA ; Comprueba si es un rebote. goto SoloSegundosEnUno ; Era un rebote y sale fuera. call SoloHorasEnUno ;------------------------------------------------------------------------------ SoloSegundosEnUno call IncrementarSegundosEnUno Mostrar call ValidarTiempo call Barrido ;------------------------------------------------------------------------------ Fin goto Principal ;------------------------------------------------------------------------------ SoloMinutosEnUno call IncrementarMinutosEnUno goto Mostrar SoloHorasEnUno call IncrementarHorasEnUno goto Mostrar ;************************************* ; Subrutina de Incremento de Registros ;************************************* ;------------------------------------------------------------------------------ IncrementarSegundosEnUno incf S_UNI,f ; Incrementa el valor de S_UNI movfw S_UNI ; Carga W con el valor del regustro S_UNI sublw D'10' ; Resta 10 para verificar si S_UNI=10? btfsc STATUS, Z ; Verifica si el resultado fué cero call IncrementarSegundosEnDiez ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ IncrementarSegundosEnDiez clrf S_UNI ; El acarreo implica limpiar el registro anterior incf S_DEC,f ; Incrementa el valor de S_DEC movfw S_DEC ; Carga W con el valor del regustro S_DEC sublw D'6' ; Resta 6 para verificar si S_UNI=6? btfsc STATUS, Z ; Verifica si el resultado fué cero call IncrementarMinutosEnUno ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ IncrementarMinutosEnUno clrf S_DEC ; El acarreo implica limpiar el registro anterior incf M_UNI,f ; Incrementa el valor de M_UNI movfw M_UNI ; Carga W con el valor del regustro M_UNI sublw D'10' ; Resta 10 para verificar si S_UNI=10? btfsc STATUS, Z ; Verifica si el resultado fué cero call IncrementarMinutosEnDiez ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ IncrementarMinutosEnDiez clrf M_UNI ; El acarreo implica limpiar el registro anterior incf M_DEC,f ; Incrementa el valor de M_DEC movfw M_DEC ; Carga W con el valor del regustro M_DEC sublw D'6' ; Resta 6 para verificar si S_UNI=6? btfsc STATUS, Z ; Verifica si el resultado fué cero call IncrementarHorasEnUno ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ IncrementarHorasEnUno clrf M_DEC ; El acarreo implica limpiar el registro anterior incf H_UNI,f ; Incrementa el valor de H_UNI movfw H_UNI ; Carga W con el valor del regustro H_UNI sublw D'10' ; Resta 6 para verificar si S_UNI=10? btfsc STATUS, Z ; Verifica si el resultado fué cero call IncrementarHorasEnDiez ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ IncrementarHorasEnDiez clrf H_UNI ; El acarreo implica limpiar el registro anterior incf H_DEC,f ; Incrementa el valor de H_DEC movfw H_DEC ; Carga W con el valor del regustro H_DEC sublw D'10' ; Resta 6 para verificar si S_UNI=10? btfsc STATUS, Z ; Verifica si el resultado fué cero clrf H_DEC ; Si es cero, entonces acarreamos uno return ;------------------------------------------------------------------------------ ;********************************* ; Subrutina de Barrido de Displays ;********************************* ;------------------------------------------------------------------------------ Barrido btfss REINICIO ; ¿Pulsador reposo?, ¿Pulsador=1? call InicializarRegistros incf BARR, f ; Incrementa en 1 el registro de barridos ;Unidades de segundos ;-------------------- movlw b'00001111' ; Activamos el primer display movwf DISPLAY ; Movemos el dato al puerto B movf S_UNI,0 ; Mueve M_UNI al registro W iorlw b'00000000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'00001111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Decenas de segundos movlw b'00011111' ; Activamos el segundo display movwf DISPLAY ; Movemos el dato al puerto B movf S_DEC,0 ; Mueve S_DEC al registro W iorlw b'00010000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'00011111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Unidades de minutos movlw b'00101111' ; Activamos el tercer display movwf DISPLAY ; Movemos el dato al puerto B movf M_UNI,0 ; Mueve M_UNI al registro W iorlw b'00100000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'00101111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Decenas de minutos movlw b'00111111' ; Activamos el cuarto display movwf DISPLAY ; Movemos el dato al puerto B movf M_DEC,0 ; Mueve M_UNI al registro W iorlw b'00110000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'00111111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Unidades de horas movlw b'01001111' ; Activamos el quinto display movwf DISPLAY ; Movemos el dato al puerto B movf H_UNI,0 ; Mueve M_UNI al registro W iorlw b'01000000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'01001111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Decenas de horas movlw b'01011111' ; Activamos el sexto display movwf DISPLAY ; Movemos el dato al puerto B movf H_DEC,0 ; Mueve M_UNI al registro W iorlw b'01010000' ; Aplicamos la máscara movwf DISPLAY ; Mostramos en el puerto B call Temporizador ; Pausa para establecer niveles de tensión correctamente movlw B'01011111' ; Cargamos el valor adecuado a W para limpiar los registros movwf DISPLAY ; Limpiamos el display para evitar que los dígitos se repitan ;------------------------------------------------------------------------------ ;Verificar barrido movfw BARR ; carga W con el número de barridos sublw D'50' ; Resta 50 para comparar si es igual a 50 btfsc STATUS, Z ; Verifica si el resultado fué 0, o sea si BARR=50? return ; Se completó el número de barridos goto Barrido ;------------------------------------------------------------------------------ ValidarTiempo movfw H_UNI ; Carga el registro W con el valor del registro H_UNI sublw D'4' ; Resta 4 para verificar si es que el valor de W=4? btfsc STATUS, Z ; Verifica si el resultado fué cero goto ValidarHora ; Ahora llamamos al subrutina para verificar el siguiente dígito de la hora return ;------------------------------------------------------------------------------ ValidarHora movfw H_DEC ; Carga el registro W con el valor del registro H_DEC sublw D'2' ; Resta 2 para verificar si es que el valor de W=2? btfsc STATUS, Z ; Verifica si el resultado fué cero goto InicializarRegistros ; Al llamar a esta subrutina quiere decir que la hora=24, lo cuál implica un reinicio return ;------------------------------------------------------------------------------ InicializarRegistros clrf S_UNI clrf S_DEC clrf M_UNI clrf M_DEC clrf H_UNI clrf H_DEC return ;------------------------------------------------------------------------------ Temporizador movlw D'255' ; w = 50 decimal movwf PAUSE ; K = w Kloop decfsz PAUSE,f ; K = K - 1 , salta a la siguiente instrucción si es cero. goto Kloop return ;------------------------------------------------------------------------------ END ; Fin del programa.














devuelveme mis integrados qt preste _gr! _XD
ResponderEliminar:O... El reloj!!!!!... Se ve muy bien el esquema y todo. Lo descargaré y probaré --- Gracias por postearloooo. :P
ResponderEliminarMuy bonito tu diseño amigo(Y),Sugerencia XDD, puedes usar los NetLabels par conectar todo tu circuito y evitar todas esas conexiones. En el ISIS se encuentran dentro del submenu: Terminals -> Default.
ResponderEliminarSaludos Buen Proyecto (Y)
Claro amigo Ramòn, mejoraré el esquema y quizás hasta postee el PCB. Gracias por tu apoyo y tus consejos. Cuidate amigo!
ResponderEliminarHola amigo, excelente circuito muchas felicidades!!!
ResponderEliminarOye solo tengo unas dudas: ¿Tus push buttons son de 2 ó 4?
¿Estos mismos son conectos al PIC o a donde?
Las conexiones del 74LS47 a donde van? por que en el diagrama solo dice ABCDEFG.
Muchas Gracias ojala puedas responder estas sencillas dudas
Los pulsadores pueden ser de dos o de cuatro, y si te das cuenta las salidas del 74LS47 etiquetadas como ABCDEFG van a los displays que también tiene etiquetas ABCDEFG.
ResponderEliminaruna pregunta lo tienes en vmlab
ResponderEliminarVMLab creo que es para microcontroladores de la familia de Atmel cierto?
ResponderEliminarDe ser así no creo poder ayudarte amigo. Trata de revisar como manejo los registros para que lo puedas adecuar a la arquitectura de tu microcontrolador.
a cuantos voltios traba el reloj o q le pongo para q prenda por es urgente ??????
ResponderEliminarUtiliza voltajes TTL amigo, es decir 5 voltios.
ResponderEliminarque mas hombre, estaba mirando el plano, pero voe que las imagenes y el video muestran un componente que no está en el circuito, me puedes confirmar cual es y como va conectado??
ResponderEliminarClaro amigo, son los condensadores y el cristal de 4 MHz, pero he añadido una imágen en el post donde podrás apreciar la forma de conectar esos componentes. Primero haces las conexiones elementales como son el cristal, los capacitores de 22p y las conexiones a tierra y 5 voltios.
ResponderEliminarHola que tal.
ResponderEliminarOye disculpa podrías ser un poco màs amplio en tu explicación de los transistores. A donde van cada una de las tres patas.
Muchas Gracias
Oye aprovechando la duda anterior. Podrias explicarme como van las conexiones a los display? Es decir desde la salida del PIC al display van cables para cada display(Seis Cables A,B,C...) o hay una manera más sencilla de conectarlo.
ResponderEliminarMuchas Gracias
Hola Rolando, estoy interesado en hacerme este reloj, he intentado convertir el archivo a hex pero el mplab me da unos errores de configuracion y de memoria del pic.
ResponderEliminarEstos son los erroes:
Error[126] C:\RELOJ CON SEGUNDOS.ASM 1 : Argument out of range (not a valid config register address)
Warning[215] C:\RELOJ CON SEGUNDOS.ASM 2 : Processor superseded by command line. Verify processor symbol.
Message[301] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[126] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84A.INC 114 : Argument out of range (must be greater than or equal to 255)
Error[126] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Espero que puedas ayudarme. Gracias
Claro @charlyfoxtros. Lo que pasa es que no has configurado el dispositivo en tu MPLAB IDE. Para hacerlo tienes que seguir los siguientes pasos:
ResponderEliminar1. Clic en menú [Configure]
2. Seleccionar [Select Device]
3. En la lista desplegable de dispositivos(Device) selecciona el pic 16F84A.
4. Clic en OK.
5. Clic en menú [Project]
6. Clic en Quickbuild
Espero te sea de utilidad y resulva tus dudas y problemas. Saludos desde Trujillo-Perú
Muchas gracias, tenias razon, ese era el fallo que tenia.
ResponderEliminarAhora me pondré manos a la obra y realizare el PCB en proteus y lo pasaré a placa de circuito impreso.
Cuando lo tenga terminado y funcionando, pondré unas fotos para que podais verlo.
Hola Rolando, he realizado un proyecto de un reloj con pic 16f84 y cuatro displays de catodo comun, no lleva transistores para los catodos de los displys, la salida del puerto b del pic van conectados a los segmentos de los displays a traves de unas resistencias de 220 ohmios. Los displays son pequeños, pero me gustaria colocar unos displays mas grandes, cuyos anodos se iluminan a partir de 5 voltios. Quiero que sean de catodo comun, pues ya tengo la placa de circuito impreso hecha y los displays colocados, pero el problema es que no se que componentes colocar para poder utilizarlos.
ResponderEliminarHe intentado poner transistores NPN para los segmentos y PNP para los katodos pero es imposible que se puedan encender.
Con un ULN2803 tampoco porque me invierte los estados de positivo y negativo, osea que se encenderian los segmentos que deberian estar apagados.
Creo que puedo probar con unos optoacopladores a la salida del pic para activar los segmentos de dichos displays y claro unos transistores PNP para gobernar los catodos.
Espero que me des alguna idea.
UN saludo.
Rolando, proyecto en verdad muy bueno. Por la simplicidad pues veo que aprovechas al maximo el pic16f84. Tengo un poco de experiencia y he construido varios relojes en asm y en C. Mi pregunta es la sgte.: tengo la misma inquietud que el amigo charlyfoxtros, tambien tengo la placa terminada para trabajar con anodo comun (creo que con catodo comun son los que mas se usan), y quiero sacar los datos en un display de led que ya termine con de 4 leds por segmentos, o sea 28 leds por segmento y 168 leds en total, pude solucionar utilizando 2 transistores par invertir la salida, bueno un bolonqui que salio pero no quede muy satisfecho. Quisiera saber como lo harias tu las conexiones a los leds, voltaje y transistores a utilizar para pulicar la hora en los displays de leds.
ResponderEliminarUn abrazo
Hugo
Hola, en estos momentos estoy en mis clases de CISCO ^^, tan pronto llegue a casa les responderé a los dos. Saludos.
ResponderEliminarhola saludos para todos muy bueno ese proyecto, quiero hacer una pregunta quiza rolando me dice que hacer, quiero hacer un proyecto paresido a ese mismo pero que lo numero se queden fijo o sea que pueda cambiar cada numero del display y se quede fijo o sea como una pizarra no se si me entienden gracias por adelantado
ResponderEliminarHola amigo, pues si no quieres que se cambien los números... lo único que se me ocurre es que no invoques a la subrutina de incremento.
ResponderEliminarSaludos.
ok gracias pues creo ese es el perfecto para lo que quiero gracias de nuevo
ResponderEliminarque tal muy buena aplicacion.. solo tengo una pregunta en la conexion de los display para A,B,C,D,E,F,G son 6 cables para cada una? para A 6 cables uno para cada display?
ResponderEliminarDe antemano gracias.
Si amigo, son 6 cables de cada letra (A,B,C,...), uno para cada display.
ResponderEliminarRolando tengo un problema, arme el circuito en proteus pero al ejecutarlo me dice que el circuito no esta corriendo en tiempo real, me podrias ayudar.
ResponderEliminarmuy bueno tu proyecto
No hay problema amigo, el proteus dice que no está corriendo en tiempo real, pero eso es debido a la cantidad de instrucciones. Cuando lo armes en circuito real no habrá problemas.
ResponderEliminarHola Rolando, excelente tu proyecto. Necesito construir algo similar para tomar tiempos de competencias deportivas, con seteo de regresiva a progresiva, puesta a cero y start y stop. Me darías una mano para lograrlo? Desde yá, mil gracias.
ResponderEliminarWashington Rojas
lu3ei@yahoo.com.ar
Pd: Te buscaré por el Facebook.
los transistores creo q se pueden usar los bc337(npn) o bc327(pnp) no?
ResponderEliminar2N3906 son PNP, aun que estan bien puestos perdonalmente podria ocupar mejor los BDXXX por si posteriormente quieres modificar el circuito.
ResponderEliminarNota1:
bien podrias diseñar todo lo de los displays aparte junto con los transistores y solamenet dejar las lineas de entradas de datos (A,B,C,D,E,F,G), las polarizaciones de los transistores y el voltaje de alimentacion VCC, todo esto en un solo modulo y lo demas en una plquita extra; asi puedes ocupar de nuevo este modulo para posteriores proyectos..
Saludos cordiales
..::3D5F ::..
http://rhernandezg.blogspot.es/
Hola Rolando, excelente tu proyecto queria saber si exite una manera de conectar los display directamente al pic sin necesidad de usar los demas integrados
ResponderEliminarBuenísimo Señor!
ResponderEliminarExelentisimo maestro pues aprobechas tus conocimeintos al maximo lo felicito.
ResponderEliminarquillo tu ere una maquina
ResponderEliminarcomo se le agregaria para que tambien diga si es am y pm, es decir dos led q indique si es am o pm y poder modificarlo gracias; daguve@gmail.com
ResponderEliminarhola men esta bien tu proyecto eso de la programacion y simulacion , lo arme el circuito tal y como esta en la imagen compile el programa en MPLAB 7.21 y grabe el pic ,pero al momento de de probarlo los segundos corren sin parar, es decir no son exactos el conteo de segundos solo corren que podria estar pasando ..solo ese es el problema el resto esta ok...
ResponderEliminarh0la men esta de lujo tu proyecto pero al ensamblarlo los segundos corren sin parar que estaria pasando lo compile en MPLAB7 ...pero no hay solucion..ayuda
ResponderEliminarmmm tambien funciona para el 16F877A??????
ResponderEliminarSi amigo, la lógica es la misma, solo cambian los registros.
ResponderEliminarhla men ya solucione el problema porque los segundos avanzan rapido solo modifique esta seccion:
ResponderEliminar************************************************************************************************
;Verificar barrido
movfw BARR ; carga W con el número de barridos
sublw D'500' ; Resta 500 para comparar si es igual a 500 ** aca estaba 50 puse 500
btfsc STATUS, Z ; Verifica si el resultado fué 0, o sea si BARR=50?
return ; Se completó el número de barridos
goto Barrido
************************************************************************************************
el 500 supongo es medio segundo en lenguaje basic intente y salio en la etapa de registro, muy buen proyecto tienes futuro men..
Excelente, he estado un poco retirado de mi blog por cuestiones de trabajo pero me he dado cuenta que el trabajo de oficina no es para mí así que he regresado a trabajar en mis proyectos mejor. Espero la información de este blog les sea de utilidad.
ResponderEliminarSaludos a todos!
Hola rolando....excelente proyecto!me he metido en bascom pero quiero aprender mpbl! se puede trabajar piktic-3?segun dije que es un problema.
ResponderEliminarUn cordial saludo!
Hola :) ya arme tu reloj en proteus y ya compile el asm en mplab ;) creo que todo esta bien a ecepcion que es demaciado lento u_U y para que cambie un segundo pasa como medio minuto jeje... alguna solucion sobre esto?
ResponderEliminarBARR equ H'1B' ; Registro para almacenar el número de barridos. Modifica el número de barridos para que sea más lento o más rápido. Saludos.
ResponderEliminarok, gracias por la respuesta hermano :) intentare armar el circuito fisicamente porque lei en los comentarios que alguien menciono que el proteus decia que no estaba corriendo en velocidad real, y tu dijiste que al armarlo fisicamente funcionaba a full :P... cuando lo arme aviso si me salio jeje
ResponderEliminarAmigo, sería genial que si lo armas, puedas hacerle un video pues yo he perdido el video del proyecto y me gustaría volverlo a subir a mi canal de youtube. http://wwww.youtube.com/user/rolandopalermo
ResponderEliminarClaro jeje... si me sale yo lo subo al igual que mis demas proyectos :) aqui esta mi canal, yo ya me suscribi al tuyo ;). x cierto, ya compre el material, ahora si a armar se a dicho =D .. salu2
ResponderEliminarmi canal :P : http://www.youtube.com/user/Alhayn21
ya arme el circuito tal cual pero me topo con 2 problemas :S 1: el7447 recibe pero no sale nada :S
ResponderEliminar2: los transistores no funcionan como switch :S
y como datos extras: el pic manda señales pobres, lo estoy alimentando con 5v. alguna idea ? puedes ayudarme? juju
Anonimo 48
ResponderEliminarDesconecta los displays y verifica las salidas con osciloscopio antes de las resistencias en el 7448. Si pudes, tambien haz la simulacion para que no le metas tantas veces mano al circuito.
Desconecta el 7447 del pic y mide las salidas del pic
¿Checaste que los Display que sean del mismo tipo que los que se usan en este ejemplo?.
Los que se usan son 'Anodo comun' es decir el "positivo comun de los LEDs". Verifica los tuyos con un multimetro en la opcion para checar diodos. El pin comun normalmente es el de en medio de cualquier hilera de "arriba" o "abajo" dependiendo del tipo del empaque. Pones ahi la punta roja y la punta negra la colocas sobre alguno de los otros pines. Si no enciende un led, intercambia las puntas del multimetro. Si ahi enciende un led y eso significara que tus displays son de Catodo comun.
Tendras que cambiar el diseño. Voltea el transistor de forma que quede el emisor conectando al comun del display y tendras que poner el colector a tierra. El problema sera el Driver de los displays(7447), tendiras que cambiarlo por el 7448.
¿Checaste que las salidas del pic hacia 74LS138?
Por ultimo, ¿que tan usado esta el PIC?, entre mas se haya usado (no necesariamente) y con los "maltratos" (por ejemplo, conectar directo un led al pin). Los pines del pic dejan de funcionar adecuadamente mandando menor voltaje, incluso deja de funcionar un o varios pines dependiendo del programa que se le grabe. Intenta probar con otro pic.
Y ahora si, ya lo ultimo. Puedes hacer un programa sencillo que solo mande un numero y que solo swithee un solo display para ver el funcionamiento. con esto veras si es por el programa o por hardware, es lo primero que recomendaria antes de meter un programa mas "pesado".
Hola me arme el circuito en el isis proteus de igual manera lo compile en el mplab y cargo el .hex en el pic en el isis pero me dice q no esta corriendo en tiempo real, porfavor si alguien me puede ayudar porfavor espero sus respuestas ya que lo presentare como proyecto final.....
ResponderEliminarR1, R2 y R3 donde van conectados, al pic? en que pines??
ResponderEliminarayuda porfavor
En proteus no va a funcionar por ke son muchas instrucciones para el programa, solo se debe armar en protoboards o en placa , yo lo estoy haciendo espero ternario listo de aquí al miérc. 13 de julio
ResponderEliminarLOS BOTONES VAN CONECTADOS A RA0 RA1 RA2 NO ENTIENDO BIEN YA QUE EN EL DIAGRAMA ESTAN UNIDAS ESTAS PATAS VAN SEPARADAS VERDAD?
ResponderEliminarsabes, arme el cto, pero no funciona, no prende para nada, esta todo bien conectado, llevo 3 dias revisandolo pero no encuentro la falla. lo he armado mas de 4 veces
ResponderEliminarHola rolando me podrías mandar por favor la simulación que hiciste en proteus te lo agradecería mucho
ResponderEliminarhola rolando mepodrias ayudar, tengo que hacer un reloj como este tuyo y que cada 24 horas mande un pulso a un contador descendente, yo tengo conocimientos en electronica pero no se nada de pics. espero me puedas apoyar saludos
ResponderEliminarola amigo, oyes te paso mi email, ya que tuve problemas con el codigo, hacer si me ayudas
ResponderEliminarmundo_toxico@hotmail.com
PORFAVOR AMIGO PARA QUE SIRVEN LOS PULSADORES.
ResponderEliminarLO SIMULE EN EL PROTEUS Y LA VERDAD ES KE SALE UN CERO Y SE BARRE,PERO NO CUENTA.NECESITO TU AYUDA.GRACIAS
Hola como estas ? Espero que estés muy bien, lo felicito por diseñar este circuito tan espectacular, pero ya que eres muy buena persona me gustaría que me hicieras el gran favor de responderme una pequeña pregunta acerca de este circuito de reloj ¿con que formato de hora trabaja este reloj ? es decir, con 12 horas o con 24 horas
ResponderEliminarkon 24 Hrs...
ResponderEliminarAL INTRODUCIRLE LA SEÑAL DE ENTRADA A LOS DISPLAY NO APARECE EL CONTEO DE LA HORA, LO QUE DESCRIBE EL CIRCUITO ES UNA ESPECIE DE SALTO DE UN DISPLAY A OTRO QUE CONSEJO ME PUEDES DAR PARA SOLVENTAR ESTE PROBLEMA HERMANO
ResponderEliminarexcelente proyecto, alguien me puede indicar como poner una pausa en el conteo.
ResponderEliminargracias lo voy probar ,en el mplab salio bien ohora lo voy a hacer en proteus
ResponderEliminaruna pregunta para hacer un reloj digital tambien puedo utilizar el integrado 4026B
ResponderEliminarNunca he usado ese circuito amigo pero por lo que he podido observar, si es factible.
ResponderEliminarSaludos Rloando. Te felicito por tu Proyecto y gracias por compartirlo.
ResponderEliminarTe pido de favor, si es posible que nos pudieras compartir tambien el PCB, los archivos .ASM y .HEX ya compilados, de antemano te agradezco tu fina atencion.
Gracias amigo por tu comentario. Te comento que no realicé el diseño para PCB del circuito. Si alguien lo hubiese desarrollado sería bueno que lo compartan.
ResponderEliminarSaludos.
Saludos Rolando, gracias por tu respuesta. Seria posible que los archivos .ASM y .HEX ya compilados los poddrias postear o mandar via mail? me urge porfa, te lo agradeceria mucho, josefcore@gmail.com
ResponderEliminarGracias Rolando por tu respuesta. Seria posible que los archivos .ASM y .HEX ya compilados, los pudieras postar o mandarmelos a mi mail? me urge porfa, josefcore@gmail.com de antemano te agradezco tu fina atencion.
ResponderEliminarhola amigo donde tienes el archivo adjuntado porque no vi nada
ResponderEliminarpodrias postear el esquematico de isis, de ante mano gracias
ResponderEliminargenial amigo esta muy interesante esto. Lo realizare.mañana comprare los materiales y si todo sale bien grabare el funcionamiento para que pongas el video
ResponderEliminarmuy bien amigo!! para que sirve los pushbotons?? para modificar los diplays y manipular la hora??
ResponderEliminarque bien amigo! los push botons para que sirven? para cambiar los números en el display y manipular la hora??
ResponderEliminar