Autor Tema: Como evitar el reset del PIC? (Urge)  (Leído 7223 veces)

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

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
Como evitar el reset del PIC? (Urge)
« en: 09 de Marzo de 2006, 17:31:00 »
He usado la busqueda y solo he encontrado lo contrario gente que quiere resetear el pic asique he abierto un nuevo tema.

LLevo hechas muchas pruebas entre ellas quitando todos las llamadas a subrutinas poniendo en su lugar goto x si se reseteaba x desbordamiento de la pila. Tb desactive el wdt para que no se resetee por el desbordamiento de este.
Entonces xq una vez inicializado el programa, quiero decir configurar los registros y asignar valores, el PIC16F877 se me resetea a los 4 o 5 segundo de comenzar el programa.

Datos:

PIC16F877
Oscilador: cristal de 20mhz y dos condensadores de 15pf

Basicamente es un contador y comparador.

Parte contador: mediante una interrupcion del timer1 a un valor reseteo el timer1 e incremento otro contador que a su vez incrementa otro.

Parte comparador: compara los valores de los contadores incrementados en la subrutina de interrupcion del timer1 con otros previamente asignados.

Al meter un "1" por un PIN lee unas valiables y se las asigna a los contadores y cuando termina hago un goto a ESPERA, que detallo a continuacion:

Tras activar el pin hago lo siguiente:

               BSF     T1CON,0             ;activo el timer1

               MOVLW B"11111111"
               MOVWF CON1
               MOVLW B"11111111"
               MOVWF CON2
               MOVLW B"11111111"
               MOVWF CON3

ESPERA   CLRF     CONT1
               CLRF     CONT2
               CLRF     CONT3
ESPERA1 MOVF    CONT1,0
               XORWF CON1,0
               BTFSS   STATUS,2
               GOTO    ESPERA1
               MOVF    CONT2,0
               XORWF CON2,0
               BTFSS   STATUS,2
               GOTO    ESPERA1
               MOVF    CONT3,0
               XORWF CON3,0
               BTFSS   STATUS,2
               GOTO   ESPERA1
               GOTO   PONER1

PONER1  BSF      PORTB,0

El tiempo de espera siendo 10 segundos se resetea a los 4 o 5 (comprobado poniendo un led en un pin y antes de poner el "1" esta encendido y despues se apaga, x eso se que se reinicia, xq se enciende y cuando meto el 1 se apaga y a los 4 o 5 seg se vuelve a encender)

Si el tiempo es de 2 segundos igualmente no pone el "1" en la patilla RB0 pero se resetea a los 4 o 5 segundos Llorica

Espero me podais ayudar.
Gracias

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #1 en: 09 de Marzo de 2006, 18:11:00 »
Hola DS26, postea el programa completo, porque de esta forma no sabemos si lo que estas haciendo previamente estaría bien.

Un saludo.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #2 en: 09 de Marzo de 2006, 18:28:00 »
Creo que no me dejo na tantos archivos de prueba tengo pero vamos en todos me pasa lo mismo Enfurruñado
Haciendo pruebas he deducido que donde entra pero no sale en en ESPERA xq mediante leds he visto que en la interrupcion entra y hasta llamar a espera tb pero bueno lo mismo es un fallo anterior.

      ORG   0
      GOTO   MAIN

      ORG   4
      GOTO   RSI
MAIN   BCF      STATUS,5
      BCF      STATUS,6
      CLRF   PORTA
      CLRF   PORTB
      CLRF   PORTC
      CLRF   PORTD
      CLRF   PORTE
      BSF      STATUS,5
      MOVLW   B"00000000"
      MOVWF   TRISA
      MOVLW   B"00000000"
      MOVWF   TRISB
      MOVLW   B"00000001"
      MOVWF   TRISC
      MOVLW   B"00000000"
      MOVWF   TRISD
      MOVLW   B"000"
      MOVWF   TRISE
      MOVLW   B"00001101
      MOVWF   PIE1   
      MOVLW   B"01000000"
      MOVWF   PIE2
      BCF      STATUS,5
      CLRF      T1CON
      CLRF   TMR1L         ;INICIALIZAR TEMPORIZADOR
      CLRF   TMR1H
      MOVLW   B"1011"
      MOVWF   CCP1CON
      MOVLW   B"01010000"
      MOVWF   CCPR1L
      MOVLW   B"11000011"
      MOVWF   CCPR1H

      MOVLW   B"11101000"      ;ESPERA DE 10 SEGUNDOS
      MOVWF   BUFFER
      MOVLW   B"00000011"
      MOVWF   BUF1
      MOVLW   B"00000000"
      MOVWF   BUF2
      MOVLW   B"00000001"
      MOVWF   BUF3
      MOVLW   B"11001000"      ;ESPERA  2 SEGUNDOS
      MOVWF   BUF4
      MOVLW   B"00000000"
      MOVWF   BUF5
      MOVLW   B"00000000"
      MOVWF   BUF6
      MOVLW   B"00001000"
      MOVWF   BUF7
      MOVLW   B"11011100"      ;ESPERA DE 15 SEGUNDOS
      MOVWF   BUF8
      MOVLW   B"10100000"
      MOVWF   BUF9
      MOVLW   B"00000000"
      MOVWF   BUF10
      MOVLW   B"10000000"
      MOVWF   BUF11
;ACTIVAR INTERRUPCIONES
      MOVLW   B"11000000"
      MOVWF   INTCON
;PROGRAMA PRINCIPAL
      BSF      PORTB,7
ACTIVO   MOVLW   B"00000001"
      ANDWF   PORTC,0
      BTFSC   STATUS,2
      GOTO   ACTIVO
      BCF      PORTB,7
      BSF      T1CON,0

      MOVF   BUFFER,0
      MOVWF CON1
      MOVF   BUF1,0
      MOVWF CON2
      MOVF   BUF2,0
      MOVWF CON3
      MOVF   BUF3,0
      MOVWF   LINEA
      GOTO   ESPERA
PONER1        MOVF   LINEA,0
      MOVWF   PORTB
      
FIN         BSF   PORTB,6
      GOTO   FIN

ESPERA   CLRF   CONT1
      CLRF   CONT2
      CLRF   CONT3
ESPERA1   MOVF   CONT1,0
      XORWF   CON1,0
      BTFSS   STATUS,2
      GOTO   ESPERA1
      MOVF   CONT2,0
      XORWF   CON2,0
      BTFSS   STATUS,2
      GOTO   ESPERA1
      MOVF   CONT3,0
      XORWF   CON3,0
      BTFSS   STATUS,2
      GOTO   ESPERA1
      GOTO   PONER1

RSI         BTFSS   PIR1,2
      RETFIE
      BCF      PIR1,2
      INCFSZ   CONT1,1
      RETFIE
      INCFSZ   CONT2,1
      RETFIE
      INCF   CONT3,1
      RETFIE

      END

A ver que puede ser Enfurruñado

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #3 en: 09 de Marzo de 2006, 19:17:00 »
El código no está completo... le falta toda la declaración de variables.

Haciendo así un vistazo general, no veo nada raro, pero si que te la has complicado sin sentido.  Creo que ese código pudiera ser mucho mas pequeño.  Más allá de eso,  como no está el código completo tampoco lo puedo simular porque estaría "suponiendo" cosas que tal vez no sean las que te traigan el problema.

Una sola cosa, tu no apagas el módulo A/D, hay posibilidades que algún pin del puerto A o del puerto E, tengan una tensión menor a 0V ?

Si esto es así se podría resetear el micro.

Además no entiendo porque ubicas la rutina de interrupción ahi abajo, la podrias ubicar directamente en la 0x04 sin el goto.

No guardas tampoco el contexto!! Si bien es cierto que el Wreg no lo usas en la rutina de interrupción y que el PCLATH no te será necesario guardarlo porque estas solo en una página de programa,  te comento que SI usas el STATUS, y en tu código también usas el STATUS.  El status se modifica en la rutina de interrupción lo que podría provocar que tu software se comporte en alguna circunstancia, de forma inesperada.

En toda hoja de datos te explica como hacer el "context saving" que es la forma de guardar el Wreg, Status y PCLATH para no tener problemas.

Además acá en el foro ese tema fue expuesto muchas veces, te invito a que lo busques.

Un abrazo

PD: si posteas tu código, ten la amabilidad de usar [ code ] y [ / code] para enmarcarlo.  Además usa los TABS!! no postees así que luego es tedioso tener que trasncribir todo ese código y agregarle las tabulaciones para recien poderlo compilar.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #4 en: 10 de Marzo de 2006, 01:45:00 »
Pense que no era necesario poner el trozo de declaracion de variables aqui x eso de que son registros fijos y los otros a partir del 2C daria igual el orden.

Voy a probar eso que me dices de deshabilitar A/D aunque solo uso al menos de momento el puerto B y C.

Escrito originalmente por maunix
En toda hoja de datos te explica como hacer el "context saving" que es la forma de guardar el Wreg, Status y PCLATH para no tener problemas.

Si no es mucho pedir me podrias decir como.

Buscar busque pero se ve no busque por el tema que dices que se trato varias veces solo busque por reset PIC.

Gracias, voy a ver

PD:Si no es esa la solucion posteare el codigo entero y ya cambio el orden como me has dicho ^^

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #5 en: 10 de Marzo de 2006, 05:12:00 »
Nada me sigue pasando lo mismo.
He desactivado las A/D y he añadico el codigo para guardar el STATUS, W y PCLATH cuando entre en la interrupcion y restaura antes de salir.
Pero se reinicia igualmente al mismo tiempo que antes.

Como dices tu que se haria mas sencillo y corto lo que yo digo?

Porque resumiendo lo que quiero es le meto un valor de 0.01 segundo que es el minimo tiempo que quiero hasta 46h que es el maximo para que se encienda un led (aunque la idea es para que se encianda una bombilla xD) una vez dado el pulso de incio por un pin del puerto C. De primeras estoy suponiendo los tiempos fijos y ya en variables en el pic pero me pasa eso que dije.

Si me pudieras ayudar te lo agradeceria eternamente (y si necesitaras algo tu diras) xq me urge terminarlo xq es para una sorpresa Enfurruñado


PD: Lo que no me explico xq simulandolo en el MPLAB va bien y en el PIC no pero bueno es lo que tiene la programacion

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #6 en: 10 de Marzo de 2006, 05:54:00 »
Hola DS26, fíjate si es esto lo que andas necesitando, los mayores cambios están en la rutina de interrupción:

Codigo:
   LIST      P = 16F877
   INCLUDE      <P16F877.INC>
   __CONFIG   _CP_OFF&_DEBUG_OFF&_WRT_ENABLE_OFF&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_HS_OSC

;----------------------------------------------------------------------------------------------------

CONT1      EQU      .32
CONT2      EQU      .33
CONT3      EQU      .34
CON1      EQU      .35
CON2      EQU      .36
CON3      EQU      .37
LINEA      EQU      .38
BUF1      EQU      .39
BUF2      EQU      .40
BUF3      EQU      .41
BUF4      EQU      .42
BUF5      EQU      .43
BUF6      EQU      .44
BUF7      EQU      .45
BUF8      EQU      .46
BUF9      EQU      .47
BUF10      EQU      .48
BUF11      EQU      .49
BUFFER      EQU      .50
WWW      EQU      .51
ESTADO      EQU      .52

;----------------------------------------------------------------------------------------------------
   ORG   .0
   GOTO   MAIN

   ORG   .4
   GOTO   RSI

;----------------------------------------------------------------------------------------------------
RSI
   movwf   WWW
   swapf   STATUS,W
   movwf   ESTADO

   INCFSZ   CONT1,F
   goto   SALE
   INCFSZ   CONT2,F
   goto   SALE
   INCF   CONT3,F
SALE
   bcf   PIR1,CCP1IF
   swapf   ESTADO,W
   movwf   STATUS
   swapf   WWW,F
   swapf   WWW,W
   retfie

;----------------------------------------------------------------------------------------------------
MAIN
   BCF   STATUS,RP0
   BCF   STATUS,RP1
   CLRF   PORTA
   CLRF   PORTB
   CLRF   PORTC
   CLRF   PORTD
   CLRF   PORTE

   BSF   STATUS,RP0
   MOVLW   B"00000000"
   MOVWF   TRISA
   MOVLW   B"00000000"
   MOVWF   TRISB
   MOVLW   B"00000001"
   MOVWF   TRISC
   MOVLW   B"00000000"
   MOVWF   TRISD
   MOVLW   B"000"
   MOVWF   TRISE
   MOVLW   B"00000100"
   MOVWF   PIE1
   MOVLW   B"01000000"
   MOVWF   PIE2
   BCF   STATUS,RP0

   CLRF   TMR1L       ;INICIALIZAR TEMPORIZADOR
   CLRF   TMR1H
   CLRF   T1CON
   MOVLW   B"00001011"
   MOVWF   CCP1CON
   MOVLW   B"01010000"
   MOVWF   CCPR1L
   MOVLW   B"11000011"
   MOVWF   CCPR1H

   MOVLW   B"11101000"    ;ESPERA DE 10 SEGUNDOS
   MOVWF   BUFFER
   MOVLW   B"00000011"
   MOVWF   BUF1
   MOVLW   B"00000000"
   MOVWF   BUF2
   MOVLW   B"00000001"
   MOVWF   BUF3
   MOVLW   B"11001000"    ;ESPERA 2 SEGUNDOS
   MOVWF   BUF4
   MOVLW   B"00000000"
   MOVWF   BUF5
   MOVLW   B"00000000"
   MOVWF   BUF6
   MOVLW   B"00001000"
   MOVWF   BUF7
   MOVLW   B"11011100"    ;ESPERA DE 15 SEGUNDOS
   MOVWF   BUF8
   MOVLW   B"10100000"
   MOVWF   BUF9
   MOVLW   B"00000000"
   MOVWF   BUF10
   MOVLW   B"10000000"
   MOVWF   BUF11
            ;ACTIVAR INTERRUPCIONES
   MOVLW   B"11000000"
   MOVWF   INTCON
            ;PROGRAMA PRINCIPAL
   BSF   PORTB,7
ACTIVO
   MOVLW   B"00000001"
   ANDWF   PORTC,0
   BTFSC   STATUS,Z
   GOTO   ACTIVO
   BCF   PORTB,7
   BSF   T1CON,0

   MOVF   BUFFER,0
   MOVWF   CON1
   MOVF   BUF1,0
   MOVWF   CON2
   MOVF   BUF2,0
   MOVWF   CON3
   MOVF   BUF3,0
   MOVWF   LINEA
   GOTO   ESPERA
PONER1
   MOVF   LINEA,0
   MOVWF   PORTB
FIN
   BSF   PORTB,6
   GOTO   FIN
ESPERA
   CLRF   CONT1
   CLRF   CONT2
   CLRF   CONT3
ESPERA1
   MOVF   CONT1,0
   XORWF   CON1,0
   BTFSS   STATUS,2
   GOTO   ESPERA1
   MOVF   CONT2,0
   XORWF   CON2,0
   BTFSS   STATUS,2
   GOTO   ESPERA1
   MOVF   CONT3,0
   XORWF   CON3,0
   BTFSS   STATUS,2
   GOTO   ESPERA1
   GOTO   PONER1

;----------------------------------------------------------------------------------------------------
   END


Suerte

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #7 en: 10 de Marzo de 2006, 06:52:00 »
Escrito originalmente por Chaly29
Suerte


Parece que la suerte no esta conmigo Enfurruñado

El codigo que has puesto a ti te funciona xq a mi me pasa exactamente lo mismo que antes pasan 4 o 5 segundos desde que meto el 1 por la patilla y se vuelve a encender la RB7. Si a ti te funciona, donde tengo yo el fallo¿?

Xq vamos a ver tengo unas resistencias entre la patilla y los led para ser exactos de 560 ohmios pero eso no es xq el primero se enciende. Lo otro es el oscilador que es de 20Mhz se supone en la serigrafia pone 20.000 y debajo KDS, he usado condensadores de 15pf no creo que sea por eso, verdad?

Vamos que estoy pa pegarme un tiro ya de tanta probatura

PD:Gracias por seguir ayudandome ^^

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #8 en: 10 de Marzo de 2006, 07:42:00 »
Hola DS26, as copiado el programa tal cual lo postee, ya que a mi me funciona bien, enciende el pin RB7, asta que llega el alto en RC0, luego apaga RB7 espera aproximadamente 10 seg. y enciende RB6 y RB0, nada de reset o algo por el estilo

Lo único que e mejorado es esto:
Codigo:
ACTIVO
   BTFSS   PORTC,0
   GOTO   ACTIVO
   BCF   PORTB,7
   BSF   T1CON,0

Pero no debería haber diferencia

Un saludo

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #9 en: 10 de Marzo de 2006, 09:28:00 »
Hola amigos;
No han cosiderado problemas de Hardware? como tienes la conexion del reset? como le envias el 1 al pin que te da el reset? que componentes tienes conectados en el PIC? chequela la alimentación si por calentamiento de la fuente cae el voltaje, en fin.

Saludos

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #10 en: 10 de Marzo de 2006, 09:38:00 »
Pues la tension la saco de una placa que esta preparada para añadirle componentes de tension 5v lleva un LM3405 para ello, al pic hay conectados 8 led con sus correspondientes resistencias y el oscilador (cristal 20Mhz y 2 condensadores de 15pf).

A que te refieres con la conexion al reset?

De hardware¿? te refieres al programador a la comunicacion con el pc xq como lees lo que es el pic no tiene casi na conectado.

PD: Chaly29 te he dejado un privi si puedes me contestas, gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #11 en: 10 de Marzo de 2006, 16:06:00 »
Escrito originalmente por DS26
Pues la tension la saco de una placa que esta preparada para añadirle componentes de tension 5v lleva un LM3405 para ello, al pic hay conectados 8 led con sus correspondientes resistencias y el oscilador (cristal 20Mhz y 2 condensadores de 15pf).

A que te refieres con la conexion al reset?

De hardware¿? te refieres al programador a la comunicacion con el pc xq como lees lo que es el pic no tiene casi na conectado.

PD: Chaly29 te he dejado un privi si puedes me contestas, gracias


Se refiere a un esquemático o algo similar.
Ademas si manejas luces o cosas por el estilo bien el ruido podría hacer resetear a tu pic.

Si te anda en el simulador pero no en el pic, eso puede ser 2 cosas.

1) Que no simules lo suficiente en el pic
2) Que tu hardware tenga problemas

Si manejas cargas con reles y esas cosas bien podría estar ahi tu problema,  que el ruido sea tal vez "por campo magnético" y te haga resetear el pic.  

postea un esquemático amigo que acá ponemos buena voluntad pero no somos adivinos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #12 en: 10 de Marzo de 2006, 17:27:00 »
OK lo hare en una imagen algo cutrecilla xq no tengo el orcad a mano.

Simular lo he simulado una vez completo cuando tenia los tres tiempos para elegir y una vez completo con un solo tiempo y funcionar funciona ahora en el pic funciona lo que es la configuracion pero una vez tiene que contar e ir a la interrupcion nose que le pasara.

En un rato edito el post y ponpo la imagen.
Gracias por la ayuda.

Asi esta montado:



El cristal esta una patilla a 0sc1 y la otra a osc2, esque me equivoque al dibujar en el paint .

PD: Esta montado en una protoBoard no se tocan unos led con otro ni los cables ni las resistencias, estan juntos pero de 3 a 5 mm la que mas cerca

Desconectado Nomademc

  • PIC10
  • *
  • Mensajes: 13
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #13 en: 10 de Marzo de 2006, 18:21:00 »
Intentá agregarle la resistencia para asegurar el nivel logico bajo (0V.) . En la pata RC0 ponele una resistencia a masa de 1k.

Desconectado DS26

  • PIC10
  • *
  • Mensajes: 15
RE: Como evitar el reset del PIC? (Urge)
« Respuesta #14 en: 10 de Marzo de 2006, 18:36:00 »
Ok, pero el problema me da despues de meter el 1 no antes?

Mañana la comprare y probare a ver.

Gracias

PD:Adjunto el .hex del codigo x si alguien puede simularlo y saber si le pasa lo mismo

Edito: como no deja adjuntar aqui esta subido:    http://rapidshare.de/files/15198338/Piro5.HEX.html


 

anything