Autor Tema: Incoherencias en Proteus con el siguiente programa (PIC16F84A)  (Leído 4925 veces)

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

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« en: 07 de Junio de 2015, 14:04:42 »
Hola a todos

He hecho un pograma el cual va de la siguiente manera. Se trata de un tanque de agua que contiene tres sensores LLENANDOSE, LLENO, REBALSANDO y tres electrovalvulas, dos que se encargan de llenar el tanque, y una que se encarga de vaciarlo.

  • Cuando ningún sensor esta activo ninguna electrovalvula esta activo. El display muestra un mensaje de EMPTY
  • Cuando LLENANDOSE esta activo, se activan las dos electrovalvulas de llenado, y la electrovalvula de vaciado esta desactivado. El display muestra un mensaje de LOAD.
  • Cuando LLENANDOSE y LLENO están activos, se queda activado una electrovalvula de llenado, y la otra se desactiva, mientras la electrovalvula de vaciado se activa. El display muestra un mensaje de FULL.
  • Cuando LLENANDOSE, LLENO, y REBALSANDO están activos, se desactivan las dos electrovalvulas de llenado, y solo la electrovalvula de vaciado queda activo. El display muestra un mensaje de OVERLOAD.
  • Cuando hay una incoherencia en los sensores TODAS las electrovalvulas se desactivan. El display muestra un mensaje de ALARMA.

Ahora el problema viene de esta manera. En el MPLAB X simula correctamente de principio a fin sin ningún error. El armado en protoboard funciona también perfectamente. El problema es  en PROTEUS. que pasa? lo que pasa es que los estados ALTOS (los 1 lógicos) muestran en color gris, es decir los muestra como si fuera alta impedancia. El segundo problema es que el display y los leds que simulan las electrovalvulas parpadean. He intentado poner 1MHz como 4MHz en el microcontrolador y sigue en lo mismo.

Un dato curioso que me di cuenta, es que utilizando el archivo .cof que genera el MPLAB X y viendo dicho código en PROTEUS, las instrucciones bfs y bfc en vez de poner en 1 o 0 un solo bit de un registro, lo que hacen es poner en 1 o 0 ese bit del registro y ademas pone en cero el resto de los bits... como se puede corregir esto?

Alguien me puede ayudar a corregir estos problemas por favor? les adjunto los archivos. Gracias de antemano

Saludos
« Última modificación: 07 de Junio de 2015, 14:25:11 por Gusfavio »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #1 en: 07 de Junio de 2015, 15:17:45 »
Nunca habia leido que fallara asi el Proteus, pero todo puede ser.

Si decis que en el MPLAB X funciona correctamente la logica entonces no se por que necesitas probarlo en otro simulador externo al fabricante de los micros.
Tambien que si funciona correctamente en fisico aun mejor.

Personalmente nunca me fui de fiarme del Proteus, me parece hasta malo que no tenga en cuenta los fuses. Como se puede corregir los problemas del Proteus? Buscar otra version, o pedir ayuda al soporte oficial ( suponiendo que tenemos la version paga como todo el mundo debe tener -guiño guiño- ), Puede que esa version tenga un error en el simulado del PIC16F84A, lo raro que ese set de inrtucciones vale para todos los PIC10/12/16

PD: No entiendo tu logica de por que cuando esta lleno no para las electrovalvulas de llenado... pero bueno es tu programa y vos sabes mejor que hacer o que debe hacer.


Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #2 en: 10 de Junio de 2015, 19:58:32 »
bueno la logica esta ya definida en un practico de la universidad, solo quería saber por que el problema del proteus, ya que suponía que tal vez me traiga algunos problemas en futuros proyectos, gracias por la respuesta, entonces es solo problema que no se puede solucionar, a menos que los mismos desarrolladores lo solucionen

saludos

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #3 en: 12 de Junio de 2015, 13:34:40 »
Citar
Un dato curioso que me di cuenta, es que utilizando el archivo .cof que genera el MPLAB X y viendo dicho código en PROTEUS, las instrucciones bfs y bfc en vez de poner en 1 o 0 un solo bit de un registro, lo que hacen es poner en 1 o 0 ese bit del registro y ademas pone en cero el resto de los bits... como se puede corregir esto?

Es que bfs y bfc estan mal ¿No? seran bsf y bcf

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #4 en: 12 de Junio de 2015, 15:48:19 »
Es que bfs y bfc estan mal ¿No? seran bsf y bcf

Si los hubiera escrito mal en el MPLAB X no compilaria, con lo cual no podria probarlo en el proteus, y menos poder cargarlo en el PIC y que funcione correctamente.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #5 en: 12 de Junio de 2015, 19:26:39 »
Falta que adjuntes también el archivo Tanque.asm si querés que podamos revisar el fallo del Proteus.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #6 en: 12 de Junio de 2015, 21:03:24 »
Hola a todos

Gracias por sus respuestas, en cuanto a la instrucción bsf y bcf, si, asi se escriben, me equivoque al escribirlos aquí en el post, pero en el programa están bien escritos, en cuanto al archivo .asm no lo veo necesario subir, ya que les subí el archivo .cof y en ese mismo viene el código completo el cual lo pueden ver por medio de PROTEUS, ahora si quieren encontrar errores en el codigo, no se molesten, funciona correctamente, funciona tanto en MPLAB X como en el protoboard, solo no funciona en PROTEUS. Si simulas el PROTEUS con breakpoints, o sino paso a paso, se van a dar cuenta que las instrucciones bsf y bcf actúan de manera incorrecta en el simulador PROTEUS. En cuando al error de los estados de alta impedancia no tengo idea de por que sucedan y es eso mismo lo que queria ver si alguien mas sabia junto con las instrucciones que actúan de manera incorrecta.

saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #7 en: 12 de Junio de 2015, 21:16:32 »
El cof en proteus me pidió el asm. No vi mucho el cof por dentro pero no creo haber visto el código asembler.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #8 en: 12 de Junio de 2015, 21:44:56 »
El cof en proteus me pidió el asm. No vi mucho el cof por dentro pero no creo haber visto el código asembler.

Yo lo abri al cof y no tiene ningun codigo ASM, es mas no hay codigo ASM en ningun lado. ni siquiera el otro archivo que se puede abrir con el WinRAR.

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #9 en: 12 de Junio de 2015, 21:48:41 »
Que? O.o en serio? pero el proteus nunca pide el .asm solo necesita el .hex o sino el .cof , nuuunca el .asm ya que eso no puede leerlo O.o a ver si entendí bien, se puede simular? bueno tenes que hacer click en Debug y luego en "PIC CPU source code", y ahí te sale todo el código fuente que esta escrito en assembler.

Pero aquí esta el programa, lo subo para que lo veas, aunque no se que tenga que ver con PROTEUS O.o


NOTA: por cierto el proteus es la version 8, si lo tienen lo pueden abrir tranquilamente, y el asm es MPLAB X
« Última modificación: 12 de Junio de 2015, 21:53:26 por Gusfavio »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #10 en: 12 de Junio de 2015, 22:16:50 »
Ahora que veo el codigo..

Pregunta... que carga estas intentando encender? usas una resistencia o tiene una capacidad/inductacncia?

Intenta cambiar los BSF y BCF por algo que cambie el puerto de un sola instruccion y no en 2 partes como es tu caso.

Ejemplo para BSF PORTB,4 y BCF PORTB,3

MOVLW 0x10        ; los demas bits no me interesan por que o son entradas o no estan implementados.
MOVWF PORTA

Proba eso por si es que tenes ese problema, si es ese explico el por que... acordate que RA4 es open colector y necesitaria de una resistencia de pull-up (por las dudas lo nombro)

Y PD: Podrias haber usado la tabla misma para los goto sin necesidad de luego comprarlos de vuelta, pero eso no tiene nada que ver con el problema.

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #11 en: 12 de Junio de 2015, 22:53:24 »
Bueno en teoria se supone que tiene que accionar electrovalvulas, pero yo solo los represento con tres leds, eso no tiene mucha importancia

Si, tu solucion en cuanto al puerto A funcionaria, pero no en el puerto B ya que ahí estoy utilizando 7 bits para el display de 7 segmentos, y el ultimo bit lo utilizo para la electrovalvula de salida. Aun asi no veo por que cambiar los bsf y los bcf si funcionan correctamente, solo el proteus no los reconoce como tal, pense por un momento que quisas sea alguna configuracion interna del proteus que se podia cambiar o algo asi, pero veo que es mas por error del proteus, es un error gravisimo que deberian arreglar los de esa compañia

Gracias por la aclaracion pero siii sabia que ese pin es de colector abierto hehe.

Si tenes razón en cuanto a lo de la tabla, pero eso ya es mas cuestión de ir por un camino o por otro dependiendo del programador (persona) ya que hay distintas formas de solucionar un problema, pero gracias por la sugerencia  :)

Bueno dicho todo lo anterior, creo que no me he llegado a hacer entender muy bien. mmmmm en si, en el código no hay ningún error, sino en el simulador proteus que era lo que trataba de ver como solucionar, es decir, si es que existiera alguna opción extra en alguna parte del programa, o si alguna configuración estaba mal. Ahora tengo una duda mas, a alguien mas le pasa lo mismo que a mi? es decir que proteus no ejecute correctamente la instrucción bsf y bcf, y que en este ejemplo que les mande también les muestre  algunas salidas como alta impedancia en vez de NIVEL ALTO? y que aparte el display y los leds parpadeen? cosa que no debería suceder.

gracias a todos por dar su tiempo para responder mis dudas

saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #12 en: 13 de Junio de 2015, 04:04:17 »
Yo te preguntaba por el tema si existia una capacidad ya que el PIC cuando ejecuta una instruccion por ejemplo BSF PORTA, leer el puerto cambia el bit y luego lo escribe.
Si tenias una capacidad grande, y tenes 2 instrucciones seguidas, puede que al leer el puerto de la segunda instruccion el pin todavia no hubiera cambiado de valor y por eso quedaba con el valor antiguo.
Pero si decis que lo simulaste con leds entonces no deberia haber problema.

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 209
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #13 en: 13 de Junio de 2015, 11:44:55 »
je je je.. todo esto sucede porque el Proteus se niega a trabajar con un micro tan viejo, que ya no se fabrica, que son más caros, e inconseguibles, (tambien mi gato lo sabe).

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Incoherencias en Proteus con el siguiente programa (PIC16F84A)
« Respuesta #14 en: 13 de Junio de 2015, 18:17:31 »
Que? O.o en serio? pero el proteus nunca pide el .asm solo necesita el .hex o sino el .cof , nuuunca el .asm ya que eso no puede leerlo O.o a ver si entendí bien, se puede simular? bueno tenes que hacer click en Debug y luego en "PIC CPU source code", y ahí te sale todo el código fuente que esta escrito en assembler.

Pero aquí esta el programa, lo subo para que lo veas, aunque no se que tenga que ver con PROTEUS O.o


NOTA: por cierto el proteus es la version 8, si lo tienen lo pueden abrir tranquilamente, y el asm es MPLAB X

el .cof pide el archivo C:\AssemblerEmi\Laboratorio8\Tanque de agua.X\Tanque.asm

No me suena a que haya podido inventar esa ruta. En tu PC crees que funciona sólo porque dicho archivo existe en esa ruta debido a que es la PC donde has desarrollado el proyecto.

Por otro lado, algunos pines parpadean porque efectivamente tu código los hace parpadear. En el circuito real no lo verás porque lo hacen a una frecuencia tal vez lo suficientemente elevada como para poder apreciarla o llegar a notarlo en las electroválvulas. La única salida que veo en gris en ISIS es el pin RA4, y en cuanto le puse una pullup externa (necesaria debido a ser de tipo open drain como ya te ha mencionado otro forero) logra los dos estados digitales sin problemas .
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.