Circuito con PIC 16F628A. Funciona en Proteus pero no en protoboard

Hola Amigos,

Tengo el circuito que mas abajo les pongo y el codigo en PBP porque no lo he hecho funcionar en el protoboard. EN proteus funciona perfectamente. El PIC lo he probado conectando un led a la patilla RB0 y parpadea. El fuse del MCLR lo he puesto a OFF al grabar pero aun asi he probado a colocar una resistencia de 4K7 entre la patilla 4 y +5V y tampoco hace nada. A las patillas del puerto A le llegan 4.1 V pero a la salida no hay nada. Como no se que mas hacer, aqui os muestro el codigo y el esquema por si me podeis ayudar.

Saludos.
 

Adjuntos

  • Codigo.txt
    1.7 KB · Visitas: 58
  • Prueba01.PDF
    58.2 KB · Visitas: 66
Hola:

Yo de PBP no tengo ni idea, pero se me ocurre plantear: ¿tienes bien configurado el Oscilador? ¿No hace falta ponerle cristal?
 
Gracias por tu respuesta. No necesita oscilador porque estoy utilizando el oscilador interno. Cuando lo programo con Winpic800 lo configuro como INTRC I/O.

Saludos.
 
1) En el puerto A, asegurate de definir como entradas únicamente aquellos bits que están conectados a entradas físicas, nunca es recomendable dejar entradas digitales en el aire. El resto de los bits, definilos como salidas.
2) No compares el valor del registro de datos de A usando todos sus bits, usa una máscara para dejar solamente los valores de los tres bits menos significativos que son los que están conectados.
 
Muchas gracias por vuestras respuestas. Rachelies, el circuito lo subi en el primer post; si no lo puedes ver lo subo otra vez.

Chclau, voy a probar ahora mismo con lo que comentas. El primer punto lo tengo claro pero el segundo, el tema de la mascara no lo tengo muy claro de como hacerlo; podrias poner una linea de ejemplo?. Como veras soy nuevo en esto y algunos conceptos todavia no los domino.

Saludos.
 
Supongo que estás usando PICBasic, que nunca he usado, así que no puedo compilar la línea siguiente para probar si la sintaxis es correcta, la idea está allí, espero que te ayude. Como ves, los ceros en la máscara hace que los valors de los bits en esas posiciones no afecten tu decisión. Suerte.



IF (PORTA & %00000111)=%00000000 THEN
goto Salida1
ENDIF
...
IF (PORTA & %00000111)=%00000111 THEN
goto Salida8
ENDIF
 
Ok, utilizo el PicBasic Pro. Voy a probar estas dos cosas y ya os cuento.

rachelies, no te habia entendido. Aqui esta.

Saludos.
 

Adjuntos

  • Prueba01.rar
    19.7 KB · Visitas: 128
Última edición:
Por pedir algo más, ¿podrías adjuntar los archivos que te genera al compilar? No tengo PBP y no lo puedo compilar para simularlo.
¿Has probado a dar una entrada puenteando a +5V sin utilizar los optoacopladores?
 
Reviza el calculo de R7,R8,R9... segun yo la corriente es insuficiente para los optos...

el codigo esta medio chistoso, pero deberia funcionar...

al inicio de todo el codigo pon esto...

Código:
@ DEVICE Pic16F628A
@ DEVICE Intrc_OSC
@ DEVICE WDT_Off 
@ DEVICE PWRT_Off
@ DEVICE BOD_Off
@ DEVICE MCLR_Off
@ DEVICE LVP_Off
@ DEVICE CPD_Off 
@ DEVICE PROTECT_Off

los Puertos RA0 RA1 y RA2 estan protegidos asi que le puedes meter los 11.3v directitos y sin problemas... osea que los optos sobran...
 
Última edición:
aun asi es bueno reducir la corriente de entradacon una resistencia y si eso un zener para limitarlo a 4,7v.
al tener el puerto a configurado como entrada, añadele una resistencia e 1k que este en 5v para poder darles siempre un bit 1, quitando cuando pulsas lo que sea que derive a masa "bit 0". posilemente se raye por eso el simulador. aun asi si en el circuito no la pones tambien podria afectar.

porlodemas el programa nolo veo mal muchas ordenes para algo tan simple.. pero buenoya algo para ir empezando.

no te seria mas reducido meter porta en una bariable esplazar los bit y espues sacarla por el puerto b.

un saludo



bueno una imagen esplica mas que mil palabras...
 

Adjuntos

  • Dibujo.JPG
    Dibujo.JPG
    17.7 KB · Visitas: 55
Última edición:
Antes de nada deciros que por fin lo he hecho funcionar. El problema estaba en la configuración del Winpic800. Hay que marcar una opción que no lo estaba. Adjunto envio fichero por si alguien tiene el mismo problema. Otra cosa es que el programa no funciona todo lo fino que yo quisiera; es decir, cuando enciendo la placa, los led actuan de acuerdo con la posición del conmutador, pero cuando voy cambiando las posiciones una veces lo hace bien y otras no. Si apago y enciendo de nuevo, otra vez lo hace bien y cuando cambio otra vez se vuelve loco. Quizas por esto digas que el programa esta medio chistoso.

Haber, vayamos por partes porque me habeis dado mucha información en muy poco tiempo y me cuesta digerirla.

El calculo de las resistencias lo he hecho según la formula que he visto en un libro sobre el 16F84A que es: R= Vin - 1.2V /5mA. Segun esta sale un valor de 2K2. Acabo de empezar a programar por lo tanto se podra hacer mejor, estoy seguro de ello, si me puedes orientar para que no fuera tan chistoso el codigo te lo agradecería mucho. En PBP, para programar lo fuses como tu dices, tendría que compilar con PM en vez de MPASM y en SO superiores a XP no es recomendable segun la pagina de Microchip (yo uso W7). En cuanto a alimentar directamente con 12 V, no he visto nada en el datasheets referente a eso. Es posible?. Por el puerto B que saldrian 12 V o 5V?.

peep387, no entiendo lo de las resistencias y el zener, no se si te refieres a poner la R cuando alimente el pin directamente con 12V o siempre. Podrias hacer un esquema?. Como seria el programa reducido?.

Haber, aun a pesar de extenderme mucho, voy a explicarme bien. La idea del circuito es: en función de la posición de un conmutador de 8 posiciones sale un codigo BCD pero de tres cifras solamente y a 12V. Dependiendo del codigo alimento 8 pequeños motores. El PIC lo quiero para mostrar en un LCD el motor que esta activo en cada momento. El circuito lo voy haciendo poco a poco para ir asegurandome de que va funcionando bien. Ahora estoy en la fase del PIC y antes de conectar el LCD quiero estar seguro de que funciona. Lo que hago es poner 3 led a la entrada del PIC y si funciona tengo que tener el mismo codigo a salida que a la entrada. De momento, como os he dicho mas arriba, he conseguido que se enciendan pero solo funciona bien despues de apagar y encender.

Siento mucho haberme extendido tanto y por encima de todo, muchas gracias por vuestra ayuda.

Saludos.
 

Adjuntos

  • WP800.jpg
    WP800.jpg
    39.2 KB · Visitas: 70
Antes de nada deciros que por fin lo he hecho funcionar. El problema estaba en la configuración del Winpic800. Hay que marcar una opción que no lo estaba. Adjunto envio fichero por si alguien tiene el mismo problema.

No creo que haya sido ese el problema, hasta donde se nada tiene que ver la Opcion de AVR de Atmel con la de los Pic de microchip... pero bueno... dices que funciono...


Otra cosa es que el programa no funciona todo lo fino que yo quisiera; es decir, cuando enciendo la placa, los led actuan de acuerdo con la posición del conmutador, pero cuando voy cambiando las posiciones una veces lo hace bien y otras no. Si apago y enciendo de nuevo, otra vez lo hace bien y cuando cambio otra vez se vuelve loco. Quizas por esto digas que el programa esta medio chistoso.

si el como estas usando la bandera no creo que sea lo adecuado... llega hasta 8 y efectivamente tienes que reiniciar para empezarla en 0... por eso digo que esta chistoso...



El calculo de las resistencias lo he hecho según la formula que he visto en un libro sobre el 16F84A que es: R= Vin - 1.2V /5mA. Segun esta sale un valor de 2K2.

depende mucho del opto, pero normalmente se necesitan 10mA... tienes 12v-1.4v aprox.de la caida de los diodos. menos 1.2v de Led de opto da 1k aprox. pero verifica las caracteristicas del opto que tengas...

En cuanto a alimentar directamente con 12 V, no he visto nada en el datasheets referente a eso. Es posible?.
yo no dije que lo alimentaras con 12v sino que en las entradas RA0, RA1, YRA2 que estas utilizando tienen diodos de proteccion y puedes poner los 12v (menos las cadas de voltaje de los diodos) directos, obviamente como menciono peep287 limitando la corriente con una resistencia, segun el datashit aguanta una corriente maxima de 20mA, asi que 12v/.02mA= 600Ω, con 10k seguro funcionara bien...

Por el puerto B que saldrian 12 V o 5V?.

por el puerto B saldrian 5v... porque el pic no lo puedes alimentar en Vdd con un voltaje mayor de 6.5 con respecto a vss, repito yo no dije que se alimente con 12v



Haber, aun a pesar de extenderme mucho, voy a explicarme bien. La idea del circuito es: en función de la posición de un conmutador de 8 posiciones sale un codigo BCD pero de tres cifras solamente y a 12V. Dependiendo del codigo alimento 8 pequeños motores. El PIC lo quiero para mostrar en un LCD el motor que esta activo en cada momento. El circuito lo voy haciendo poco a poco para ir asegurandome de que va funcionando bien. Ahora estoy en la fase del PIC y antes de conectar el LCD quiero estar seguro de que funciona. Lo que hago es poner 3 led a la entrada del PIC y si funciona tengo que tener el mismo codigo a salida que a la entrada. De momento, como os he dicho mas arriba, he conseguido que se enciendan pero solo funciona bien despues de apagar y encender.

Siento mucho haberme extendido tanto y por encima de todo, muchas gracias por vuestra ayuda.

Mejor pon el esquema como va a quedar porque el LCD seguramente va en todo el puerto B y el puerto A lo tendras que utilizar para el selector y los motores, y pues como manejes el puerto A va a ser lo importante...

en cuanto a lo de los fuses ok.. no tenia idea en que estas compilando... Dijiste Pic basic Pro, asi que ya estoy confundio....
 
Última edición:
Hola...me parece que con algo sencillo como esto te tendría que funcionar mas previsible...solo tengo el Proton.

Device = 16F628A
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BOREN_OFF,LVP_OFF,MCLRE_OFF
Declare Xtal = 4
All_Digital= true 'El puerto A es digital

TRISA=255
TRISB=0

Inicio:
If PORTA=0 Then PORTB= 0
If PORTA=1 Then PORTB= 32
If PORTA=2 Then PORTB= 64
If PORTA=3 Then PORTB= 96
If PORTA=4 Then PORTB= 128
If PORTA=5 Then PORTB= 160
If PORTA=6 Then PORTB= 192
If PORTA=7 Then PORTB= 224
GoTo Inicio
End


Saludos.

Ric.
 
Gracias lubeck por las aclaraciones. Yo si que no se si tendra que ver o no el AVR pero tras grabar varias veces y no conseguir nada, me puse a revisar la configuración del Winpic y vi que esa opción si se marcaba, leia y grababa la configuración. Si no se la ponia en el codigo porque PBP no me dejaba y si no marcaba no la grababa, probe a marcarla y a partir de ahi el pic funciono. Con respecto al Opto, utilizo el 4N32 y teniendo en cuenta tu experiencia, tendras razón en cuanto a la resistencia. Lo de alimentar a 12V, te entendi perfectamente, lo que pasa es que me explique fatal. Voy a hacer la prueba de inmediato colocando 10K y menos componentes.
Adjunto envio el esquema en proteus del esquema definitivo. Recuerda que los tres led a la salida de los diodos seria la salida en codigo BCD hacia los motores.

Otra cosa, me gustaria saber como se puede responder intercalando mis preguntas y el codigo ponerlo dentro de un cuadro de texto. Donde puedo encontrar esa ayuda?.

Ricbevi, no conozco el proton pero creo que sera similar al PBP asi que voy a buscar por inet y lo traducire a PBP. Muchas gracias a los dos.

Saludos.
 

Adjuntos

  • Esquema definitivo.rar
    19.9 KB · Visitas: 63
Ahora si ya entendí que es lo que necesitas...

y pues lo de los optos ya no me parece tan mala idea asi como lo tienes pensado(por aquello de las inducciones), que por cierto si seria mejor que le pusieras la resitencia de 1K para que sature correctamente... segun el manual si es de 10mA y 1.2V de caida... y el codigo de Ricbevi te funcionaria mejor... pero no podrias usar los puertos restantes del A (tendrias que cambiar el codigo)...

nada mas toma en cuenta que los diodos tienen una caida de voltaje a los motores y que soporten la corriente que va a fluir por ellos, supongo que seran motores pequeños..
 
Ok lucbek, voy a cambiar la resistencia de 2k2 por la de 1k. Voy a probar el codigo y si va bien, conectare el lcd. Espero vuestra amable ayuda si tengo dificultades con el codigo. Por lo que comentas, el circuito esta correcto; es asi?. Los motores si, son pequeños; de poco consumo.
Saludos.
 
Espero vuestra amable ayuda si tengo dificultades con el codigo. Por lo que comentas, el circuito esta correcto; es asi?. Los motores si, son pequeños; de poco consumo.

pues si, el circuito deberia funcionar, y si tienes dudas pues cuenta con nosotros,

lo que pasa es que yo pense que los motores los ibas a controlar con transistores o mosfets desde el micro, pero segun veo el micro solo va a servir para desplegar su estado(encendido/apagado).

en cuanto tengas algo del codigo si gustas lo subes...
 
Última edición:
Bueno lubeck, este es el codigo que he hecho. He tratado de explicar cada linea para que sea entendible. Que tal lo ves?, supongo que se podra mejorar mucho.

Saludos
 

Adjuntos

  • Conmuta_Motores.txt
    2.6 KB · Visitas: 29
Atrás
Arriba