TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alex22ra en 30 de Agosto de 2005, 06:14:00
-
Ya llevo dos problemas.
Os comento, llega un momento el programa que al ejecutar esta intruccion se me resetea el PIc (16F876):
bsf status, rp0
movlw 0xFF
movwf opcion ;Aqui se resetea
El problema es que solo lo hace a veces, otras lo ejecuta perfectamente, ¿Me podeis decir que factores pueden provocar un reset, aparte del watchdog?
Estoy utilizando el PROTEUS.
-
Lo más común es:
1.- WDT (Watch Dog Timer)
2.- BOR (Brown Out Reset)
3.- LVP (Low Voltage Porgramming)
4.- Ruidos
Como sabrás los resets son por:
caso:
1.- En el primer caso, si no reseteamos el contador del WDT, el PIC se resetea
2.- Si el pic recibe menos de un determinado voltaje, se resetea.
3.- Si el pic recibe 5 Volts, se pone en modo LVP.
4.- Si no pones un capacitor de desacople entre VDD y VCC de 100 nf, muchas
veces el Pic se cuelga.
Espero que te sirva
Saludos
-
Tiene que ser un problema software.
¿Como se puede saber el contenido del WTD?
-
Tengo entendido que un desbordamiento de la pila también lo resetea.
-
Creo que no, si sobrepasas los niveles de la pila, esta empieza de nuevo solapando informacion, con los problemas evidentes.
Pero si lo simulas con el MPLAB si que se te resetea, pero debe ser problema del simulador.
Tampoco lo puedo afirmar al 100%
-
hola.
Pregunto:
opcion es puntero de que posicion de memoria?
Este codigo que pegaste esta dentro de una funcion?
saludos...
-
Es puntero de el registro option (0x81) y no esta dentro de ninguna funcion, está en el bucle principal.
¿Que tenias en mente?
-
bit 7 RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabled by individual port latch values
bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on RA4/T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
bit 4 T0SE: TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on RA4/T0CKI pin
0 = Increment on low-to-high transition on RA4/T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit 2-0 PS2:PS0: Prescaler Rate Select bits
tenes las interrupciones Activadas? puede suceder por el bit 6 del registro option. fijate:
bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin
eso configura si la interrupcion se va a producir cuando el RB0 pase a un estado de ALTO(option_reg,6 = 1) o BAJO(option_reg,6 = 0).
o por el bit 7, ya que desactivas las pull pus y los 4 bits de mayor peso(RB4-RB7) del Puerto B pueden cambiar de estado y generar una interrupcion si es que tenes la interrupcion del puerto B habilitada ...
El timer0 tambien puede generar una interrupcion. fijate.
Saludos.