Buenas
Tengo un problema con este circuito. No es más que un termómetro digital basado en el 16F876. El potenciómetro simula el LM35.
Breve descripción del circuito:
PUERTO C
=======
Pines 1 al 7 a dos display en paralelo de siete segmentos
PUERTOB
=======
Pin 5 al transistor que controla el display de decenas
Pin 6 al transistor que controla el display de unidades
La cuestión es que no sé si realmente la multiplexación está funcionado bien:
Por un lado:
=========
En el proteus lo simula muy lento, aunque asumo que esto es normal.
Por otro lado:
=========
En el circuito real las decenas se ven correctas, pero el display de las unidades brilla muy poco
No sé si es que la frecuencia con la que se enciende el transitor de las decenas es mayor, o que pasa.
A continuación os pongo un extracto del código de la multiplexación y visualización de los display.
El valor de la temperatura se obtiene en W después de la llamada a BIN_A_BCD
Agradezco cualquier ayuda.
Un saludo.
;
--------------------------
; Paso 4
; Convertimos el dato de binario a BCD
; Código de multiplexado
; --------------------------
call BIN_a_BCD
movwf Unidades ; Tenemos el valor de la temperatura en BCD dentro de Unidades
bcf PORTB,5 ; Apaga decenas
andlw b'00001111' ; Me quedo con nible bajo
call DecoDisplay ; Devuelve el valor de 7 segmentos para el número a visualizar
movwf PORTC ; Lo saco por el PORTC
bsf PORTB,6 ; Enciende unidades
movfw Unidades ; Recupero de nuevo el valor de la temperatura
swapf Unidades,W ; Intercambio nibbles, es hora de tomar las decenas
andlw b'00001111' ; Me quedo con el nible bajo
call DecoDisplay ; Devuelve el valor de 7 segmentos para el número a visualizar
bsf PORTB,5 ; Apagamos Unidades
movwf PORTC ; Lo saco por PORCT
bcf PORTB,6 ; Encendemos Decenas
; El resultado se visualiza por la salida.
goto Principal ; Se queda permanentemente en este bucle.