problema con control de display multiplexado

hola electronicos, el dia de hoy quisiera pedir una asesoria sobre un problema que no pude resolver.

estoy trabajando con un pIC 16f628a programando un contador incremental, decremental. este contador visualisa el conteo en 4 display 7 segmentos.

el programa lo hice en asembler y me funciono perfectamente en el PIC simulator, pero cuando monte el circuito en el protoboard y lo probe no encendia el segmento E de todos los display, rastreando el circuito descubri que el segmento E del display de las decenas estaba dañado, pero es solo ese.
mi pregunta es en que afecta ese display a todos los demas si estan en palalelo y los estoy multiplexando.

el pulsador de incrementar esta conectado al pin RA6 y el pulsador decrementar esta conectado al pin RA7; uso el oscilador interno a 4 MHZ.

los display van conectados al puerto B y las lineas de control van a los pines A0-A3
aca les dejo el programa en asembler:

Código:
list    p=16F877A

pc        equ        02
status    equ        03
porta    equ        05
portb    equ        06
trisa    equ        85
trisb    equ        86
v1        equ        20
v2        equ        21
contu    equ        22
contd    equ        23
contc    equ        24
contm    equ        25

reset     org        00
        goto     inicio
        org        05

inicio    bsf        status,5
        movlw    d'0'
        movwf    trisb
        movlw    b'11110000'
        movwf    trisa
        bcf        status,5
        movlw    d'0'
        movwf    contu
        movwf    contd
        movwf    contc
        movwf    contm

preg    call    ver
        btfsc    porta,6
        goto     noin
        goto     aumento

noin    btfsc    porta,7
        goto    preg
        goto    redusco

aumento    call    ver
        btfss    porta,6
        goto    aumento
        goto    sumo

redusco    call    ver
        btfss    porta,7
        goto    redusco
        goto    resto

sumo    movf    contu,w
        xorlw    d'9'
        btfss    status,2
        goto    nodiez    
        goto    sidiez

nodiez    incf    contu,1
        bcf        status,2
        goto    preg
    
sidiez    movlw    d'0'
        movwf    contu
        movf    contd,w
        xorlw    d'9'
        btfss    status,2
        goto    nocien
        goto    sicien

nocien    incf    contd,1
        bcf        status,2
        goto    preg

sicien    movlw    d'0'
        movwf    contd
        movf    contc,w
        xorlw    d'9'
        btfss    status,2
        goto    nomil
        goto    simil

nomil    incf    contc,1
        bcf        status,2
        goto    preg

simil    movlw    d'0'
        movwf    contc
        movf    contm,w
        xorlw    d'9'
        btfss    status,2
        goto    nodm
        goto    sidm

nodm    incf    contm,1
        bcf        status,2
        goto    preg

sidm    movlw    d'0'
        movwf    contm
        movwf    contc
        movwf    contd
        movwf    contu
        goto     preg

resto    movf    contu,w
        xorlw    d'0'
        btfss    status,2
        goto    nocero
        goto    sicero

nocero    decf    contu,1
        bcf        status,2
        goto    preg

sicero    movlw    d'9'
        movwf    contu
        movf    contd,w
        xorlw    d'0'
        btfss    status,2
        goto    nodec
        goto    sidec

nodec    decf     contd,1
        bcf        status,2
        goto    preg

sidec    movlw    d'9'
        movwf    contd
        movf    contc,w
        xorlw    d'0'
        btfss    status,2
        goto    nocent
        goto    sicent

nocent    decf    contc,1
        bcf        status,2
        goto    preg

sicent    movlw    d'9'
        movwf    contc
        movf    contm,w
        xorlw    d'0'
        btfss    status,2
        goto    nom
        goto    sim

nom        decf    contm,1
        bcf        status,2
        goto    preg

sim        movlw    d'0'
        movwf    contm
        movwf    contc
        movwf    contd
        movwf    contu
        goto    preg

ver        movlw    b'1000'
        movwf    porta
        call    tablau
        movwf    portb
        call    ret
        movlw    d'0'
        movwf    portb
        movlw    b'0100'
        movwf    porta
        call    tablad
        movwf    portb
        call    ret
        movlw    d'0'
        movwf    portb
        movlw    b'0010'
        movwf    porta
        call    tablac
        movwf    portb
        call    ret
        movlw    d'0'
        movwf    portb
        movlw    b'0001'
        movwf    porta
        call    tablam
        movwf    portb
        call    ret
        movlw    d'0'
        movwf    portb
        return

tablad    movf    contd,w
        addwf    pc,1
        retlw    b'00111111'
        retlw    b'00000110'
        retlw    b'01011011'
        retlw    b'01001111'
        retlw    b'01100110'
        retlw    b'01101101'
        retlw    b'01111100'
        retlw    b'00000111'
        retlw    b'01111111'
        retlw    b'01100111'
        return

tablau    movf    contu,w
        addwf    pc,1
        retlw    b'00111111'
        retlw    b'00000110'
        retlw    b'01011011'
        retlw    b'01001111'
        retlw    b'01100110'
        retlw    b'01101101'
        retlw    b'01111100'
        retlw    b'00000111'
        retlw    b'01111111'
        retlw    b'01100111'
        return

tablac    movf    contc,w
        addwf    pc,1
        retlw    b'00111111'
        retlw    b'00000110'
        retlw    b'01011011'
        retlw    b'01001111'
        retlw    b'01100110'
        retlw    b'01101101'
        retlw    b'01111100'
        retlw    b'00000111'
        retlw    b'01111111'
        retlw    b'01100111'
        return

tablam    movf    contm,w
        addwf    pc,1
        retlw    b'00111111'
        retlw    b'00000110'
        retlw    b'01011011'
        retlw    b'01001111'
        retlw    b'01100110'
        retlw    b'01101101'
        retlw    b'01111100'
        retlw    b'00000111'
        retlw    b'01111111'
        retlw    b'01100111'
        return

ret        movlw    d'30'
        movwf    v2
uno        movlw    d'40'
        movwf    v1
dos        decfsz    v1,1
        goto    dos
        decfsz    v2,1
        goto    uno
        return
        end


espero me puedan ayudar.
 
Última edición por un moderador:
Si tu pregunta final es "en que afecta ese display a todos los demas si estan en palalelo y los estoy multiplexando" la respuesta es ... en nada.

Saludos
 
Pero y cual es el problema porque salvo la pregunta que hiciste, jamas describes que pasa en tu circuito. si es por lo del segmento E asegurate que:
a) que el driver por el que activas dicho segmento no este dañado.
b) que el puerto al que lo conectas este bien configurado
c) que la conexion entre dicho pin y el circuito final este bien hecha sin falsos
de ahi en mas solo que hayas dañado el pin del puerto por exceso de corriente
 
bueno, voy a ser mas explicito.

en el circuito tengo 2 pulsadores conectados a los pines A6 y A7 con los que incremento o decremento el contador, la conexion de los 4 displays es:

a b0
b b1
c b2
d b3
e b4
f b5
g b6
h b7

y uso 4 transistores 2n3904 para las señales de control alos diaplay, estos transistores van conectados con el emisor a tierra ya que uso display de catodo comun, del colector van al control del display u de la base una resistencia de 1K a los pines del micro.

la habilitacion la hago asi

A0 unidades
A1 decenas
A2 centenas
A3 unidades de mil

lo raro es que prode desconectando el segmento E del display dañado y ahora el micro se resetea si bien toco el protoboard, pero deja de hacerlo si le conecto un LED entre este pin y tierra, no le hallo una explicacion,logica a esto. muchas gracias por la atencion
 
Si no estas usando interrupciones, deshabilitalas y prueba, si estas usando interrupciones asegurate que no tienes activo el modo de interrupcion por cambio de estado en el puerto B.
 
bueno, no estoy habilitando el bit GIE,ninguna interrupcion esta habilitada.
el fin de semana lo estuve revisando y mas me convenzo que murphy esta haciendo de las suyas, de ninguna forma le hallo explicacion logica a esto.

voy a probar desarmarlo por tercera vez y a armarlo de nuevo a ver que pasa.

gracias a todos por la ayuda.
 
Atrás
Arriba