TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Kikeynuri en 24 de Mayo de 2009, 05:34:44

Título: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 24 de Mayo de 2009, 05:34:44
Hola estoy buscando un ejemplo para guiarme de un contador digital de 0 -9 segundo. y que del 9 se reinicie al 0.
necesito crear el programa en asm para el pic 16f628a
Ojala puedan darme un guia gracias.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 24 de Mayo de 2009, 13:43:14
http://www.todopic.com.ar/foros/index.php?topic=24720.0

Ahi lo tienes para el 16f84, en el mismo hilo un poco mas adelante tienes ejemplos con el 1f628, solo tienes que adaptarlo un poco. Espero que no solo lo copies, y que trates de aprender como se hace, te sera de mas utilidad.

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 24 de Mayo de 2009, 19:46:21
        Brother porque no puedo almacenar y leer en la eeprom ?
   
    list p=16f628a
                 include p16f628a.inc

                 cblock 0x20
                  NUMERO
   CONT1
   CONT2
   CONT3
   endc

   ;Inicio 
   org 0x00
   goto Inicio

   org 0x05
Inicio
   bcf    STATUS, RFC
                  clrf     EEADR
   bsf EECON1,R0
   movf EEDATA, W
   bsf STATUS,RP0

Principal
   clrf    NUMERO

Ciclo   movf    NUMERO, w
   call   Despliega
   movwf   PORTB
   call   Retardo
   incf   NUMERO, f
   movf   NUMERO, w
   sublw   0x10
   btfss   STATUS, Z
   goto   Ciclo
   goto   Principal

Despliega
   addwf   PCL, f
   retlw   b'0000'   
   retlw   b'0001'   
   retlw   b'0010'   
   retlw   b'0011'   
   retlw   b'0100'   
   retlw   b'0101'   
   retlw   b'0110'   
   retlw   b'0111'   
   retlw   b'1000'
Retardo
   
   movlw   d'50'
   movwf   CONT3
Ciclo3 movlw d'100'
   movwf   CONT2
Ciclo2 movlw d'33'
   movwf   CONT1
Ciclo1 decfsz CONT1 ,f
   goto   Ciclo1
   decfsz   CONT2, f
   goto   Ciclo2   
   decfsz   CONT3, f
   goto   Ciclo3
   return
   end



Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 24 de Mayo de 2009, 21:05:03
Porque usas Tabla? Si no estas conectando el Display directamente al Puerto y usas un decodificador BCD como el 74LS47, el 74LS249, o el CD4511 puedes cargar la variable Numero directamente al puerto.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 25 de Mayo de 2009, 08:06:22
En que puerto tienes el decodificador? No lo tienes configurado como salida.
Porque solo cuentas hasta 8 y no hasta 9. Aparte lo que te dice suki para quieres tabla si haces el conteo directamente?
Para que quieres leer la EEPRON?

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 26 de Mayo de 2009, 02:05:48
Mi programa tiene que almacenar en la eeprom.
 list p=16f628a
    #include p16f628a.inc

   org 00h
   bsf status, rp0
   clrf eeadr
   bsf eecon1,rd
   movf eedata,w
   bcf status,rp0
   bsf status,rp0
   incf eeadr,f
   bcf status, rp0
   movlw 0ah
   xorwf eeadr,w
   btssf status,z
   bsf intcon gie

ciclo 
   bsf status rp
   bsf eecon1,rd
   movf eedata,w
   bcf status,rp0
   incf eeadr,f
   movlw 0ah
   call delay
   bsf status rp0
   incf eeadr,f
   movlc 0ah
   xorwf eeadr,w
   bcf status, rp0
   goto ciclo
   delay  clrf tmr0
    bsf tmr0,toie
   desborda  movf cont,w
   btfss status,z
   goto desborda
   movlw 07h
   movwf cont
   bcf tmr0,toie
   return
   end
este programa lo escribi yo se que esta repleto de errores estoy muy novato en ensamblador. ojala me de a entender, de ante mano gracias.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 26 de Mayo de 2009, 06:52:07
Si tienes que almacenar en la EEPROM la solucion que veo es por direccionamiento indirecto.
Ejemplo de suki:


; **** Encabezado ****
list p=16F84A
#include P16F84A.inc
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
Contador   equ      0x0C   ; Seleccionamos posición en la memoria RAM (GPR) para guardar
               ; registro utilizado para demora.-
Contador1   equ      0x0D   ; Registro utilizado en demora.-
Contador2   equ      0x0E



Reset      
   org   0x00         ; Aquí comienza el micro.-
   goto   Inicio         ; Salto a inicio de mi programa.-
;**** Programa principal ****
;**** Configuracion de puertos ****
Inicio
   bsf   STATUS,RP0    ; Pasamos de Banco 0 a Banco 1.-
   clrf   TRISB      ; PORTB como salida.-
   bcf   STATUS,RP0   ; Paso del Banco 1 al Banco 0
   call   Config_Tabla   ; Cargamos registros con Codigo de 7 segmentos.-   
   movfw   INDF      ; Leemos codigo de 7 Segmentos para el CERO.-
   movwf   PORTB      ; Mostramos el CERO.-
;**** Testeo de Pulsador ****
Bucle
   call   Demora_190ms      ; Demora para visualizar Display
   incf   FSR,1         ; Incrementamos Puntero.-
   movlw   0x1A         ; Consulamos si se pide codigo para mostrar "10",
   subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x10--> "0".-
   btfss   STATUS,Z      ; Si Z=1 --> 0x1A - FSR = 0.-
   goto   Muestro_Display      ; No, muestro display.-
   movlw   0x10         ; Si reseteo puntero.-
   movwf   FSR            ;
Muestro_Display
   movfw   INDF         ; Leo Registro que apunta FSR.-
   movwf   PORTB         ; Lo cargo en PORTB.-
   goto   Bucle         ; Continuo conteo.-

      
;**** Demora ****
Demora_190ms
   movlw   0xFF         ;
   movwf   Contador1      ; Iniciamos contador1.-
Repeticion1
   movlw   0xFF         ;
   movwf   Contador2      ; Iniciamos contador2
Repeticion2
   decfsz   Contador2,1      ; Decrementa Contador2 y si es 0 sale.-      
   goto   Repeticion2      ; Si no es 0 repetimos ciclo.-
   decfsz   Contador1,1      ; Decrementa Contador1.-
   goto   Repeticion1      ; Si no es cero repetimos ciclo.-
   return            ; Regresa de la subrutina.-
;**** Cargamos tabla en memoria ****
Config_Tabla
   movlw   0x10   ;
   movwf   FSR   ; Direccionamos el registro 0x10 de la memoria RAM (GPR).-
   movlw   0x3F   ; Cargamos el codigo para mostrar el CERO.-
   movwf   INDF   ; Lo guardamos donde apunta FSR --> 0x10.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x11.-
   movlw   0x06   ; Cargamos codigo para UNO.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x12.-
   movlw   0x5B   ; Cargamos codigo para DOS.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x13.-
   movlw   0x4F   ; Cargamos codigo para TRES.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x14.-
   movlw   0x66   ; Cargamos codigo para CUATRO.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x15.-
   movlw   0x6D   ; Cargamos codigo para CINCO.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x16.-
   movlw   0x7D   ; Cargamos codigo para SEIS.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x17.-
   movlw   0x07   ; Cargamos codigo para SIETE.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x18.-
   movlw   0xFF   ; Cargamos codigo para OCHO.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x19.-
   movlw   0x6F   ; Cargamos codigo para NUEVE.-
   movwf   INDF   ; Lo guardamos donde apunta FSR.-
;....................
   movlw   0x10   ;
   movwf   FSR      ; Direccionamos Registro del CERO.-
   return         ; Cargado los valores, retornamos.-   
;..................................................................
   end

lo simule en el MPLAB y los GPR son igual en la RAM que en la EEPROM de hecho aunque se escribe en RAM, se reflejan en la EEPROM.
Es un trabajo para la facultad?. Por que os mandan hacer cosas complicadas sin enseñaros lo basico? La segunda pregunta es para tu profesor :lol:

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 26 de Mayo de 2009, 09:14:22
Gracias por tu respuesta.
Lo simule en el PicSimulator y ciertamente arroja lo que comentas.
Una pregunta mas.. Como lo adapto al 628a?
y Ultima podrian subir un diagrama para armar la protoboard?

Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 26 de Mayo de 2009, 14:10:18
Esta puede ser una configuracion para los FUSES con reloj interno

list   p=16f628A   ;    
#include   <p16f628A.inc>      
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON

Cambia tambien las EQUS, en vez de 0C, 0D, 0E, ponlas en 0x20, 0x21, 0x22. Asi ya deberia ir.

El eqsuema lo tienes en la primera direccion que te di, fijate que es un catodo comun, si lo cambias te cambia la tabla.
RBO->A
RB1->B
RB2->C
RB3->D
RB4->E
RB5->F
RB6->G
Para esa tabla tienen que ir asi, con resistencias de 220 ohm a 330 ohm.

Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 26 de Mayo de 2009, 17:13:40
;O   :-)
Ty
Eso es.. ^^
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 27 de Mayo de 2009, 01:39:19
Brother.. adapte y compile como me comentaste y va bien..
pero me ocasiona un problema en el simulador hace esto.
0 1 2 5 6 7 8 9 , el 3 y 4 no aparecen..
Que puedo hacer?
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 27 de Mayo de 2009, 01:54:02
Cambia la Tabla a la forma siguiente:
Código: ASM
  1. ;**** Cargamos tabla en memoria ****
  2. Config_Tabla
  3.    movlw   0x30   ;
  4.    movwf   FSR   ; Direccionamos el registro 0x30 de la memoria RAM (GPR).-
  5.    movlw   0x3F   ; Cargamos el codigo para mostrar el CERO.-
  6.    movwf   INDF   ; Lo guardamos donde apunta FSR --> 0x10.-
  7. ;....................
  8.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x31.-
  9.    movlw   0x06   ; Cargamos codigo para UNO.-
  10.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  11. ;....................
  12.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x32.-
  13.    movlw   0x5B   ; Cargamos codigo para DOS.-
  14.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  15. ;....................
  16.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x33.-
  17.    movlw   0x4F   ; Cargamos codigo para TRES.-
  18.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  19. ;....................
  20.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x34.-
  21.    movlw   0x66   ; Cargamos codigo para CUATRO.-
  22.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  23. ;....................
  24.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x35.-
  25.    movlw   0x6D   ; Cargamos codigo para CINCO.-
  26.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  27. ;....................
  28.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x36.-
  29.    movlw   0x7D   ; Cargamos codigo para SEIS.-
  30.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  31. ;....................
  32.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x37.-
  33.    movlw   0x07   ; Cargamos codigo para SIETE.-
  34.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  35. ;....................
  36.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x38.-
  37.    movlw   0xFF   ; Cargamos codigo para OCHO.-
  38.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  39. ;....................
  40.    incf   FSR,1   ; Incrementamos FSR, ahora apunta a 0x39.-
  41.    movlw   0x6F   ; Cargamos codigo para NUEVE.-
  42.    movwf   INDF   ; Lo guardamos donde apunta FSR.-
  43. ;....................
  44.    movlw   0x30   ;
  45.    movwf   FSR      ; Direccionamos Registro del CERO.-
  46.    return             ; Cargado los valores, retornamos.-  
  47. ;..................................................................
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 27 de Mayo de 2009, 01:58:22
Y también esto:  :mrgreen:
Código: ASM
  1. Bucle
  2.    call   Demora_190ms      ; Demora para visualizar Display
  3.    incf   FSR,1         ; Incrementamos Puntero.-
  4.    movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",
  5.    subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-
  6.    btfss   STATUS,Z      ; Si Z=1 --> 0x1A - FSR = 0.-
  7.    goto   Muestro_Display      ; No, muestro display.-
  8.    movlw   0x30         ; Si reseteo puntero.-
  9.    movwf   FSR            ;
  10. Muestro_Display
  11.    movfw   INDF         ; Leo Registro que apunta FSR.-
  12.    movwf   PORTB         ; Lo cargo en PORTB.-
  13.    goto   Bucle         ; Continuo conteo.-

Por ser un 16F628 :wink:
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 27 de Mayo de 2009, 07:16:39
Pues claro, me di cuenta de las EQUS, pero que no de correr tambien la tabla, ¡que fallo!, gracias.
Por cierto suki que ventajas tiene este tipo de tablas?. Es que estoy haciendo un proyecto donde utilizo 5 displays, los uso como pasamensajes, muestro numeros, etc; lo hago con tablas "normales", o bien cargando los codigos directamente a los reg. que controlan los displays, era para saber si tendrian aplicacion en esto y me simpificarian el trabajo.

saludos tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 27 de Mayo de 2009, 09:28:14
Ninguna ventaja, fíjate que usa más memoria de programa en cargar la tabla y aparte la tabla se carga en la memoria RAM. Como explique que era el direccionamiento indirecto, di este ejemplo para ver su uso.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 27 de Mayo de 2009, 13:03:05
Claro, yo es que por mas vueltas que le daba no lo veia muy claro, seguire como lo hacia hasta ahora, gracias.

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 28 de Mayo de 2009, 02:11:02
Quiero agradecer, porque en este foro, mis preguntas fueorn resueltas en cuestion de horas y siempre de manera atenta y claro eficiente.
mi proyectp esta listo pero me gutaria agregarle algo mas, un push de entrada o button. ojala pudieran apoyarme con el trozo de codigo que me falta.
de ante mano gracias. :-)
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 28 de Mayo de 2009, 02:13:56
Cual seria la acción del pulsador?
En el link que te dio tapi8 hay varios ejemplos más!
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 28 de Mayo de 2009, 02:22:32
Bueno sin abusar.. quier odecir que el pulsador, cada que sea precionado cambiaria a un numero.
de ante mano gracias.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 28 de Mayo de 2009, 02:37:55
Reemplaza esto:
Código: ASM
  1. Bucle
  2.    call   Demora_190ms      ; Demora para visualizar Display
  3.    incf   FSR,1         ; Incrementamos Puntero.-
  4.    movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",
  5.    subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-
  6.    btfss   STATUS,Z      ; Si Z=1 --> 0x1A - FSR = 0.-
  7.    goto   Muestro_Display      ; No, muestro display.-
  8.    movlw   0x30         ; Si reseteo puntero.-
  9.    movwf   FSR            ;
  10. Muestro_Display
  11.    movfw   INDF         ; Leo Registro que apunta FSR.-
  12.    movwf   PORTB         ; Lo cargo en PORTB.-
  13.    goto   Bucle         ; Continuo conteo.-

por esto, debería funcionar:

Código: ASM
  1. Bucle
  2.    btfss   PORTA,0      ; Si esta en 0 Decremento.- Pulsador en A0
  3.    goto    Decremento
  4.    btfss   PORTA,1      ; Si esta en 0 incremento.- Pulsador en A1
  5.    goto    Incremento
  6.    goto    Bucle
  7.  
  8.  
  9. Decremento
  10.    call    Demora_30ms  ; Para anti-rebote Pulsador
  11.    btfsc   PORTA,0      ; Testeamos nuevamente
  12.    goto    Bucle        ; Falsa alarma.
  13.    decf    FSR,1
  14.    movlw   0x2F         ; Si pide codigo para -1 pasamos a 9
  15.    subwf   FSR,0
  16.    btfss   STATUZ,Z
  17.    goto    Muestro_Display
  18.    movlw   0x39         ; 9
  19.    movwf   FSR
  20.    goto    Muestro_Display
  21.  
  22. Incremento
  23.    call    Demora_30ms  ; Para anti-rebote Pulsador
  24.    btfsc   PORTA,1      ; Testeamos nuevamente
  25.    goto    Bucle        ; Falsa alarma.
  26.    incf   FSR,1         ; Incrementamos Puntero.-
  27.    movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",
  28.    subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-
  29.    btfss   STATUS,Z      ; Si Z=1 --> 0x3A - FSR = 0.-
  30.    goto   Muestro_Display      ; No, muestro display.-
  31.    movlw   0x30         ; Si reseteo puntero.-
  32.    movwf   FSR            ;
  33.    goto    Muestro_Display
  34.  
  35. Muestro_Display
  36.    movfw   INDF         ; Leo Registro que apunta FSR.-
  37.    movwf   PORTB         ; Lo cargo en PORTB.-
  38.    goto   Bucle         ; Continuo conteo.-

Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 28 de Mayo de 2009, 02:57:20
Gracias por tu respuesta Suki.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 28 de Mayo de 2009, 11:09:58
Yo utilizo Proteus.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 29 de Mayo de 2009, 20:32:27
hola soy novata en la programacion de pics. Tengo un proyecto similar al antes menciondo solo que ocupo que laa entrada de mi push botton sea por el puerto B tambien, seria 1 bit de entrada y 7 de salida, espero puedan ayudarme, de antemano gracias.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 29 de Mayo de 2009, 20:39:20
El ejemplo visto aquí y este (http://www.todopic.com.ar/foros/index.php?topic=24720.msg201401#msg201401) te van a servir. Solo hay que dedicarse a entenderlo.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 30 de Mayo de 2009, 02:02:53
muchisimas gracias, estoy estudiandolo muy bien para tratar de entenderlo mejor, pero tengo un problema, solo me cuenta hasta el numero 8 y ya de ahi no me realiza ninguna operacion ni pasa al sig bit 9 ni nada, ya buske, pero no encuentro respuesta alguna, me podrian ayudar...

gracias :(
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 30 de Mayo de 2009, 05:11:02
Sube el programa y lo miramos, tienes que tener algun fallo del que no te das cuenta.

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 30 de Mayo de 2009, 16:11:42
ya salio thx
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 30 de Mayo de 2009, 17:26:25
 
A mi ya no me pasa de la primera pulsacion del pulsador. fijate como configuras el pulsador; como salida

 movlw b'10000000'   
   clrf   TRISB      ; PORTB como salida.-    <en vez de clrf pon movwf>


btfss   PORTB,Pulsador   
goto    Bucle
call    Demora_190ms   ; Para anti-rebote Pulsador   
btfsc   PORTB,Pulsador   ; Testeamos nuevamente   < aqui es btfss y no btfsc>
goto    Bucle   ; Falsa alarma. 

sino te vuelve siempre a bucle y no sale de ahi, corrige esto y a ver que te hace,

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 30 de Mayo de 2009, 17:29:32
Coño se borro el programa.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 30 de Mayo de 2009, 17:40:07
Se borro el programa no se que paso.
con esas moificaciones creo que funciona, el delay para los rebotes es de 20ms no de 190 como pones tu, eses son los de mostrar los numeros cuando se incrementa el solo.

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 30 de Mayo de 2009, 21:13:29
Coño se borro el programa.
Ya solucionó el problema y borró el código  :(
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 31 de Mayo de 2009, 03:23:02
hola tapi8 y suki perdon pero es que subi el codigo equivocado, lo que pasa es que hice demasiadas pruebas porque no hallaba el error y no keria modificar mucho uno porque, que tal si funcionaba pero ya tengo el correcto, lo subire ok.....y perdon no vuelve a pasar  :lol:
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 31 de Mayo de 2009, 05:38:45
Es que nunca me habia pasado, lo copie para pasarlo por el MPLAB y cuando volvi para responder ya no estaba, pense que fuera culpa mia que soy un poco patoso :lol:
Ya te funciona?. A mi me pasaba del Nº 8 y me mostraba el 9 con ese codigo y esas madificaciones.

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 31 de Mayo de 2009, 14:05:00
Tengo algunos errores aun se alenta demasiado y me falta kreo alguna instruccion, porqe al dejar oprimido el pulsador debe de leer los numero que pueda, y al soltarlo kedarse en el qe continue. siendo asi que al oprimir el pulsador rote bit por bit, pero que al dejarlo oprimido tambien continue con la lectura, voy a subir mi codigo sale y no fue culpa tuya tapi8 , fue error mio te repito, tengo muchos programas qe hice para hallar el error y  mande el equivocado pero aqi va el qe ya me funciono con lentitud pero funciono y ya solo le falta la otra instruccion.

;**** Programa principal ****
;**** Configuracion de puertos ****
Inicio
   bsf   STATUS,RP0    ; Pasamos de Banco 0 a Banco 1.-
movlw b'10000000'  ;RB7 como entrada y los demas como salida   
movwf   TRISB      ; PORTB como salida.-
 bcf   STATUS,RP0   ; Paso del Banco 1 al Banco 0
movlw b'00000001'      ;Comienza en cero
   call   Config_Tabla   ; Cargamos registros con Codigo de 7 segmentos.-   
   movfw   INDF      ; Leemos codigo de 7 Segmentos para el CERO.-
   movwf   PORTB      ; Mostramos el CERO.-
 
;**** Testeo de Pulsador ****
Bucle 

btfss   PORTB,Pulsador   
goto    Incremento
oto    Bucle
call    Demora_190ms   ; Para anti-rebote Pulsador   
btfsc   PORTB,Pulsador   ; Testeamos nuevamente   
goto    Bucle   ; Falsa alarma. 

Incremento
incf   FSR,1         ; Incrementamos Puntero.- 
movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",   
subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-   
btfss   STATUS,Z      ; Si Z=1 --> 0x3A - FSR = 0.-   
goto   Muestro_Display      ; No, muestro display.-   

movlw   0x30         ; Si reseteo puntero.- 
movwf   FSR            ;   
goto    Muestro_Display

Muestro_Display   
movfw   INDF         ; Leo Registro que apunta FSR.-   
movwf   PORTB         ; Lo cargo en PORTB.-   
goto   Bucle         ; Continuo conteo.-


;**** Demora ****
Demora_190ms
   movlw   0xFF         ;
   movwf   Contador1      ; Iniciamos contador1.-
Repeticion1
   movlw   0xFF         ;
   movwf   Contador2      ; Iniciamos contador2
Repeticion2
   decfsz   Contador2,1      ; Decrementa Contador2 y si es 0 sale.-     
   goto   Repeticion2      ; Si no es 0 repetimos ciclo.-
   decfsz   Contador1,1      ; Decrementa Contador1.-
   goto   Repeticion1      ; Si no es cero repetimos ciclo.-
   return            ; Regresa de la subrutina.-
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 31 de Mayo de 2009, 14:33:06
No se si entendí, pero la idea es que al pulsar el botón, vaya avanzando la cuenta hasta soltarlo?

En esta parte del código hay un error:
Código: ASM
  1. ;**** Testeo de Pulsador ****
  2. Bucle
  3.  
  4. btfss   PORTB,Pulsador  
  5. goto    Incremento
  6. oto    Bucle
  7. call    Demora_190ms   ; Para anti-rebote Pulsador  
  8. btfsc   PORTB,Pulsador   ; Testeamos nuevamente  
  9. goto    Bucle   ; Falsa alarma.

Fijate que esta parte nunca se ejecuta:
Código: ASM
  1. call    Demora_190ms   ; Para anti-rebote Pulsador  
  2. btfsc   PORTB,Pulsador   ; Testeamos nuevamente  
  3. goto    Bucle   ; Falsa alarma.


Para hacer lo que indique al principio sería así:
Código: ASM
  1. ;**** Testeo de Pulsador ****
  2. Bucle
  3. btfss   PORTB,Pulsador  
  4. goto    Incremento
  5. goto    Bucle
  6.  
  7. Incremento
  8. call    Demora_20ms   ; Para anti-rebote Pulsador (POR SI ES SOLO UNA PULSACION)  
  9. btfsc   PORTB,Pulsador   ; Testeamos nuevamente  
  10. goto    Bucle   ; Falsa alarma.
  11. incf   FSR,1         ; Incrementamos Puntero.-
  12. movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",  
  13. subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-  
  14. btfss   STATUS,Z      ; Si Z=1 --> 0x3A - FSR = 0.-  
  15. goto   Muestro_Display      ; No, muestro display.-  
  16.  
  17. movlw   0x30         ; Si reseteo puntero.-
  18. movwf   FSR            ;  
  19. goto    Muestro_Display
  20.  
  21. Muestro_Display  
  22. movfw   INDF         ; Leo Registro que apunta FSR.-  
  23. movwf   PORTB         ; Lo cargo en PORTB.-  
  24. ;************************
  25. ; Visualizamos durante 190ms y si el pulsador sigue accionado incrementamos la cuenta.
  26. call    Demora_190ms
  27. ;************************
  28. goto   Bucle         ; Continuo conteo.-
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 31 de Mayo de 2009, 14:54:38
gracias suky pues este programa tiene ke realizar dos funciones, al darle oprimir alpulsador me de un numero , lo pulso de nuevo y otro y asi sucesivamente ,pero qe tambien al dejalo pulsado continue con la lectura de los numeros hasta qe nuevamente lo deje de oprimir y continue a pulsar de uno en uno, son dos acciones, yatenemos una de numero por numero....

y gracias fueron de gran apoyo tus comentarios
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 31 de Mayo de 2009, 16:02:59
Lo has probado en prtoboard? a mi en el MPLAB ya me hace todo eso, en este que pones ahora te lo hace pr 0 y no por 1, es asi como lo quieres?, te lo digo porque yo el pimero te lo ponia para activarse por 1; el que te pone suki creo que tambien y ademas te hace un delay de 190 ms para que se vea el numero, pero lo hace al estar a 0 el pulsador, ojo con esto cuando lo montes o lo simules, estos ultimos no los probe en el MPLAB pero si lo hizo suki seguro que esta bien, ademas no se le pone la condicion para que no lo haga

tapi8
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: klau24 en 31 de Mayo de 2009, 17:36:01
lo estoy probando en el pci simulator y me realiza la funcion de contador utilizando push boton, cambia de uno en uno y la otra funcion es ke si lo dejo pulsado sige leyendo los numero, ya corregi lo ke me dices pero no ahora lo ke hace es ke le tengo qe dar dos pulsaciones para que cambie......
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Suky en 31 de Mayo de 2009, 19:56:49
lo estoy probando en el pci simulator y me realiza la funcion de contador utilizando push boton, cambia de uno en uno y la otra funcion es ke si lo dejo pulsado sige leyendo los numero, ya corregi lo ke me dices pero no ahora lo ke hace es ke le tengo qe dar dos pulsaciones para que cambie......

El código del pulsador:
Código: ASM
  1. ;**** Testeo de Pulsador ****
  2. Bucle
  3.         btfss   PORTB,Pulsador  
  4.         goto    Incremento
  5.         goto    Bucle
  6.  
  7. Incremento
  8.         call    Demora_20ms   ; Para anti-rebote Pulsador (POR SI ES SOLO UNA PULSACION)  
  9.         btfsc   PORTB,Pulsador   ; Testeamos nuevamente  
  10.         goto    Bucle   ; Falsa alarma.
  11.         incf   FSR,1         ; Incrementamos Puntero.-
  12.         movlw   0x3A         ; Consulamos si se pide codigo para mostrar "10",  
  13.         subwf   FSR,0         ; si es asi reseteamos FSR, apunta a 0x30--> "0".-  
  14.         btfss   STATUS,Z      ; Si Z=1 --> 0x3A - FSR = 0.-  
  15.         goto   Muestro_Display      ; No, muestro display.-  
  16.        
  17.         movlw   0x30         ; Si reseteo puntero.-
  18.         movwf   FSR            ;  
  19.         goto    Muestro_Display
  20.  
  21. Muestro_Display  
  22.         movfw   INDF         ; Leo Registro que apunta FSR.-  
  23.         movwf   PORTB         ; Lo cargo en PORTB.-  
  24.         call    Demora_300ms
  25.         goto   Bucle         ; Continuo conteo.-

Esto simulado en proteus cumple con los requerimientos pedidos, solo le aumente la demora de Visualización en el caso de  que el pulsador siga accionado. Ten en cuenta que al accionar el pulsador se aumenta el conteo y se visualiza durante 300ms, y en este tiempo una nueva pulsación no afectará en el conteo. Te adjunto el esquemático desarrollado.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: Kikeynuri en 31 de Mayo de 2009, 20:07:04
Suki...
Puedes explicarme un poco mas me perdi, ya no supe colocarle el codigo para adaptarle el boton... el boton tiene que tener la funcion de ir dando un numero cada que lo preciones.
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: lalomatix en 31 de Mayo de 2009, 20:34:06
mira q bien lo probare!
Título: Re: Display 7 segmentos Pic 16f628a
Publicado por: tapi8 en 01 de Junio de 2009, 07:12:50
En todas las facultades de Mxico pusieron el mismo ejercicio? que suerte teneis :lol: :lol:

tapi8