TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: 300 en 16 de Noviembre de 2010, 01:06:01
-
hola estoy tratando de hacer una simulacion en proteus de como multiplexar dos display de 7 segmentos segui los pasos que dice el libro pero al simularlo lo unico que hace es repetir el numero que tiene el primer display osea debe mostrar el numero 57 y solo muestra el 5 no se cual es el error
(http://rmkq2a.blu.livefilestore.com/y1pmyYW4kFgxymKp1fDng9dHMUHmGIH8-w8ieDWN2snos3rOeJTrX6GJEMC44bEDzb4uJJsIN_0BjISugSCY-GoC_Drzx8bN1o8/mult.jpg?psid=1)
INCLUDE <P16F873.INC>
LIST P=16F873, R = HEX
REG1 EQU 20H
R12 EQU 21H
VALOR1 EQU 22H
VALOR2 EQU 23H
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO MOVLW .0
TRIS PORTB ;CONFIGURAR EL PERTO B TODO COMO SALIDA.
MOVLW .0
TRIS PORTC ;CONFIGURA EL PUERTO C COMO SALIDA.
MOVLW .7 ;CARGA W CON 7.
MOVWF VALOR2 ;LLEVA 7 A VALOR 2.
MOVLW .5 ;CARGA W CON 5.
MOVWF VALOR1 ;LLEVA 5 A VALOR 1.
LOOP1 MOVF VALOR1,W ;LLEVA VALOR 1 A W.
CALL TABLA ;LLAMA A TABLA PARA ENCONTRAR EL VALOR 7 SEGMENTOS DEL NUMERO 5.
MOVWF PORTB ;LLEVA EL VALOR 7 SEG AL PUERTO B.
MOVLW .0
MOVWF PORTC ;HABILITA EL TRANSISTORCORRESPONDIENTE A VALOR1 (RC0)
CALL RETARDO
MOVF VALOR2,W ;LLEVA VALOR 2 A W.
CALL TABLA ;CONVIERTE VALOR 2 A CODIGO 7SEGMENTOS.
MOVWF PORTB ;SACA AL PUERTO B EL VALOR 2.
MOVLW .0
MOVWF PORTC ;HABILITA EL TRANSISTOR DE VALOR2 (RC1).
CALL RETARDO
GOTO LOOP1
RETARDO MOVLW .255 ;RETARDO DE 1 mS APROX.
MOVWF R12
REP DECFSZ R12,F
GOTO REP
TABLA ADDWF PCL,F ; PCL + W
RETLW B'00111111' ; CODIGO PARA EL 0
RETLW B'00000110' ; CODIGO PARA EL 1
RETLW B'01011011' ; CODIGO PARA EL 2
RETLW B'01001111' ; CODIGO PARA EL 3
RETLW B'01100110' ; CODIGO PARA EL 4
RETLW B'01101101' ; CODIGO PARA EL 5
RETLW B'01111100' ; CODIGO PARA EL 6
RETLW B'00000111' ; CODIGO PARA EL 7
RETLW B'01111111' ; CODIGO PARA EL 8
RETLW B'01100111' ; CODIGO PARA EL 9
MOVLW .255
MOVWF REG1
RET1 DECFSZ REG1,F
GOTO RET1
RETURN
END ;FIN DEL PROGRAMA
-
Hola 300, no deshabilitas los transistores en ningún momento, osea, siempre muestras lo mismo en los dos displays,prueba a hacer esto,
CALL TABLA ;LLAMA A TABLA PARA ENCONTRAR EL VALOR 7 SEGMENTOS DEL NUMERO 5.
MOVWF PORTB ;LLEVA EL VALOR 7 SEG AL PUERTO B.
MOVLW .2;00000010<- rc0 =0, Rc1=1; habilitamos display 1 negado.
MOVWF PORTC ;HABILITA EL TRANSISTORCORRESPONDIENTE A VALOR1 (RC0)
CALL RETARDO
MOVF VALOR2,W ;LLEVA VALOR 2 A W.
CALL TABLA ;CONVIERTE VALOR 2 A CODIGO 7SEGMENTOS.
MOVWF PORTB ;SACA AL PUERTO B EL VALOR 2.
MOVLW .1;00000001<-rc0=1,rc1=0; habilitamos display 2 negado;
MOVWF PORTC ;HABILITA EL TRANSISTOR DE VALOR2 (RC1).
CALL RETARDO
Si cargas 0 en port C siempre tendrás los dos display activos, y mostraran siempre el mismo numero, por persistencia de visión, el primero en introducirse.
-
estan cambiados ya y si tienes razon pero me acaba de hacer lo mismo solo se ve el cinco y no manda para nada el 7 cual es el error lo lo encuentro te adjunto los archivosa ver si lo puedes correr
-
Haber te faltan las resistencias de pull-up a los transistores, tienes mal colocado el bloque de temporizador, seguramente por el copi and paste, te he puesto limpieza de los displays. te lo incluyo para que lo veas. ;-)
INCLUDE <P16F873.INC>
LIST P=16F873, R = HEX
REG1 EQU 20H
R12 EQU 21H
VALOR1 EQU 22H
VALOR2 EQU 23H
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO MOVLW .0
TRIS PORTB ;CONFIGURAR EL PERTO B TODO COMO SALIDA.
MOVLW .0
TRIS PORTC ;CONFIGURA EL PUERTO C COMO SALIDA.
MOVLW .7 ;CARGA W CON 7.
MOVWF VALOR2 ;LLEVA 7 A VALOR 2.
MOVLW .5 ;CARGA W CON 5.
MOVWF VALOR1 ;LLEVA 5 A VALOR 1.
LOOP1 MOVLW .0;paramos los displays
MOVWF PORTC ;HABILITA EL TRANSISTOR DE
MOVF VALOR1,W ;LLEVA VALOR 1 A W.
CALL TABLA ;LLAMA A TABLA PARA ENCONTRAR EL VALOR 7 SEGMENTOS DEL NUMERO 5.
MOVWF PORTB ;LLEVA EL VALOR 7 SEG AL PUERTO B.
MOVLW .1;00000001<- rc0 =0, Rc1=1; habilitamos display 1 negado.
MOVWF PORTC ;HABILITA EL TRANSISTORCORRESPONDIENTE A VALOR1 (RC0)
CALL RETARDO
MOVLW .0;paramos los displays para que no titile
MOVWF PORTC ;HABILITA EL TRANSISTOR DE
MOVF VALOR2,W ;LLEVA VALOR 2 A W.
CALL TABLA ;CONVIERTE VALOR 2 A CODIGO 7SEGMENTOS.
MOVWF PORTB ;SACA AL PUERTO B EL VALOR 2.
MOVLW .2;00000010<-rc0=1,rc1=0; habilitamos display 2 negado;
MOVWF PORTC ;HABILITA EL TRANSISTOR DE VALOR2 (RC1).
CALL RETARDO
GOTO LOOP1
RETARDO MOVLW .255 ;RETARDO DE 1 mS APROX.
MOVWF R12
REP DECFSZ R12,F
GOTO REP
MOVLW .255
MOVWF REG1
RET1 DECFSZ REG1,F
GOTO RET1
RETURN
; ahora si tenias la TABLA incrustada en el retardo;
TABLA ADDWF PCL,F ; PCL + W
RETLW B'00111111' ; CODIGO PARA EL 0
RETLW B'00000110' ; CODIGO PARA EL 1
RETLW B'01011011' ; CODIGO PARA EL 2
RETLW B'01001111' ; CODIGO PARA EL 3
RETLW B'01100110' ; CODIGO PARA EL 4
RETLW B'01101101' ; CODIGO PARA EL 5
RETLW B'01111100' ; CODIGO PARA EL 6
RETLW B'00000111' ; CODIGO PARA EL 7
RETLW B'01111111' ; CODIGO PARA EL 8
RETLW B'01100111' ; CODIGO PARA EL 9
END ;FIN DEL PROGRAMA
-
guau eres grande no tenia idea que debia de llevar esas resistencias el libro no lo dice ni viene en el diagrama pero ya corre muy bien muchas gracias te vas a ir al cielo con todo y zapatos y espero te dejen llevar una compu porque creeme esto es lo tuyo.
P.D. agradecimientos especiales a bmfranky
-
Hola, 300, el cambio sustancial, no son las resistencias, revisa el código ASM que te adjunto y veras que hay una diferencia, tenias un fallo en la rutina de retardo, se te había mezclado con la de asignación de 7 segmentos, lee lo que te adjunto, pues en el código te explico los cambios.
En este gran foro, todos intentamos ayudarnos, yo no soy grande , solo un aficionadillo, el código que te adjunto se puede refinar muchísimo, en tamaño y eficiencia, pero eso debes intentarlo tu, suerte y gracias a todos los compañeros del foro por su ayuda desinteresada.