TODOPIC

Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: PicMinor en 11 de Abril de 2014, 06:12:48

Título: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PicMinor en 11 de Abril de 2014, 06:12:48
¡¡ Saludos al foro !!

Estoy teniendo problemas al intentar simular en el proteus un micro que temporiza mediante saltos en el WDT. He leído en algún sitio que el Proteus desactiva de oficio el Watchdog. ¿Es eso cierto? ¿Nadie ha tenido problemas con el Watchdog y el Proteus?
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: ppyote en 11 de Abril de 2014, 09:01:17
Yo he tenido algún problema con algún micro, pero aún he tenido más, por culpa del compilador. En mi caso el ccs...
Sí también utilizas el ccs, prueba a cambiar de versión a ver que tal va
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PalitroqueZ en 12 de Abril de 2014, 21:31:43
¿Nadie ha tenido problemas con el Watchdog y el Proteus?

yo no
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PicMinor en 30 de Abril de 2014, 08:09:30
¡ Saludos al foro !

Al parecer nadie ha tenido problemas así que voy a poner el código para que lo comprobéis. Si lo cargamos en el MPLAB (PIC10F200, lenguaje ensamblador, 4 MHz) y lo simulamos con el propio simulador del MPLAB funciona correctamente, es decir llega al bucle Salida_On al cabo de 1 segundo.

Si utilizamos el Proteus VSM no funciona, se queda en la instrucción goto Bajo_Consumo y NUNCA salta el Watchdog.

Código: [Seleccionar]
;==================================================================================================
; Test del Watchdog
;==================================================================================================
    LIST        P = 10F200, F = INHX8M
    INCLUDE     "P10F200.INC"

;==================================================================================================
; OPCIONES DE CONFIGURACION
;==================================================================================================
    __CONFIG    ( _MCLRE_OFF & _CP_OFF & _WDT_ON & _IntRC_OSC )
    ERRORLEVEL  0,-205

;==================================================================================================
; Pines Asignados
;==================================================================================================
#define     SALIDA      GPIO,0                                      ; Pin de Salida

;==================================================================================================
; Posiciones de memoria
;==================================================================================================
CBLOCK      0x10                                                    ; Memoria de Usuario
    Num_WDTs                                                        ; Número de WDT's transcurridos
ENDC                                                                

;==================================================================================================
;       PROGRAMA PRINCIPAL      
;==================================================================================================
    ORG     0x000                                                   ; Origen de la memoria
    MOVWF   OSCCAL                                                  ; Guarda el valor de OSCCAL de la factoria (modelos OTPs)

;--------------------------------------------------------------------------------------------------
; Comprueba el Tipo de Reset. Si es el WDT bifurca
;--------------------------------------------------------------------------------------------------
Comprueba_WU
    BTFSS   STATUS,NOT_TO                                           ; Comprueba el Flag del WDT
    GOTO    Es_Por_WDT                                              ; Se ha reseteado por WDT  

;==================================================================================================
; Arranque por el Reset POR (Power On Reset)
;==================================================================================================
Power_On_Reset
    CLRF    GPIO                                                    ; Borra el puerto
    MOVLW   B'00001000'                                             ; GP3 entrada, el resto salidas
    TRIS    GPIO                                                    ; Configura los pines
    BCF     SALIDA                                                  ; Salida a cero
    CLRF    Num_WDTs                                                ; No tenemos ningún WDT

;--------------------------------------------------------------------------------------------------
; Entramos al estado de Bajo Consumo.
; Salimos por WDT (Si funciona)
;--------------------------------------------------------------------------------------------------
A_Dormir
    CLRF    GPIO                                                    ; Borra el puerto
    MOVLW   B'00001000'                                             ; GP3 entrada, el resto salidas
    TRIS    GPIO                                                    ; Configura los pines
    MOVLW   B'10001000'                                             ; Preescaler 1:1
    OPTION                                                          ; Asigna el Option
    CLRWDT                                                          ; Inicializamos el WDT

Bajo_Consumo                                                        
    SLEEP                                                           ; Pone el micro en bajo consumo
    GOTO    Bajo_Consumo                                            ; Bucle de Bajo Consumo

;==================================================================================================
; Tratamiento de los Resets por WDT
;==================================================================================================
Es_Por_WDT
    INCF    Num_WDTs,F                                              ; Ha transcurrido un WDT
                                                                    
    MOVLW   D'56'                                                   ; Retardo
    SUBWF   Num_WDTs,W                                              ; Comprueba si es mayor
    BTFSS   STATUS,C                                                ; Comprueba si lo es
    GOTO    A_Dormir                                                ; Volvemos al Bucle

Salida_On
    CLRWDT                                                          ; Resetamos el WDT
    BSF     SALIDA                                                  ; Salida a Uno
    GOTO    Salida_On                                               ; Bucle Infinito                    

    END
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PicMinor en 20 de Mayo de 2014, 04:10:33
Para PalitroqueZ:

Comentas que tú no has tenido problemas con la simulación del WDT en el proteus. ¿Podrías indicarme cómo lo has hecho?
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PalitroqueZ en 21 de Mayo de 2014, 20:41:24
he aquí un ejemplo escrito en C

Código: [Seleccionar]
#include <16f877A.h>
#fuses XT,WDT,BROWNOUT
#fuses PUT,NOWRT,NOLVP,NODEBUG,NOPROTECT
#use delay (clock=4M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#zero_ram
void main(void){
   output_a(0);
   output_b(0);
   set_tris_a(0);
   set_tris_b(0b1);

   disable_interrupts(global);
   disable_interrupts(int_timer1);
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);

   setup_wdt(WDT_2304MS);

   while(1){
         printf("probando\r\n");
   }
}



y lo que muestra el proteus (cuando no se reinicia el perro antes del desborde)

(http://www.todopic.com.ar/foros/imgtiny/2vtusg8.jpg)
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PicMinor en 10 de Junio de 2014, 07:17:56
¡¡ Por fin encontré dónde estaba el problema !!

Lo comento por si le ocurre a alguien más. El problema era que en los parámetros del micro cargaba el programa pero NO HABIA PUESTO EL VALOR DE PROGRAM CONFIGURATION WORD. Así que la simulación fallaba. En el momento en que puse el valor correcto funcionó sin problemas.

¡ Saludos al foro !
Título: Re: Proteus y el Watchdog. ¿Enemigos?
Publicado por: PalitroqueZ en 10 de Junio de 2014, 18:26:27
 :-)