Problemas con PIC16F648A RA4 utilizados para controlar un relé

-1

Reescriba la pregunta

El circuito mostrado no funciona correctamente. El relé permanece energizado. Sin Q5, RA4 se comporta bajo la influencia del código según lo deseado (drenaje abierto como se menciona en la tabla de especificaciones 5-1).

Con Q5 en su lugar, RA4 permanece a 0,01 V todo el tiempo.

Para una prueba, se quitó Q5 y se reemplazó con un LED en Q5be. Aquí se detectó un comportamiento extraño. En el momento esperado, el LED se ilumina por un momento (pulso) pero no permanece encendido.

Después de colocar un seguidor de emisores en medio para aislar RA4, el LED comenzó a comportarse como se esperaba.

En el código RA4 se controla con:

During init
MOVLW B'00100000'          ; Port RA5 input, others outputs
MOVWF TRISA                

During run
 BSF PORTA,OUTPUT   ;* Set OUTPUT RA4 (Counting not in Progress)
 BCF PORTA,OUTPUT   ;* Clear OUTPUT RA4 (Counting in progress)

Todo termina en una sola pregunta:

¿Por qué RA4 permanece bajo a 0.01 V, por lo tanto, mantiene el relé energizado cuando Q5 está en su lugar en lugar de subir a 0,65 V bajo la influencia de las instrucciones en el código?

    
pregunta Decapod

4 respuestas

3
During run
 BSF PORTA,OUTPUT   ;* Set OUTPUT RA4 (Counting not in Progress)
 BCF PORTA,OUTPUT   ;* Clear OUTPUT RA4 (Counting in progress)

Tu circuito está bien, pero este código da una pista sobre lo que está mal. Apuesto a que también está utilizando BSF y BCF para controlar Q1-Q4. Estas instrucciones son 'leer / modificar / escribir', lo que significa que leen el puerto, cambian un poco en él y luego vuelven a escribir el resultado en el puerto.

En la mayoría de los PIC de 8 bits, el latch de salida y el búfer de entrada del puerto se encuentran en la misma ubicación de memoria, y la operación de lectura cualquier lee los voltajes en los pines, no el valor almacenado en el latch de salida. La base de Q5 mantiene el voltaje a 0,6 V, por lo que RA4 siempre se lee como un '0', que luego se vuelve a escribir en el latch de salida cuando se modifican otros bits en PORTA.

La solución es mantener una variable 'sombra' en la RAM que sea una copia del cierre de salida del puerto. Usted establece y borra bits en esta variable, luego escribe el byte completo en el puerto. Con esta técnica, puede configurar varias salidas secuencialmente y luego escribirlas en el puerto simultáneamente.

El código podría tener este aspecto: -

cblock
PortA_latch            ; copy of PORTA output latch 
endc

BSF   PortA_Latch,RA4  ; to turn Q5 on
BSF   PortA_Latch,RA1  ; to turn Q2 on
MOVF  PortA_Latch,w   
MOVWF PORTA            ; write all output bits to port
    
respondido por el Bruce Abbott
0

Como no se recibió la solución para el problema encontrado, tuve que continuar por mi cuenta. La solución encontrada fue seleccionando un transistor pnp conectado a RA4. Esto hace que la tensión de base en Q5 alcance el nivel VDD cuando se establece RA 4. Cuando RA 4 es bajo, Q5 conduce las unidades Q6 a conducción, lo que resulta en un relé energizado RE1.

En el fondo, debe haber una condición de codificación que haga que RA4 cambie a bajo cuando el programa se está ejecutando. Debería tener que ver con la interacción entre el pasador y el pestillo del RA 4, pero mi conocimiento de la imagen y su programación no es suficiente para resolverlo en este momento. Para eso tengo que estudiar un poco más.

    
respondido por el Decapod
0

En tu primer esquema, no tenías resistencia de base. Sé que mencionó el drenaje abierto, pero ¿está seguro de que lo configuró específicamente para el drenaje abierto?

Si no, RA4 habría generado una cantidad de corriente no controlada. Esto podría colapsar parcialmente el riel de alimentación interno o causar un error lógico interno y hacer que la MCU se reinicie. Esto podría explicar por qué ve el LED (que repara el LED para Q5) simplemente "parpadea" por un poquito.

Sería más seguro simplemente agregar una resistencia única para controlar la corriente de base Q5 en caso de que RA4 se haya configurado mal.

Además, ¿puedes invertir la lógica RA4 para que solo necesites Q6? Si es así, solo necesitarías 1 transistor (o un Darlington simple si necesitas una mayor ganancia) y 1 resistencia.

    
respondido por el Vince Patron
0

Creo que sus resistencias de base de 10k (pull up) en su esquema original eran un valor demasiado alto que no habría dado una corriente de base insuficiente para encender el Q5 una vez conectado al PIC. En el esquema de su respuesta, ha bajado la resistencia base a 1k, lo que dice que ahora funciona correctamente.

¿Qué transistor estabas usando para Q5?

    
respondido por el HandyHowie

Lea otras preguntas en las etiquetas