TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: DS26 en 09 de Marzo de 2006, 17:31:00

Título: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: Chaly29 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

Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix 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.


Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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 ^^
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: Chaly29 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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 ^^
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: Chaly29 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

Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: poi5on 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: Nomademc 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.
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 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
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 11 de Marzo de 2006, 06:43:00
Escrito originalmente por DS26
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[/cita]

Espero que hayas puesto mal el formato del oscilador, ya que debiera ir un extremo del oscilador a sendos pines OSC1 y OSC2.

Lo de la resistencia en RC0 a gnd es una obligacion! NUNCA DEJES PINES AL AIRE, no solo por temas de ruido eléctrico sino por peligro de descargas electrostáticas.

Podrias subir un .asm?  has subido un .hex.  Te quiero ayudar pero trata de hacernos las cosas más faciles.

Saludos

Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 11 de Marzo de 2006, 07:07:00
He modificado algo y solo con un tiempo de aproximadamente 7 segundos y los cuenta pero en vez de poner el el 1 en el puerto b donde yo le digo se enciende otra vez la patilla rb7.

Aqui tienes la dire del .asm : http://rapidshare.de/files/15231473/PruebaB.asm.html

Gracias por el interes.

Entonces todas las patillas que ahora mismo no uso las conecto a masa directamente y a la rc2 (que uso en lugar de la rc0 en esta prueba) le pongo ademas una resistencia de 10k ?

PD: la idea era para controlar unas luces a tiempos determinados guardados en un 24lc256, pero si no lo hace sin ella pos imaginate xD. Aunque las rutinas para el control i2c ya me han pasado unas que estan probadas y funcionan ^^. Pero quien sabe
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: poi5on en 11 de Marzo de 2006, 07:47:00
Ya corregiste el error que tienes en el cristal?

salu2
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 11 de Marzo de 2006, 08:21:00
jejejje fallo mio al dibujar. Una patilla del cristal va a osc1 y la otra a osc2.

Mira el asm a ver si a ti te rula bien o no.

Gracias
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 11 de Marzo de 2006, 17:45:00
Pues eso esperar a que los contadores sean iguales por eso en espera solo comparo los contadores que se incrementan en TM1INT con los valores de los otros contadores y si son iguales pos es cuando enciende.

A ver si me explico mejor...

Ese trozo de codigo es:

El de la interrupcion para incrementar los contadores de tiempo (1 incremento cada vez que se llama a la interrupcion por comparacion con ccp1)

Y la de espera solo para comparar los contadores CONT1,2y3 con CON1,2y3 y si son iguales pues enciende.

Creo que me he explicado mejor, no? sino pos pregunta que contesto gustoso ya que estas intentando ayudarme es lo menos que puedo hacer ^^
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 14 de Marzo de 2006, 05:30:00
Según lo que puedo ver, la variable CON1, CON2, CON3 y CON4 están siempre en 0.

Esto hace que la comparación llegue hasta 2^32 x tiempo timer = 4.294.967.296 x tiempo timer...

Tardará unos cuantos años en lograr dicho valor [Giño]

Revisa eso y continuamos.

Si dices que sí o sí se te resetea, entonces te propongo que hagas otra prueba.  Que quites ese timer, que hagas un software más corto y simple en el que solo prendas y apagues un led, sin usar timers ni interrupciones.  Si el pic se resetea entonces tienes algún problema de hardware.

Saludos
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 14 de Marzo de 2006, 09:40:00
Pues va ser que con este codigo:
Codigo:
   list    p=16f877
   #include p16f877.inc
 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF

   ORG   0
   GOTO   MAIN
   ORG   4
   GOTO   MAIN
   ORG   8
MAIN   BCF   STATUS,RP0   
   BCF   STATUS,RP1
   CLRF   PORTB
   CLRF   PORTC
   BSF   STATUS,RP0
   CLRF   TRISB
   MOVLW   B"00000100"
   MOVWF   TRISC
   BCF   STATUS,RP0
   BSF   PORTB,7
ACTIVO   BTFSS   PORTC,2
   GOTO   ACTIVO
   BCF   PORTB,7
   BSF   PORTB,0
      END


Hasta poner el 1 en el bit 7 del puerto B llega. La comprobacion la hace, cuando le doy en 1 por la RC2 pone 1 en la RB0 y pasado un rato va perdiendo luz el led y se va encendiendo el de la RB7 luego se apaga y si acerco la mano se enciende. Ahora va ser que he hecho un detector de presencia xDDDDD (hay que joerse).

Entonces maumix es cosa del programador (programador hardware) que uso o alguna idea?

En cuanto a las variables cuando lo simulo en el MPLAB si me cogen valores Enfurruñado nose.

Gracias
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 14 de Marzo de 2006, 16:42:00
A ver intentá esto.
Codigo:

   list    p=16f877

   #include p16f877.inc

    __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF


   ORG   0

MAIN   
   bcf   INTCON,GIE

   bsf   STATUS,RP0
   bcf   STATUS,RP1
   clrf   TRISB
   movlw   B"00000100"
   movwf   TRISC
   bcf   STATUS,RP0

   clrf   PORTB
   clrf   PORTC

   bsf   PORTB,7

ACTIVO
   BTFSS   PORTC,2
   GOTO   ACTIVO

   BCF   PORTB,7
   BSF   PORTB,0
FIN:
   goto   FIN   

   end



Realmente tu no estabas terminando bien el software, tienes uqe tener presente que el pic todo el tiempo tiene "algo" en toda su memoria de programa.  Si tu no le programas nada..... no importa,  siempre tiene algo.  Si es una instrucción no valida la ejecutará como un NOP , si es una instrucción válida sencillamente la ejecutará.

Entonces, tu le debes indicar al pic donde ir SIEMPRE.
Si no le pones nada, no se que pueda llegar a hacer el pic porque depende que haya quedado grabado en el pic! se entiende?

Entonces prueba este código, si funciona.... habremos dado un paso importante , el que tu hardware no está malo.

Otra cosa, cuanta corriente le estas sacando al PIC? Fijate que el máximo son 25mA por pin, pero tampoco s epuede sacarle 25 mA de todos los pines a la misma vez, esto está aclarado en la datasheet.

Fijate como puse antes la declaración de los tris y luego el seteo o borrado del PORTB.

Pruebalo y comentame los resultados.
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 15 de Marzo de 2006, 04:57:00
Pues ahora aguanta 9 segundos antes de apagarse el led de la rb0 y encenderse de nuevo el de la rb7.

Podria ser que el programador no grabara bien la palabra de configuracion el el pic y este activado el WDT? O que otra cosa puede ser?

He probado con dos pic16f877 por si uno estaba mal pero los dos hacen lo mismo Enfurruñado

Gracias maunix por el interes, tu diras que pruebo ahora. De momento a ver si me pillo otro programador mientras pa probar si pasa lo mismo
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 15 de Marzo de 2006, 06:22:00
Escrito originalmente por DS26
Pues ahora aguanta 9 segundos antes de apagarse el led de la rb0 y encenderse de nuevo el de la rb7.

Podria ser que el programador no grabara bien la palabra de configuracion el el pic y este activado el WDT? O que otra cosa puede ser?

He probado con dos pic16f877 por si uno estaba mal pero los dos hacen lo mismo Enfurruñado

Gracias maunix por el interes, tu diras que pruebo ahora. De momento a ver si me pillo otro programador mientras pa probar si pasa lo mismo


Tu programador es ICSP? o quitas el pic para programarlo fuera? La pregunta viene porque el RB7 casualmente es un pin de programación y si lo tienes como ICSP no te aconsejo que lo uses.

Sino, yo buscaría armar otro circuito, busca algo más simple.  El WDT si has visto el encabezado del programa está desactivado, salvo que en el software de ut programador lo vuelvas a activar.  De todas formas 8 segundos es mucho para un WDT incluso con el Prescaler al máximo.

Saludos
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 15 de Marzo de 2006, 16:27:00
En mi circuito como ya dije necesito 25 salidas para cada una de los 25 pulsos de las luces y como comunicacion i2c con una 24lc256 (puertoC) y con un pc o otro pic por rs232(puertoC).

Contestando a las preguntas, quito el pic del circuito y lo pogo en un programador para programarlo, el circuito para las luces solo es lectura y comunicacion(i2c y rs232) pero no programacion.

Con respecto al WDT si lo dejo desactivado y si tienes razon 9 segundos es mucho tiempo asi que no se que puede ser Enfurruñado

Gracias
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 15 de Marzo de 2006, 20:18:00
Escrito originalmente por DS26
En mi circuito como ya dije necesito 25 salidas para cada una de los 25 pulsos de las luces y como comunicacion i2c con una 24lc256 (puertoC) y con un pc o otro pic por rs232(puertoC).

Contestando a las preguntas, quito el pic del circuito y lo pogo en un programador para programarlo, el circuito para las luces solo es lectura y comunicacion(i2c y rs232) pero no programacion.

Con respecto al WDT si lo dejo desactivado y si tienes razon 9 segundos es mucho tiempo asi que no se que puede ser Enfurruñado

Gracias


Ok, si ese programa simple no te funciona es OTRA COSA.

Yo que tu verifico bien el hardware, el circuito de reset, la alimentación, TODO!

Además cuanta corriente le sacas a cada pin? Fijate que el máximo no es 25mA por pin x numero de pines!  Si mal no recuerdo PORTB y D juntos no podias sacarle mas de 200mA o algo así era.  Por eso si bien el máximo por pin es 25mA , el máximo por puertos no es lo mismo multiplicado por la cantidad de pines!  Espero se me haya entendido.

Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: DS26 en 16 de Marzo de 2006, 09:45:00
Como ya dije es para 25 señales para los trial que encienden las bombillas pero nunca mas de 1 a la vez es decir lo maximo que va a estar a 1 un pin es 0.01 y hasta que se apague y encienda otro pasaran otros 0.01 lo maximo en todo caso serian 2 a la ez pero dudo se de el caso. Asique no creo que pase nada por ese lado.

Todos los componentes los he comprobado y estan bien. no hay ningun corto por hay ni nada por el estilo.

El circuito de reset pues le he metido un +5 por la patilla 1 y iba bien el programilla ese sencillo, pero cargue uno de los anteriores para ver y ahora me parpadea como si se apagase(0,5seg),encendiese(0,5 seg),apagase(0,25 seg),encendiese(1 seg). Incluso si ahora cargo el otro programa simple Enfurruñado

Lo de los tiempos es porque no es siempre igual sino que el ultimo tarda menos en encenderse y dura mas hace todo el tiempo esa secuencia.
A ver que me habre cargado ahora?

La alimentacion es desde una pla con entrada +9v y salida para colocar otros circuitos a +5v (esos +5 salen por medio de un LM3405, encima tb pone PM19AE)

Espero respuesta, gracias.
Título: RE: Como evitar el reset del PIC? (Urge)
Publicado por: maunix en 16 de Marzo de 2006, 14:27:00
Escrito originalmente por DS26
Como ya dije es para 25 señales para los trial que encienden las bombillas pero nunca mas de 1 a la vez es decir lo maximo que va a estar a 1 un pin es 0.01 y hasta que se apague y encienda otro pasaran otros 0.01 lo maximo en todo caso serian 2 a la ez pero dudo se de el caso. Asique no creo que pase nada por ese lado.

Todos los componentes los he comprobado y estan bien. no hay ningun corto por hay ni nada por el estilo.

El circuito de reset pues le he metido un +5 por la patilla 1 y iba bien el programilla ese sencillo, pero cargue uno de los anteriores para ver y ahora me parpadea como si se apagase(0,5seg),encendiese(0,5 seg),apagase(0,25 seg),encendiese(1 seg). Incluso si ahora cargo el otro programa simple Enfurruñado

Lo de los tiempos es porque no es siempre igual sino que el ultimo tarda menos en encenderse y dura mas hace todo el tiempo esa secuencia.
A ver que me habre cargado ahora?

La alimentacion es desde una pla con entrada +9v y salida para colocar otros circuitos a +5v (esos +5 salen por medio de un LM3405, encima tb pone PM19AE)

Espero respuesta, gracias.


Amigo, bien, es que con tantas idas y venidas no me puedo acordar de todo lo que hablamos antes.  El punto es el siguiente.

Te pido que postees el esquemático de tu circuito de reset y de alimentación.  No puedo seguir mas que hasta aquí, ya te puse código que anda bien y carece de complejidad alguna.  Si ese diseño no mantiene encendido a tu pic es porque tienes UN PROBLEMA DE HARDWARE.

Cuanto antes lo asumas, antes lo resolverás.

Como no estoy a tu lado es que pido que subas el esquemático para ver de que trata tu circuito.  Además no te vendría mal que pruebes darle alimentación a un pic, un led , el cristal y el circuito de reset en una protoboard.  Si ahí tampoco te anda entonces o tu pic tiene problemas o realmente el circuito que estas armando está muy mal hecho.

Saludos