Autor Tema: cual es el error?? Se planta en 7  (Leído 5882 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado TATO_4x4

  • PIC10
  • *
  • Mensajes: 5
cual es el error?? Se planta en 7
« en: 05 de Diciembre de 2003, 08:16:00 »
Estimados: Por casualidad entre en el tema de los pic y vi las posibilidades de uso que tienen y realmente eso me engancho a tal punto que me compre un programador y todos los componentes para realizar mi primer proyecto. Que por cierto ya lo arme. Ahora el tema es que funciona relativamente bien ya que solo cuenta hasta el 7 y despues vuelve a empezar de 0, cuando en realidad deberia llegar a 9999. En el compilador de mplab no me acusa errores por lo tanto presumo que el problema esta en el codigo (es cortito) pero no tengo el conocimiento de asembler para saber porque se manifiesta tal comportamiento. Igualmente les comento que dicho circuito y codigo lo saque de una pagina web. (PABLIN)

Un abrazo grande para todos.

Adjunto el codigo .asm
;Contador de 4 digitos.

indo    equ     00h             ;registro de indireccion
pc      equ     02h             ;contador de programa
status  equ     03h             ;registro de estado
fsr     equ     04h             ;registro de seleccion
ptoa    equ     05h             ;puerto a
ptob    equ     06h             ;puerto b
rota    equ     0fh             ;variable para desplazamiento de display
trisa   equ     85h             ;configuracion puerto a
trisb   equ     86h             ;configuracion puerto b
dig1    equ     10h             ;acumulador miles
dig2    equ     11h             ;acumulador centenas
dig3    equ     12h             ;acumulador decenas
dig4    equ     13h             ;acumulador unidades
loops   equ     1dh             ;variables usadas en retardos
loops2  equ     1eh
z       equ     02h             ;flag de cero
ram     equ     05h             ;bit de seleccion de pagina de memoria
c       equ     00h             ;flag de acarreo
w       equ     00h             ;bit de destino a variable de trabajo

reset   org     00
        goto    inicio
        org     05h

retardo                         ;subrutina de retardo
        movwf   loops           ;la variable de trabajo contiene la cant.
top2    movlw   d"110"          ;de ms a demorar
        movwf   loops2
top     nop
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2          ;controla si termina 1mS
        goto    top
        decfsz  loops           ;controla si termina el retardo completo
        goto    top2
        retlw   0

s1000                           ;rutina de incremento x 1000
        clrf    dig2            ;pone a cero las centenas
        incf    dig1            ;incrementa el contador de miles  
        movf    dig1, w         ;carga en work el conteo de los miles  
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        clrf    dig1            ;inicializa los miles  
        return
s100                            ;rutina de incremento x 100
        clrf    dig3            ;pone a cero las decenas
        incf    dig2            ;incrementa el contador de centenas
        movf    dig2, w         ;carga en work el conteo de las centenas
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s1000           ;incrementa los miles  
        return

s10                             ;rutina de incremento x 10
        clrf    dig4            ;pone a cero las unidades
        incf    dig3            ;incrementa el contador de decenas
        movf    dig3, w         ;carga en work el conteo de las decenas
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s100            ;incrementa las centenas
        return

subir                           ;rutina de incremento
        incf    dig4            ;incrementa el contador de unidades
        movf    dig4, w         ;carga en work el conteo de las unidades
        xorlw   0ah             ;si work era 10, entonces quedara en cero
        btfsc   status, z       ;si es cero, el flag z queda alto
        call    s10             ;incrementa las decenas
        movlw   d"250"          ;retardo de 100ms
        call    retardo
        return

tabla                           ;genera los numeros sobre el display
        addwf   pc              ;agrega al cont. programa el valor de work
        retlw   b"00111111"     ;genera el 0
        retlw   b"00011000"     ;genera el 1
        retlw   b"01110110"     ;genera el 2
        retlw   b"01111100"     ;genera el 3
        retlw   b"01011001"     ;genera el 4
        retlw   b"01101101"     ;genera el 5
        retlw   b"01101111"     ;genera el 6
        retlw   b"00111000"     ;genera el 7
        retlw   b"01111111"     ;genera el 8
        retlw   b"01111101"     ;genera el 9

inicio                          ;programa principal
        bsf     status, ram     ;selecciona el banco de memoria alto
        movlw   b"00010000"     ;configura el puerto a
        movwf   trisa           ;bit 4 entrada, demas bits salidas.
        movlw   00h             ;configura el puerto b
        movwf   trisb           ;como salidas
        bcf     status, ram     ;selecciona el banco de memoria bajo
        clrf    dig1            ;inicializa acumuladores
        clrf    dig2
        clrf    dig3
        clrf    dig4
        movlw   00              ;envia ceros a los transistores para apagar
        movwf   ptoa            ;todos los displays

empe    btfss   ptoa, 4         ;chequea el pulsador
        call    subir           ;llama la rutina de incremento
        movlw   08h             ;iniciar un 1 en el registro de rotacion
        movwf   rota            
        movlw   dig1            ;con el registro selector (fsr) se apunta
        movwf   fsr             ;al primer dato que se va a mostrar
disp    movlw   00h             ;colocar en cero el dato del display
        movwf   ptob            ;para apagarlos
        movf    rota, w         ;pasa rotacion del 1 a la variable work
        movwf   ptoa            ;enciende el transistor (display)
        movf    indo, w         ;lee el dato del registro apuntado por fsr
        call    tabla           ;genera el digito de 7 segmentos
        movwf   ptob            ;envia el digito al puerto b
        movlw   03h             ;retardo de 3ms para visualizacion
        call    retardo
        btfsc   rota, 0         ;controla si terminaron las cuatro rotaciones
        goto    empe            ;si termino, vuelve desde el comienzo
        bcf     status, c       ;carry en cero para no afectar las rotaciones
        rrf     rota            ;desplaza el 1 que enciende los displays
        incf    fsr             ;incrementa el puntero. Apunta el proximo
        goto    disp            ;digito a mostrar

        end

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: cual es el error?? Se planta en 7
« Respuesta #1 en: 05 de Diciembre de 2003, 12:27:00 »
No le veo problemas, para mi esta bien.
El hardware como es?
Probaste de ver si se reinicia por un tiempo en particular?, esto seria por ejemplo hacerlo subir hasta 3 y dejarlo a ver si reinicia.
Me desconcierta un poco...pero se le sacaran los males, danos tiempo.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: cual es el error?? Se planta en 7
« Respuesta #2 en: 06 de Diciembre de 2003, 14:22:00 »
Hola, me arriesgo... tienes conectadas las resistencias de cada pin del micro a los segmentos???
porque justamente al intentar encender el 8 (todos los digitos, o por consumo o falta de alimentacion)... quizas se reinicia...

esperamos noticias ok?


Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado TATO_4x4

  • PIC10
  • *
  • Mensajes: 5
RE: cual es el error?? Se planta en 7
« Respuesta #3 en: 06 de Diciembre de 2003, 16:10:00 »
Bueno, antes que todo gracias por su interes en mi problema. A modo de respuesta les envie el circuito por mail (el sistema no me permite adjuntar el grafico por falta de espacio).

 Por cierto entonces (esto es para Norberto), las 7 resistencias estan a los segmentos respectivos, pero el reset no seria por consumo dado que solo se activan los displays de a uno por vez o al menos eso es lo que explica en el sitio de donde lo saque.
Siguiendo con lo que me plantea Marcos, doy tres impulsos, quedando en 0003 y a 1/2 segundo se vuelve a 0000 (tambien eso es signo de hay algo mal que no anda bien) .
Aun asi no entiendo por que no pasa del 7 (si el codigo para generar los digitos esta bien).
 Igualmente voy a dejar solo 1 display y veo si el tema pasa por el consumo.

Un abrazo grande.
Esteban

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: cual es el error?? Se planta en 7
« Respuesta #4 en: 06 de Diciembre de 2003, 18:29:00 »
Hola, entonces el problema es que se te resetea por el WATCH DOG, tienes que desabilitarlo cuando vas a grabar el micro, hay una ventanita en el mplab... o puedes escribir este encabezamiento en tu programa, para que se setee solo...

   __CONFIG _CP_ON & _PWRTE_OFF & _WDT_ON & _XT_OSC   ;CONFIGURO
;PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO PERRO GUARDIAN=NO ,ETC

Suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado TATO_4x4

  • PIC10
  • *
  • Mensajes: 5
RE: cual es el error?? Se planta en 7
« Respuesta #5 en: 07 de Diciembre de 2003, 10:02:00 »
Norberto!!!!!!!!!!!!!!!!!!!!!!!
Excelente. Ahi estaba la madre del borrego

Anda fantastico

lo que si asi como lo copiaste me daba un error
algo como variable cp no declarada.

Entonces estudie varias de las configuraciones que habia en tus librerias de asembler para contadores y encontre esta que es la que esta funcionando.

CP_ON                       EQU     H"000F"
_CP_OFF                      EQU     H"3FFF"
_PWRTE_ON                    EQU     H"3FF7"
_PWRTE_OFF                   EQU     H"3FFF"
_WDT_ON                      EQU     H"3FFF"
_WDT_OFF                     EQU     H"3FFB"
_LP_OSC                      EQU     H"3FFC"
_XT_OSC                      EQU     H"3FFD"
_HS_OSC                      EQU     H"3FFE"
_RC_OSC                      EQU     H"3FFF"

      list p=16F84A

      __CONFIG  _XT_OSC & _PWRTE_ON & _CP_ON & _WDT_OFF

La adjunto por si alguno lo llega a armar el contador de 4 digitos multiplexado.

Un abrazo grande y vamos por mas.
PD: ahora quiero armar un frecuencimetro y si me empacho ya se a quien llamar.

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: cual es el error?? Se planta en 7
« Respuesta #6 en: 08 de Diciembre de 2003, 00:44:00 »
Yo pondría la protección de código en OFF

Desconectado TATO_4x4

  • PIC10
  • *
  • Mensajes: 5
RE: cual es el error?? Se planta en 7
« Respuesta #7 en: 08 de Diciembre de 2003, 08:44:00 »
Pocher: Justo preguntaste algo que llama poderosamente la atencion.

En mi caso particular, se da el fenomeno de que si el CP esta en ON igualmente mi programador lee lo que hay en el pic.    !!!!!!?????

Como o cuando funciona la proteccion de codigo???

Por las dudas te cuento que tengo un programador PROPIC de puerto paralelo y lo uso con el soft PROPIC2 con win millenium.


Salu2.

Esteban.-

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: cual es el error?? Se planta en 7
« Respuesta #8 en: 08 de Diciembre de 2003, 09:44:00 »
No sé si será el caso, pero creo que si por programación lo pones en ON pero en el programa grabador lo pones en OFF manda lo del programa grabador. Teóricamente si está en ON, no tendría porqué leerse.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: cual es el error?? Se planta en 7
« Respuesta #9 en: 08 de Diciembre de 2003, 11:51:00 »
ESTEBAN!
si tu programador lee pic protegidos, vale millones!!!!  

Seguramente el programador, no te esta leyendo el pic, sino el .hex de la memoria de la pc

te pediriamos que confirmes eso ok?

Porcher, en realidad le copie y pegue un encabezamiento que tenia, solo me fije en el wach dog... que era su problema...


un gran abrazo!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado TATO_4x4

  • PIC10
  • *
  • Mensajes: 5
RE: cual es el error?? Se planta en 7
« Respuesta #10 en: 08 de Diciembre de 2003, 14:42:00 »
Voy a revisar eso que dice Pocher, realmente del software programador no toque nada, uso solo 3 botones
-read pic
-load hex
-program

Consulto: Si por esa casualidad de la chatarra electronica que siempre hay tirada, uno recupera un pic 16F de otra placa (ponele que esta bloqueado). Supuestamente no me permitiria leer lo que tiene adentro.
-Ahora bien, puedo borrar los datos y grabar un nuevo programa???? O sea reciclar ese pic.

Salu2.
E.-








Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: cual es el error?? Se planta en 7
« Respuesta #11 en: 08 de Diciembre de 2003, 16:22:00 »
Hola,  esa es la ventaja de la serie F , es decir FLASH, con lo cual, no es necesario el borrado, simplemente se graba "encima"...

podes emplear tu micro 16F "reciclado" sin problemas...



Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...


 

anything