Problema al activar salidas del PIC16f628A

Tengo un problema y es que desde éste PIC quiero activar un par de transistores pero por programa activo dos salidas y estas no se activan. Si con un cable pongo 5v en estas salidas ya se quedan activadas y por software los puedo desactivar perfectamente, pero ya digo que por programa no se me activan.

Que puede pasar? es la primera vez que me pasa... Tengo que entregar el proyecto ya y no se como solucionar esto....

Gracias a todos!
 
Hola, antes que nada, subi el código de tu programa sin ensamblar y el diseño de tu circuito, ya que de lo contrario estaríamos adivinando y/o especulando sobre la falla.

Saludos
 
Lo siento, soy nuevo aqui y tendré que acostumbrame a la dinámica de éste foro.
Simplemente hago un bsf PORTB,0 para activarlo i un bcf PORTB,0 para desactivarlo no tiene más historia y el diseño es el siguiente:
He marcado lo que son las líneas importantes para el fallo del programa con unas flechas para que no tengais que buscar.
 

Adjuntos

  • esquema_485.jpg
    esquema_485.jpg
    13.1 KB · Visitas: 71
  • ba_232_1_201.asm
    7.9 KB · Visitas: 45
Prueba cambiando la resistencia de polarizacion del transistor que tienes de 15K por una de 1K, puede que no generes la corriente suficiente para mover al rele.

Yo con ese micro no tengo esperiencia, pero has verificado que los pines utilizados para activar el rele no sean del tipo colector abierto.
Si tienes duda coloca una resistencia de 1K desde la salida del pic a positivo.

saludos
 
Creo recordar que RB era open colector , o activas los pushpull o cambias la resistencia de 1k y la poner a positivo. revisa el datasheet.
O sea base directamente al pic, la resistencia a 5V y al pic/base.


Te falta el diodo de proteccion del rele, te sirve cualquiera, debes conectarlo en parallelo, pero INVERTIDO o a la larga fulminaras el transistor, recuerda que es una carga inductiva y se generan tensiones INVERSAS de unos centenares de voltios pero pequeñas corrientes, suficiente para crear pequeñas perforaciones.
 
pepechip dijo:
Prueba cambiando la resistencia de polarizacion del transistor que tienes de 15K por una de 1K, puede que no generes la corriente suficiente para mover al rele.

Esto es correcto, en la hoja de datos del 16F628 podes observar la entrega de corriente del puerto B, en modo fuente y en modo sumidero, y la resistencia que has colocado es demaciado grande, lo que no produce una polarización de base del BD135.

tiopepe123 dijo:
Creo recordar que RB era open colector , o activas los pushpull o cambias la resistencia de 1k y la poner a positivo. revisa el datasheet.
O sea base directamente al pic, la resistencia a 5V y al pic/base.
Te falta el diodo de proteccion del rele, te sirve cualquiera, debes conectarlo en parallelo, pero INVERTIDO o a la larga fulminaras el transistor, recuerda que es una carga inductiva y se generan tensiones INVERSAS de unos centenares de voltios pero pequeñas corrientes, suficiente para crear pequeñas perforaciones.

Coincido en activar las resistencias de polarización interna.
Y lo del diodo es fundamental.
Otra alternativa es que concetes directamente al puerto un ULN2803A y directamente controles los reles. En fin, asegurate de que la tensión de trabajo de los relé sea compatible con la tensión de trabajo de tu circuito, no vaya a ser cosa que quieras conmutar reles de 12 o 24Vcc con solo 5Vcc.

Saludos
 
A ver, soy novato en el foro pero no en electronica jajaja el diodo esta puesto pasa que el dibujo lo hice rapido para colgarlo aqui y me dejé de dibujar el diodo, fallo mio, lo siento. El relé es de 5 voltios i consume aproximadamente unos 30mA, el pic me da una salida de 5 voltios i 25mA de modo que seria suficiente para activar el relé, pero si solo tubiese que activar el relé, como hay mas cosas pues no es suficiente, por eso puse el transistor. Las salidas que uso no son en colector abierto. Y el circuito lo probé sin el pic i funciona a la perfección, y si no me equivoco en los calculos al transistor le llegan 333µA cosa que con un HFE de 132 pasa a ser 44mA aprox por colector, suficiente para activar el relé.

La verdad es que estoy muy desorientado, no se que puede ser, probaré como me habeis sugerido de reducir la R de base.

Gracias a todos por comentar ;)
 
Acabo de probar lo de bajar la R base y sigue funcionando del mismo modo, mal, ya tenemos una solucion descartada, y la otra opción era poner las resistencias de pull-up internas del pic, pero tampoco funciona entonces....
 
A ver.... estaba viendo el archivo .asm y las dos instrucciones que (atentamente) marcaste con las flechas, en la parte de código "Bucle de Lectura":
Código:
    goto 	vista1   
	bsf		PORTB,0				;Habilita la activacio del rele ** <-----
	bsf		PORTB,3				;Activa brunzidor ** <-----

lo que no veo o quizás no me doy cuenta es como el programa llega a ejecutar éste par de instrucciones.
Distinto es en la parte de "Visualitza" en que están estas instrucciones:
Código:
	bcf		PORTB,0					;Deshabilita el rele **  <-----
	bcf		PORTB,3					;Para brunzidor **     <-----

Entonces, lo que pasa es que las salidas nunca se activan, aunque sí se desactivan.
Especulando un poco por ahí te olvidaste de testear algún bit (instrucción de testeo y salto, btfss o btfsc) antes del goto vista1, o la etiqueta LEC tiene que estar inmediatamente después de goto vista1.
Pero bueno, así como está, las salida RB0 y RB1 no se ponen en alto, porque las instrucciones que lo hacen nunca se ejecutan
 
una pruebita nada mas, copia la configuracion de tu pic y solo activa un segundo el pin b0 y b3 para ver si no es tu configuracion el problema
;*******************************************************************
; Inicializar Ports
;*******************************************************************
movlw b'00000000'
movwf PORTA
movlw b'00000000'
movwf PORTB
bsf STATUS,RP0
movlw b'00110000'
movwf TRISA
movlw b'00000010' ;<----- Está bien programado el puerto necesito RB0 i RB3 como salidas!
movwf TRISB
bcf INTCON,GIE
clrf CONTA
clrf CONTA2
;*******************************************************************
; Generador de Baud Rate
;*******************************************************************
; Baud Rate = 2400, Sense bit de paritat,
movlw 103
movwf SPBRG
movlw b'00100100'
movwf TXSTA
bcf STATUS,RP0
movlw b'10010000'
movwf RCSTA
bcf PIE1,0
bcf PIE1,1

; en este punto
bsf PORTB.3
BSF PORTB.1
CALL TIEMPO
; Y SU RESPECTIVO APAGADO
 
Gracias a todos, era lo que decia Ardogan, no estaban donde tocaban esas lineas de programa! Es una cagada tonta.... Como dice mi profesor, tengo una asignatura pendiente, las paridas!

Muchisimas gracias a todos!
 
Atrás
Arriba