Autor Tema: ¿Posible bug de PIC SIMULATOR IDE?  (Leído 2156 veces)

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

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
¿Posible bug de PIC SIMULATOR IDE?
« en: 31 de Mayo de 2011, 17:56:28 »
Hola a todos:
De nuevo me estoy pegando con este entorno y tengo un problema que no se exactamente si es problema mio (lo mas probable) o es un bug del programa. Explico:
Tengo la version 6.91 perfectamente rregistrada y he realizado un pequeño programa en basic, nada del otro mund, un temporizador que dependiendo de unas entradas cambia los tiempos y un par de salidas. El problema que veo (adjunto una imagen del mismo) es que si bien en el modulo de leds veo que estan activas las entradas RB0, RB1 y RB7, activadas con la opcion "Toogle" de la vista del micro, cosa que aparecen como en ON; sin embargo en la zona de la ventana del WATCH las mismas llamadas como: compresor, presostato y prueba se encuentran a 0. Tambien en la ventana de los registros se ven como que estan a 0, es decir sin marcar en rosita como la salida de RA1 que tngo activada por programa.
Quiero entender que en esta pantalla si la entrada esta a 1 deberian estar marcadas en rosita ¿me equivoco?
Creo los pines los tengo bien configurados como salidas= puerto A y entradas=puerto . Esto se ve en una zona de la imagen.
Adjunto la imagen y el programa.
Me podeis indicar en que me he equivocado?
Código: [Seleccionar]
Define CONF_WORD = 0x2f50
Define CONF_WORD_2 = 0x3fcc
Define CLOCK_FREQUENCY = 4  'Frecuencia del reloj en Mhz
'*************************************************************************************************
'*                                                                                               *
'* NOMBRE PROGRAMA: Temporización de secados                                                     *
'*                                                                                               *
'* AUTOR: Fermín C. Ruiz Martín                                    VERSIÓN: 1.00                 *
'*                                                                                               *
'* MICRO:  16F88                                                   FECHA:  30.06.2011            *
'*                                                                                               *
'* DESCRIPCIÓN: Versión inicial                                                                  *
'*                                                                                               *
'*************************************************************************************************
'Equipo de control de tiempo de actuación de torres de secado. Tiempo de actuación de electro-
'válvula de 1 minuto y tiempo de avería por falta de cambio del estado del presostato asociado a
'los 10 minutos. Con avería se deja la electroválvula desexcitada.

'*************************************************************************************************

'*************************************************************************************************
'--------------------------------  SECCIÓN DE DEFINES  -------------------------------------------
'*************************************************************************************************

Define SIMULATION_WAITMS_VALUE = 1  'Ignora los valores de Waitms. Solo para simulador

'******************************** SECCIÓN DE ETIQUETAS *******************************************

'******************************** SECCIÓN DE VARIABLES********************************************

Dim e_inicial As Bit  'Variable del estado inicial del equipo al arranque
Dim e_presostato As Bit  'variable del estado del presostato.
Dim e_valvula As Bit  'Variable del estado de la electroválvula.
Dim t_averia As Word  'Contador del tiempo para indicar avería.
Dim t_valvula As Word  'Contador del tiempo de actuación de la electroválvula.
Dim t_aver_work As Word  'Variable con valor del contador de avería.
Dim t_valv_work As Word  'Variable con valor del contador de actuación válvula.
Dim prueba_averia As Word  'Variable con tiempo de prueva de avería.
Dim prueba_valvula As Word  'Variable on tiempo de prueba de válvula.
Dim work_averia As Word  'Variable con tiempo de trabajo de avería.
Dim work_valvula As Word  'Variable con tiempo de trabajo válvula.

'---------------------- Asignación de valores a las variables ------------------------------

t_averia = 0  'Se resetea el contador auxiliar de la avería.
t_valvula = 0  'Se resetea el contador auxiliar delcontrol de la válvula.
e_inicial = 1  'Se inicializa el estado después de dar tensión al equipo.
e_valvula = 0  'Se Inicializa el estado de la válvula.
e_presostato = 0  'Se inicializa el estado del presostato.
prueba_averia = 20  'Tiempo de avería en modo trabajo. 20x0,5sg=10sg.
prueba_valvula = 4  'Tiempo actuación válvula en modo trabajo. 4x0,5sg=2sg.
work_averia = 1200  'Tiempo de avería en modo trabajo. 1200x0,5sg=600sg.=10minutos.
work_valvula = 120  'Tiempo actuación válvula en modo trabajo. 1200x0,5sg=600sg.=10minutos.

'------------------ Reasignación de nombres a los pines del micro --------------------------

Symbol averia = RA0  'Salida digital activación de señal de avería.
Symbol valvula = RA1  'Salida digital activación de electroválvula.
Symbol compresor = RB0  'Entrada digital del estado del compresor.
Symbol presostato = RB1  'Entrada digital del estado del presostato.
Symbol prueba = RB7  'Entrada digital para establecer el modo prueba del equipo.

'------------------------------ Definición de puertos -------------------------------------
AllDigital
OSCCON = 0x6e  'Set intrc To 4mhz, se usara reloj interno a 4Mh
TRISA = %00000000  'Puerto A los configurado como salidas digitales.
TRISB = %11111111  'Puerto B configurado como entradas digitales.

'-------------------- Inicializacion de timers e interrupciones ---------------------------

T1CON.TMR1CS = 0  'Bit de seleccion de reloj para el timer1, interno Fosc/4
T1CON.T1CKPS0 = 1  'Bit de seleccion del prescaler para el reloj del timer1.Divisor por 8.
T1CON.T1CKPS1 = 1  'Bit de seleccion del prescaler para el reloj del timer1.Divisor por 8.
TMR1H = 0x0b  'carga el registro del contador para que desborde cada 500mSeg, byte alto
TMR1L = 0xdc  'carga el registro del contador para que desborde cada 5000mSeg, byte bajo

'-------------------------- Inicializacion del modulo A/C ---------------------------------

'Configuración para el conversor A/D. La resolución será de x.5/255=19,53mV por bit si el
'conversor es de 8 bits y de x.5/1024=4,88mV por bit si el conversor es de 10 bits.

'Define ADC_BITS = 8 'Convertidor de 8 bits
'Define ADC_SAMPLEUS = 50  'tiempo de espera entre conversiones del ADC
'Define ADC_CLOCK = 5  '16Tad a 8Mhz = 2uSeg, mínimo permitido por el micro 1.6uSeg, configuracion ADC

'_______________registros afectados por Define ADC_CLOCK y ADCIN________________

'ADCON0 = %01100000  'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.6uSeg), channel RA4
'ADCON1 = %01000000  'voltage reference (AVdd/AVss) y seleccion de escala division clock/2 ADCON1.ADCS2=1
'y justificación a la izquierda.


'*************************************************************************************************
'--------------------------------      PROGRAMA PRINCIPAL    -------------------------------------
'*************************************************************************************************

main:
'establecimiento de las condiciones iniciales.

averia = 0  'Al inicio, se deja la indicación de avería desactivada.
valvula = 0  'Al inicio, se deja la válvula desactivada.
e_inicial = 0  'Al inicio, se resetea el estado inicial.
e_valvula = 0  'Al inicio se resetea el estado de la válvula
e_presostato = 0  'Al inicio, se resetea el estado del presostato.


INTCON.PEIE = 1  'Habilitacion de interrupciones de perifericos
T1CON.TMR1ON = 1  'Desaciva el contador del TMR1
PIE1.TMR1IE = 1  'Activa las interrupciones del timer1
Enable  'INTCON.GIE habilita todas las interrupciones globales

'Comienzo del programa principal
inicio:

If prueba = 1 Then
t_aver_work = prueba_averia  'Tiempo para avería en modo prueba. 20x0,5sg=10sg.
t_valv_work = prueba_valvula  'Tiempo actuación válvula en modo prueba.4x0,5sg=2sg.
Else
t_aver_work = work_averia  'Tiempo avería en modo trabajo. 1200x0,5sg=600sg.=10minutos.
t_valv_work = work_valvula  'Tiempo actuación válvula en modo trabajo.120x0,25sg=60sg.
Endif

While compresor = 0  'Siempre que el compresor esté parado
valvula = 0  'se desactiva la válvula,
e_valvula = valvula  'se guarda su estado,
T1CON.TMR1ON = 0  'paramos el contador del TMR1
Goto inicio  'y seguimos con la secuencia general.
Wend

'-------------------------------------------------------------------------------------------

If e_inicial = 0 Then  'Si es la 1º puesta en marcha del equipo
valvula = 1  'se activa la válvula,
e_valvula = valvula  'se guarda su estado,
e_inicial = 1  'se cambia el estado inicial
e_presostato = presostato  'se guarda el estado del presostato,
T1CON.TMR1ON = 1  'activamos el contador del TMR1
Goto inicio  'y seguimos con la secuencia general.
Endif

'--------------------------------------------------------------------------------------------

If e_valvula = 0 Then  'Si la valvula estaba desactivada, => si compresor=1
valvula = 0  'seguimos con la válvula desactivada o
Else
valvula = 1  'en caso contario la desactivamos.
Endif

'---------------------------------------------------------------------------------------------

If e_presostato = presostato Then  'Si el presostato está como su estado guardado
T1CON.TMR1ON = 1  'activamos contador del TMR1, podría estar en OFF al ser compresor=0
'goto inicio ' y seguimos con la secuencia general.
Else
e_presostato = presostato  'Al haber cambiado el presostato, guardamos su estado,
t_averia = 0  ''reseteamos el contador para la avería,
T1CON.TMR1ON = 1  'activamos contador del TMR1, podría estar en OFF al ser compresor=0
'goto inicio ' y seguimos con la secuencia general.
Endif

'---------------------------------------------------------------------------------------------


Goto inicio
'************************************ FIN DEL PROGRAMA ***************************************

End  'Fin del programa                           


'**********************************************************************************************
'**********************************************************************************************
'**********************************************************************************************

'------------------------------------ INTERRUPCIONES ----------------------------------------

On Interrupt  'Inicio de las interrupciones, desactivamos las interrupciones.
Save System  'Guarda los valores del sistema.

T1CON.TMR1ON = 0  'Se para el contador del TMR1.
t_valvula = t_valvula + 1  'Incrementamos el tiempo de actuación de la válvula.
If compresor = 0 Then  'Si el compresor está parado,
valvula = 0  'se desactiva la válvula.
Else
If t_valvula = t_valv_work Then  'Se compruba si válvula ha completado su ciclo de 1'.
If e_valvula = 1 Then  'si estaba activada
valvula = 0  'la desactivamos y
e_valvula = 0  'guardamos su estado.  En caso contrario
Else
valvula = 1  'Como estada desactivada, la activamos
e_valvula = 1  'y guardamos su estado.
Endif

t_valvula = 0  'Reseteamos el tiempo de la válvula y volvemos a repetir el ciclo.
Else
Goto contador
Endif
contador:
t_averia = t_averia + 1  'incrementamos el contdaor del tiempo de la avería.
If t_averia = t_aver_work Then  'Se compruba si avería ha completado su ciclo de 10'.
bloqueo:
averia = 1  'se da señal de avería
valvula = 0  'se desactiva la válvula
Goto bloqueo  'y permanecemos en este estado hasta quitar alimentación.
Else  'sino hay avería recargamos los contadores
TMR1H = 0x0b  'carga del contador, desborde cada 500mSeg, byte alto.
TMR1L = 0xdc  'carga del contador desborde cada 500mSeg, byte bajo.
T1CON.TMR1ON = 1  'Se activa el contador del TMR1.
Endif
Endif

Resume  'activamos de nuevo las interrupciones y retornamos al programa antes del salto .

'**********************************************************************************************
'************************************* SUBRUTINAS *********************************************
'**********************************************************************************************

Todos los días se aprende algo nuevo.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ¿Posible bug de PIC SIMULATOR IDE?
« Respuesta #1 en: 31 de Mayo de 2011, 20:52:36 »
Si es cierto, lo de los bit que aparecen como variables es nuevo en el simulador, aparecen en la lista de las variables pero no las actualiza.
Hace unas semanas que observe el fallo, pero no he tenido tiempo de comunicarlo. Como usuario registrado puedes enviar el bug de forma
automática, y ya veras como en la nueva versión que saldrá dentro de unas semanas estará solucionado. De todas formas el programa compilado
no se ve afectado, esto quiere decir que solo es un bug a nivel de simulador no del compilador.
Saludos desde Granada, España.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: ¿Posible bug de PIC SIMULATOR IDE?
« Respuesta #2 en: 01 de Junio de 2011, 01:58:48 »
Gracias por la respuesta,
de hecho intenté simularlo on Proteus, como por ejemplo y veia que salvo las correcciones que tengo que realizar el programa funcionaba, incluso de hecho simulando con PSI parece que andaba.

No quise comunicarlo queria estar seguro antes de que al estar empezando no era cosa cosa mia, asi que en breve se lo comunicaré.

F.
Todos los días se aprende algo nuevo.


 

anything