# 74ls47 y contador con PIC16f84



## starex (Sep 23, 2011)

Buen día:

me tomo el atrevimiento de venir a molestar ya que no tengo mejor referencia en internet que el foro de electrónica acerca de esta clase de proyectos.

Mi caso es que estoy haciendo una práctica de un contador BCD usando un programita de 16f84 para mostrar valores de 0 a 15 (claro teniendo en cuenta los valores mostrados por el integrado BCD desde el 10 al 15) pero no me funciona en protoboard.

Realicé la simulación usando MPLAB y proteus (cosa que si quieren puedo explicar para los que no saben) y supuestamente el código funciona. 

No se que puedo tener mal armado o si de pronto algun componente esta dañado (ya tuve la mala experiencia con un CRISTAL que funcionaba solo cuando le ponía el dedo encima )

Adjunto dejo el diseño en proteus del circuito y el proyecto ya compilado de MPLAB. Tamién dejo adjunto el video de la simulación de proteus en YOUTUBE para los que no saben como usarlo (cosa que dudo) para que vean que presuntamente funciona .






Les agradezco cualquier ayudita. (Si el video de youtube no funciona, por favor esperar un poco que lo acabo de subir, cuando estaba creando este hilo)

PDTA: Antes que me pregunten sobre las resistencias que lleva el display, puedo decir que tengo una resistencia de 330 a VCC, en vez de poner una por cada linea del display. También probé el 74ls47 usando un dipswitch, y también estube leyendo sobre si debo usar en vez del 74ls47 el 74ls48 y efectivamente el primero es para ánodo común.


----------



## Gudino Roberto duberlin (Sep 23, 2011)

Hola Amigo, que valor de cristal usas?, los valores de los condensadores del oscilador son los correctos?
Esto ultimo que menciono no tiene influencia en el problema pero, debes colocar una R por cada segmento del display.


----------



## starex (Sep 23, 2011)

Buen día:

Gracias por la respuesta. En cuanto a las preguntas el cristal que uso es de 4 MHz como el que recomiendan en todos los tutos de pic. Los condensadores del cristal son cerámicos No 22 (la verdad en este momento no recuerdo que valor son).

y como ya había dicho, he probado el BCD usando un dipswitch enviado los correspondientes valores para cada número, por lo que he comprobado que usando una sola resistencia con la salida a VCC del display de anodo común debería funcionar. Claro que puedo hacer la prueba para verficar que esta pudiera ser el problema aunque ciertamente tengo mis dudas.

Salu2 y de nuevo gracias por responder.


----------



## Chico3001 (Sep 23, 2011)

Pero que es lo que hace (o no hace)?... simplemente no se ve nada?

Si en la simulacion funciona entonces es un problema con el cristal, algunos cristales ya traen los capacitores integrados y no es necesario colocarlos, y de echo si los colocas el cristal no funciona, intentaste retirarlos?

Si esto no funciona entonces es un problema con el PIC, o esta mal grabado o se murio de paro cardiaco.. intenta grabando uno nuevo, tambien puedes hacer un programa simple que encienda y apague un led para probar si el PIC esta funcionando...


----------



## norikatzu (Sep 23, 2011)

elimina el IC de la serie 74 y conectalo directo a las salidas del PIC. asi te simplificaras el diseño


----------



## starex (Sep 24, 2011)

Gracias por las respuestas:



			
				norikatzu dijo:
			
		

> elimina el IC de la serie 74 y conectalo directo a las salidas del PIC. asi te simplificaras el diseño



Lo siento pero la idea es usar este integrado para hacer circuitos mas complejos mas adelante, por ejemplo un reloj digital 



			
				Chico3001 dijo:
			
		

> Pero que es lo que hace (o no hace)?... simplemente no se ve nada? ...



En cuanto a tus recomendaciones, tengo varios programitas ya hechos con el pic (de hecho tengo dos uno de hace como 5 años y otro que acabo de comprar. Con ambos he hecho pruebas con un programa que enciende y apaga un led repetidamente y con ambos pic funciona. En cuanto a los condensadores, pues como he dicho tengo cristales de este tipo:







Y según entiendo deben ser usados con los condensadores que tengo, igualmente los programas que ya tengo los probé usando estos mismos, por lo que suspuestamente el cristal (de hecho tengo 3 de los mismos pensando que se habían dañado también).

Lo de grabar el pic, pues lo he intentado varias veces, he grabado varios programas, el del led, otro que enciende varios led con un dipswitch, etc.

COmento que ami parecer el problema podría estar en el pulsador que uso como señal para habilitar la interrupción del pic. Como se poco o nada de electrónica, no se como se debe armar el pulsador. Tengo dos pulsadores, uno que envia la señal de habilitar RB0, y otro para el MCLR del pic, este ultimo si funciona haciendo parecer que el problema efectivamente puede ser el cristal.

En el proximo post voy a dejar mi codigo por aquello de que habrán algunos que les da flojera descargar el archivo del primer menasaje .

PDTA: Dejo unos links de videos en youtube que hice para unos compañeros de curso. 










```
; ZONA DE DATOS

	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC			;Configuracion del programador

	LIST P=16F84A								;Selección del microcontrolador
	#INCLUDE<P16F84A.INC>						;Set de comandos y variables del microcontrolador


;Configuracion de puertos
	org 	0x00								;Origen del programa
	goto 	INICIO						;Ir al inicio de programa
	org		0x04							;Vector de interrupcion
	goto	ISR								;Subrutina de interrupcion
	org		0x05

INICIO bsf STATUS,RP0						;Pasar a banco 1
	movlw	b'11111111'					;Cargar 1 en W
	movwf	TRISB						;Configurar RB0 como entrada
	clrf	        TRISA						;Puerto A como salida
	bcf		OPTION_REG,6					;Flanco descendente
	bcf		STATUS,RP0					;Pasar a banco 0
	clrf	PORTA							;Limpiar puerto a, puerto b
	clrf	PORTB

;Habilitar interrupciones
	bsf		INTCON,GIE					;Habilitar todas las interrupciones
	bsf		INTCON,INTE					;Que sean externas

SUENIO	SLEEP
	goto	SUENIO							;A dormir

ISR	btfsc	PORTB,0							;Verificar que se suelte el pulsador
	goto	ISR								;Volver hasta que lo suelten
	call	LED								;Ir al contador
	bcf		INTCON,INTF					;Borra la bandera
	retfie								;Volver de la interrupcion

LED incf 	PORTA,1							;Incrementar en 1 PORTA
	btfsc	STATUS,DC						;Si DC esta en 1
	call 	CONT0							;SI Ir a CONT0
	RETURN								;NO Volver a ISR

CONT0	clrf PORTA							;Poner a 0 PORTA
	return								;Volver a LED

	END
```


----------



## zhabinopaz (Sep 24, 2011)

Oolle que programa utilizaste para la programacion y me puedes pasar un pdf con instrucciones de como programar :nuevo:. Saludos desde Guatemala


----------



## starex (Sep 24, 2011)

MPLAB => Sirve para desarrollar programas en asembler para la familia PIC.
Proteus => Sirve para hacer los esquemas de los circuitos y simularlos.

El tuto que estoy estudiando junto con un libro que compré (cuyo nombre es desarrollo de proyectos con pic16f84) lo puede encontrar en:

http://perso.wanadoo.es/luis_ju/soft/desc_tut.html

Es de los mejores documentos que he encontrado sobre programación en PIC. Le escribí al dueño de la página pero me imagino que no esta disponible.

Para desarrollar los ejemplos nada como hacerlos en la vida real, por lo que sería necesario un programador de PIC. hace un tiempo pude hacer un JDM en protoboard pero cuando lo hice en PCB no me sirvió :S Hay cientos de programadores caseros en GOOGLE USB, Serial, etc.

Es bueno recordar que GOOGLE es tu amigo XD


----------



## zhabinopaz (Sep 24, 2011)

Starex tienes toda la razon ahorita trato de buscar la manera de como crear un programador de EEPROMS que manejen las lineas de 27cxxx y los PIC Z80 :antiguos: pero sinceramente no he encontrado nada que me pueda servir y te agradesco tu aporte!!!


----------



## starex (Sep 24, 2011)

Siempre existe la posibilidad de comprar uno. Ami me tocó esta opción y me salió mas barata aunque no es tan gratifcante como tener un programador hecho por uno mismo


----------



## Gudino Roberto duberlin (Sep 24, 2011)

Hola Amigo, prueba utilizar el oscilador interno.


----------



## D@rkbytes (Sep 25, 2011)

Gudino Roberto duberlin dijo:


> Hola Amigo, prueba utilizar el oscilador interno.


Oscilador interno en un 16F84


----------



## starex (Sep 25, 2011)

Darkbytes dijo:
			
		

> Oscilador interno en un 16F84


DX

http://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf


----------



## Gudino Roberto duberlin (Sep 25, 2011)

Darkbytes dijo:


> Oscilador interno en un 16F84



Hola Amigo, me referia al modo RC, la idea era probarlo sin cristal.


----------



## D@rkbytes (Sep 26, 2011)

Gudino Roberto duberlin dijo:


> Hola Amigo, me referia al modo RC, la idea era probarlo sin cristal.


Si, eso si a RC o con las posibilidades extras del 16F84, pero no es interno aunque oscile internamente es configurable externamente.
OK solo que hasta me regrese para ver si ya habia cambiado el colega de PIC por otro
con oscilador interno, y como el titulo es 74ls47 y contador con PIC16f84 pues
me extraño eso de usar el oscilador interno.
Y pues retomando el tema del problema con el Micro del amigo, les comento que
yo tube un problema similar con un 16F84 el cual no respondia un Bit del Puerto B
Todo funcionaba muy bien solo ese pin no respondia.
Resulto ser que fue el protoboard el que estaba dañado en una de sus líneas.


----------



## Gudino Roberto duberlin (Sep 27, 2011)

Hola Colega Darkbytes, bueno como comentario que no es util al otro colega, pero en fin, cuando me inicie en el mundo PIC, no podia dar con el correcto funcionamiento del puerto RA4 del 16F628, sustitui varios PICs, con la sospecha que tenian un problema de Hard, hasta que averigüe, que este puerto posee salida a "drenador abierto". Gracias SAludos.-


----------



## D@rkbytes (Sep 27, 2011)

Gudino Roberto duberlin dijo:


> Hola Colega Darkbytes, bueno como comentario que no es util al otro colega, pero en fin, cuando me inicie en el mundo PIC, no podia dar con el correcto funcionamiento del puerto RA4 del 16F628, sustitui varios PICs, con la sospecha que tenian un problema de Hard, hasta que averigüe, que este puerto posee salida a "drenador abierto". Gracias SAludos.-


Saludos, púes si, efectivamente, pero también en el 16F84
Por eso hay que colocar resistencia pullup externa en ese bit.


----------



## starex (Sep 28, 2011)

Darkbytes dijo:


> yo tube un problema similar con un 16F84 el cual no respondia un Bit del Puerto B Todo funcionaba muy bien solo ese pin no respondia. Resulto ser que fue el protoboard el que estaba dañado en una de sus líneas.



Pues yo también habia pensado en eso, sin embargo la protoboard ya la compré (me robaron  ) y sigue sin funcionar. Me tocaría probar en la otra que tengo :S O cambiar los integrados de posición.



			
				GUDINO dijo:
			
		

> Hola Colega Darkbytes, bueno como comentario que no es util al otro colega, pero en fin, cuando me inicie en el mundo PIC, no podia dar con el correcto funcionamiento del puerto RA4 del 16F628, sustitui varios PICs, con la sospecha que tenian un problema de Hard, hasta que averigüe, que este puerto posee salida a "drenador abierto". Gracias SAludos.-



No entendí, voy a buscar datos sobre este pin.

Gracias por las respuestas, espero conseguir algo ya que ahora mismo tengo que hacer la prueba con un display LCD y un asignador de turnos.


----------



## starex (Oct 18, 2011)

Revivo el tema ya que al parecer mi problema podría estar en la forma en la que estoy leyendo el pulsador que debería iniciar la interrupción en el pic.

Resulta pues que buscando, en mis ratos de ocio, encuentro algo que se llama rebotes (que creo que como estudiantes de electrónica mas avanzados deben conocer) y se supone que hay que tener en cuenta esto antes de poder recibir algún pulso desde cualquier elemento mecánico.

Encuentro que hay dos formas de hacerlo, por software y por hardware. E intentado hacerlo usando un condensador de 100nf pero no hay modo. Igualmente en la rutina de atención a la interrupción aparece esta parte.


```
ISR    btfsc    PORTB,0                            ;Verificar que se suelte el pulsador
    goto    ISR
```

Pero al parecer no es suficiente para que funcione. En el tuto que estoy siguiendo hablan de usar dos resistencias una de 5K después del pulsador que esta conectado a 5v y una de 100 a tierra, desde allí se debería obtener el 0/1 lógico para hacer que la interrupción responda. Pero sigue sin funcionar.

Qué es lo que tengo mal? La verdad no se :S


----------



## clocko (Oct 19, 2011)

para el rebote puedes utilizar una resistencia en serie con el pulsador y a su vez un capacitor en paralelo, intenta con el siguiente circuito siu no te funciona prueba valores mas grandes de capacitor verifica que el tiempo de carga del capacitor no sea muy grande si no te funciona aun, busca por internet hay muchos circuitos eliminadores de rebote. saludos.


----------



## Gudino Roberto duberlin (Oct 19, 2011)

Hola Colega, bueno como a modo orientativo el ejemplo que expones aplica el efecto deseado, pero... aparace un problema en el instante que el sistema es alimentado. Pues como el condensador esta descargado, este obliga a un estado como si el pulsador hubiese sido presionado!.
El condensador en este circuito se conecta a modo pull-up, es decir en paralelo con R1 con un valor esta de aprox. 3k3.-


----------



## clocko (Oct 20, 2011)

correcto entiendo el detalle, dices que mandaria un solo pulso al alimentar el circuito sin que nadie presione el boton, claro...... tambien podria conectar r1 a tierra y vcc al push button (al reves de como estan) solo que el cambio de estado seria de cero a uno en este caso


----------



## starex (Oct 21, 2011)

Lo siento mis pocos o nulos conocimientos acerca de componentes me impiden entender correctamente lo que intentan decirme.

Desde el principio, el efecto rebote es aquel que hace que el estado de 1/0 lógico no sea estable sino que por el contrario genera una serie de señales indeseadas al momento de recibir el pulso.

Ahora bien, se espera que con el condensador que recomiendan (que veo que es de 10uF) se pueda estabilizar este pulso.  También a modo de aclaración entiendo que "pull up" es el método en el que se trata de estabilizar los estados lógicos 0/1 en cuanto a voltaje es decir que cierto rango corresponde a 0 y otro tanto para 1 y no se quede en valores intermedios.

Sin embargo tengo una duda, no sería muy alto el voltaje disipado con resistencias superiores a 1K?

Todavía me falta demasiado camino por recorre, parece que tengo mas futuro cocinando platanos


----------



## clocko (Oct 22, 2011)

Porque no intentas armando el circuito y asi ves como funciona, haciendolo puedes aprender mucho


----------

