TODOPIC

Microcontroladores PIC => - Niple - => Mensaje iniciado por: cfabsanc en 25 de Octubre de 2015, 11:18:50

Título: falla en multiplexado
Publicado por: cfabsanc en 25 de Octubre de 2015, 11:18:50
hola quería comentar una falla que tengo en la visualización de una variable en dos displays ánodo común led.
el inconveniente es que me hace un parpadeo donde me enciende todos los bit utilizados para el bus de datos.
para mi es un problema cuando niple genera el archivo .asm ya que realizando el programa sin la utilización del modulo de visualización automática que genera niple no lo realiza.
dejo un video donde tengo el multiplexado hecho de forma muy basica con un retardo de 1s asi se nota bien el problema
spfreload=10
Título: Re:falla en multiplexado
Publicado por: KILLERJC en 25 de Octubre de 2015, 11:23:54
Parece mas un error de programa. No manejo nipple pero otra persona lo va a ver y decirte que es.
la persona que lo veo va a preguntarte un par de cosas, como:

Tenes un integrado entre medio de los segmentos de Led y el PIC ? ( un registro de desplazamiento, un 4511, etc )
Y seguro que te van a pedir el programa.

lo digo para que sea mas rapido tener una respuesta.
Título: Re:falla en multiplexado
Publicado por: juaperser1 en 25 de Octubre de 2015, 12:18:09
Yo opino como killerjc, parece un fallo de software, no de hardware.

Y al igual que killerjc ni idea de nipple  :D
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 26 de Octubre de 2015, 19:52:18
aca pongo el plano de como lo tengo cableado al circuito en el protoboard aclaro que tengo 0 v al pin 8 del uln2003 y 5v a pin 9 que no esta discriminado en el esquema lo demas tal cual esta en el plano. para mi tambien es un fallo del código assembler que genera niple también ajunto el archivo .hex y .asm como así también el archivo .npl si alguno quiere ver el programa hecho en niple.
desde ya muchas gracias por sus respuesta
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 26 de Octubre de 2015, 19:54:22
el esquema pesa demasiado y no me lo deja subir pero estoy usando un 4511 y un uln 2003 para el bus de datos y b327 con opto 817 para la conmutacion de los displays. la r para los opto 470ohms y para los bc 10k
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 26 de Octubre de 2015, 20:00:25
aca dejo un linck de otro video que subi donde explico mas detalladamente el funcionamiento
Título: Re:falla en multiplexado
Publicado por: KILLERJC en 26 de Octubre de 2015, 20:57:06
Subi una imagen del esquema, ahi el foro tiene una ayuda, saca un scrrenshot de tu PC y cuando vas a responder abajo de las caritas dice Tinypic, ahi podes subir tu imagen.
Por suerte el ASM es corto, yo podria ver el ASM y decirte si veo algo malo. Parece que usas el PORTB para el 4511, lo que si luego lo que saque lo vas a tener que interpretar en nipple, ya que como dije antes yo no lo uso. Ni podria ayudarte con eso.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 26 de Octubre de 2015, 21:37:39
les comento que hice un programa super básico por software y o sorpresa el ya no esta mas el brillo tenue en todos los segmentos solo queda la sombra del numero que esta mostrando en el otro displays. la secuencia la realice yo realizando el multiplexado de forma manual osea enciendo displays 1 uno mando datos tiempo apago displays 1 tiempo prendo displays 2 mando datos tiempo apago displays 2 tiempo y reinicia.
esto confirma que la electrónica esta bien cableada y el problema es de software. cuando lo hace niple a través del modulo esta compilando algo mal seguramente. el problema de la sombra para mi tambien es de software es solo mi humilde opinion aver que dicen lo que saben
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 26 de Octubre de 2015, 22:25:43
(http://www.todopic.com.ar/foros/imgtiny/ot29fr.jpg)
gracias por la ayuda con la imagen. no te hagas drama modifica ese archivo .asm y me lo envias lo compilo y lo pruebo y te voy diciendo que hace
Título: Re:falla en multiplexado
Publicado por: KILLERJC en 26 de Octubre de 2015, 22:49:47
Citar
les comento que hice un programa super básico por software y o sorpresa el ya no esta mas el brillo tenue en todos los segmentos solo queda la sombra del numero que esta mostrando en el otro displays. la secuencia la realice yo realizando el multiplexado de forma manual osea enciendo displays 1 uno mando datos tiempo apago displays 1 tiempo prendo displays 2 mando datos tiempo apago displays 2 tiempo y reinicia.
esto confirma que la electrónica esta bien cableada y el problema es de software.

Exactamente, pero necesitaba el diagrama para guiarme. No se si explicartelo en ASM o no. Tu problema se encuentra aca:

Código: ASM
  1. incf _np_disp_nro,1              ;visualizar datos en displays cátodo común
  2.    movf _np_disp_nro,w
  3.    xorlw .9
  4.    btfsc status,z
  5.    clrf _np_disp_nro
  6.    movf _np_disp_nro,w
  7.    xorlw .1
  8.    btfsc status,z
  9.    goto inte_t08_d1
  10.    movf _np_disp_nro,w
  11.  
  12.    ; Quite la comprobacion de 2 al 7
  13.  
  14.    xorlw .8
  15.    btfsc status,z
  16.    goto inte_t08_d8
  17. inte_t08_ini
  18.    call dy2_disp_7_seg_01           ;llamada a rutina dy2_disp_7_seg_01
  19. inte_t08_d1
  20.    bcf portb,3                      ;apagar el display 8
  21.    call dy2_disp_7_seg_01           ;llamada a rutina dy2_disp_7_seg_01
  22.    movf plocal_uni,w                ;mostrar el valor del registro plocal_uni
  23.    movwf _np_disp_valor
  24.    call dy3_disp_7_seg_01           ;llamada a rutina dy3_disp_7_seg_01
  25.    bsf porta,1                      ;encender el display 1
  26.    goto inte_t08_salir
  27.  
  28.    ;QUITE LOS DISPLAYS DEL 2 AL 7 para que sea mas simple de ver
  29.  
  30. inte_t08_d8
  31.    bcf portb,2                      ;apagar el display 7
  32.    call dy2_disp_7_seg_01           ;llamada a rutina dy2_disp_7_seg_01
  33.    movf horas_dec,w                 ;mostrar el valor del registro horas_dec
  34.    movwf _np_disp_valor
  35.    call dy3_disp_7_seg_01           ;llamada a rutina dy3_disp_7_seg_01
  36.    bsf portb,3                      ;encender el display 8
  37.    goto inte_t08_salir
  38. inte_t08_salir
  39. inte_t09
  40.    goto inte_t0_salir

El tema es asi, cuando esta realizado el programa en nipple, vos tenes una variable llamada "_np_disp_nro" que deberia ir de 1 a 9, ocurre que comienza por 0, cuando es 0 pone a 0 las salidas del 4511 PERO no desactiva ningun led. a diferencia de cuando es 1,2,3,4,etc hasta 8. Entonces, cuando llega al display 8 muestra el dato, entra a la interrupcion(TMR0) y como es 9 lo pone a 0 en ves de 1, por lo cual al ponerlo a 0 pone a 0 el PORTB7:4 el cual hace que se muestre un 0 por el 4511, sale de la interrupcion,hasta entrar de nuevo se mantiene un 0 encendido, y al entrar de nuevo recien ahi apaga el display. y muestra el valor correspondiente al display numero 1.

Ese es tu problema. No se si es cosa de nipple o una mala implementacion tuya dentro de la interrupcion. Pero conociendo cual es el problema creo que podrias solucionarlo facilmente, en el ASM tomaria solo 1 instruccion hacerlo pero en nipple no se.. Lamentablemente no te puedo ser de mas ayuda.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 27 de Octubre de 2015, 15:46:32
ok que interesante me podrias indicar cual es la instrucción que debo agregar o agregarla en el archivo .asm y enviarmelo lo compilo y lo pruebo y te digo que hace. eso me seria de muchisima ayuda desde ya muchas gracias por tu interés
Título: Re:falla en multiplexado
Publicado por: PalitroqueZ en 27 de Octubre de 2015, 16:42:54
cfabsanc deberías simular ese código y colocar breakpoints en sitios estratégicos y mirar el estado de los leds en cada barrido.

Título: Re:falla en multiplexado
Publicado por: cfabsanc en 27 de Octubre de 2015, 16:56:24
si te referis a punto y coma para evitar que lea la instrucción ya lo estoy haciendo pero es muy difícil a ciegas ya que no entiendo nada del código. se que goto es ir a y call es llamada y algunas cosas obvias pero nada mas si alguno me lo podria editar y pasarmelo seria de gran ayuda asi comparo el original y me doy cuenta. igualmente gracias por tu interés.
Título: Re:falla en multiplexado
Publicado por: Fer_TACA en 27 de Octubre de 2015, 17:58:18
ok que interesante me podrias indicar cual es la instrucción que debo agregar o agregarla en el archivo .asm y enviarmelo lo compilo y lo pruebo y te digo que hace. eso me seria de muchisima ayuda desde ya muchas gracias por tu interés

Ya se te ha respondido en el foro de Niple.

Se te ha indicado que tienes varias cosas a mejorar:
1º Puedes eliminar el opto
2º Recalcular la resistencia de base para los transistores en función de la corriente de los leds
Y mas importante, en el esquema tienes el montaje para ánodo común y dentro del programa de Niple tienes declarada la rutina de multiplexado como cátodo común.

Asi vas a tener bastantes problemas.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 27 de Octubre de 2015, 18:31:38
fer taca ya respondi en el foro de niple. el uln es inversor por eso esta configurado el modulo como cátodo común si lo configuro como ánodo común directamente veo cualquier cosa en los dysplay me rompi la cabeza hasta que me di cuenta de la falla. aca el problema para mi humilde entender es otro abrazo y gracias por tu disposicion
Título: Re:falla en multiplexado
Publicado por: KILLERJC en 28 de Octubre de 2015, 00:21:42
Cambia esa linea:

Código: [Seleccionar]
inte_t08_ini
   call dy2_disp_7_seg_01           ;llamada a rutina dy2_disp_7_seg_01

Por esta:

Código: [Seleccionar]
inte_t08_ini
   incf _np_disp_valor,f


O comenta el call, Y probalo. Basicamente lo unico que cambiamos es que ... cuando el apuntador del display sea 0, (es decir no es valido para los valores de 1 a 8 que espera el programa ) incrementamos a 1, y mostramos el primer valor, realizando el cambio con el display apagado.
Antes el apuntador al ser 0, ponia un 0 el display ( por unos muy pocos microsegundos ) luego apagaba y mostraba el primer valor 2 veces.

Una cosa mas, recien acabo de ver el ultimo video, en el primer video el tema era sobre un parpadeo, entonces me centre en ver eso, por eso pense que era eso (igual si cambias la linea que nombre arriba no le va a hacer nada). Pero en el ultimo video que colgaste mencionas que no es un parpadeo sino que se mantienen encendidos los leds Y eso es otro tema el cual el programa parece no tener nada que ver.

Estuve viendo un poco mas, y creo suponer que 1 solo transistor maneja todos los segmentos de un display.
Pense que podria ser el tiempo de propagacion, pero esta en 1us maximo del 4511 y 1us maximo del ULN, siendo que los bits del puerto se cambian y luego va un return (que le toma 2 ciclos , es decir a 4Mhz serian 2us ) y recien se enciende la nueva salida (1us mas aproximadamente), asi que estaria dentro del rango, si usas mas frecuencia tenes que tenerlo en cuenta a eso.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 28 de Octubre de 2015, 07:24:47
estimado killerjc muchas gracias por tu ayuda.
modifique la línea de programa como indicaste pero lamentablemente el problema continua te pongo una imagen de la línea como la agregue para que me puedas indicar si es correcta.
con respecto a tu pregunta del transistor te respondo que si efectivamente cada transistor junto con su correspondiente opto manejan el ánodo de todos los segmentos de cada displays.
sigo a la espera de alguna solución pero creo que ya esta descartado el problema por hardware para mi es netamente fallo en el código assembler.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 28 de Octubre de 2015, 07:32:23
aca esta la modificación del codigo
(http://www.todopic.com.ar/foros/imgtiny/x587sx.jpg)
Título: Re:falla en multiplexado
Publicado por: KILLERJC en 28 de Octubre de 2015, 08:36:35
No vi otra cosa en el codigo, esa parte es el unico lugar donde se cambia el valor del puerto sin antes apagar el pin comun al display.
Por lo tanto queda descartado eso.

y solo quedan 2 cosas:
- Tiempo de propagacion del PIC hacia los leds.

- Probar sin el PIC, es decir conectar solo el 4511 con el valor directo y ver si los leds encienden.

Si sigue el problema con hacer lo utimo, es problema de HW
Si no sigue entonces tiene que ser problemas de tiempos en el que el 4511+ULN son lentos.
Título: Re:falla en multiplexado
Publicado por: cfabsanc en 29 de Octubre de 2015, 17:04:52
ok muchas gracias veo como seguir cuando tenga novedades comento