Autor Tema: Programa basico con niple  (Leído 6906 veces)

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

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #15 en: 11 de Enero de 2016, 19:58:34 »
la pata RB0 que pones como entrada para poner las dos salidas RA0 y RA1 a estado bajo no me aparece en el pineado del pic, pero al editarlo si que aparece en la lista, eso no me cuadra.
He estado mirando y por lo que veo son compatibles los dos pics solo que el terminado en A tiene mas flash.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #16 en: 11 de Enero de 2016, 20:35:07 »
En el programa has creado cuatro condiciones que se pueden dar en dos de las entradas una de ellas cuando están las dos entradas a estado bajo las dos salidas están a cero, después cuando una de las entradas esta a estado alto se activa la salida correspondiente el tiempo definido por el temporizador y pasa a estado bajo vuelve leer las condiciones y no se seguro si se volvería activarse, supongo que si, lo mismo pasaría con la otra entrada y salia, y después esta cuando las dos entradas están al valor alto que activa las dos salidas juntas el  tiempo del temporizador.
Lo que no me cuadra es la RB0, es la otra entrada que al estar en estado alto pone las dos salida a cero pero no se porque unes las dos salidas a ella y porque pusiste RB0 que no la veo en el pineado del pic pero si que aparece como te he escrito antes al editarla.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Programa basico con niple
« Respuesta #17 en: 12 de Enero de 2016, 03:06:04 »
Hola, ya veo que has trabajado mas que yo, gracias, lo tengo ya  abierto en Niple por lo que veo estaría listo para copilarlo y ver el funcionamiento, en el pic 16F84A Funcionaria? porque es el que tengo, miraré también si logro simularlo en proteus como practica  y ya te cuento.
Seguramente me surgirán  dudas, tengo también descargado el manual de niple le echaré un buen vistazo porque hay cosas básicas que hay que saber.
Si te tieme que funcionar solamemte. que al abrir el programa en el menu 1º debes selecionar la opcion de "Migrar proyecto" seleccionas el PIC 16F84 y ya puedes trabajar con el.
Buena idea eso de echar un vistazo al manual, aunque un poco antiguo te servira perfectamente.

la pata RB0 que pones como entrada para poner las dos salidas RA0 y RA1 a estado bajo no me aparece en el pineado del pic, pero al editarlo si que aparece en la lista, eso no me cuadra.
He estado mirando y por lo que veo son compatibles los dos pics solo que el terminado en A tiene mas flash.
Que raro te debe de aparecer al no ser que si estas trabajando con la version demo tenga algun defecto.

En el programa has creado cuatro condiciones que se pueden dar en dos de las entradas una de ellas cuando están las dos entradas a estado bajo las dos salidas están a cero, después cuando una de las entradas esta a estado alto se activa la salida correspondiente el tiempo definido por el temporizador y pasa a estado bajo vuelve leer las condiciones y no se seguro si se volvería activarse, supongo que si, lo mismo pasaría con la otra entrada y salia, y después esta cuando las dos entradas están al valor alto que activa las dos salidas juntas el  tiempo del temporizador.
Lo que no me cuadra es la RB0, es la otra entrada que al estar en estado alto pone las dos salida a cero pero no se porque unes las dos salidas a ella y porque pusiste RB0 que no la veo en el pineado del pic pero si que aparece como te he escrito antes al editarla.
Efectivamente he utilizado 4 condiciones de preguntas. Niple en las ultimas versiones tiene la posibilidad de realizar multiples condiciones de preguntas a la vez. Como tienes 2 entradas al final tienes 4 posibles casos.
Si he realizado asi las uniones es por el motivo de que la version demo, creo que solo permite colocar 20 bloques y he intentado minimizarlos al minimo  para que veas el funcionamineto.
Como sabes dede el principio te dije que no es la forma mas efectiva de hacerlo pero si era buena para aprender el funcionamineto.
Pense que te darias cuenta de la pequeña "trampa " que puse para ver si lo detectabas. Se trata de que falta un bloque de temporizacion, justo antes de comprobar el estado de RB0. Si no lo pones tendras las salidas activas 500msg. Se apagaran e inmediatamnete se van a volver a encender debido a que a la velocidad que trabaja el micro en seguida se retorna  ala parte de nueva comprobaciones del estado de las entradas.
El pin RB0 te debe de apareer si o si. Si uni las 2 es porque indicas que al ser 1 esa entrada se apague la salida activa. Porque lo hice asi, ya te digo que para ahorrar bloques si no tuviese esa limitacion lo habria realizado de ptra manera para que lo entendieras. Si cuando está activa alguna la tienes que pagar al poner RB0. ¿que mas te da poner las 2 a la vez? Si una ya lo esta no pasa nada por seguir poniendola a 0.
Te habras fijado que todavia no te he comentado como hacerlo mas efectivo, pues el programa tiene el defecto que siempre te indicado al inicio y prefiero que lo veas tu en el momento de probarlo.
Todos los días se aprende algo nuevo.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #18 en: 12 de Enero de 2016, 11:04:24 »
Hola fer, he estado mirando bien el diagrama y efectivamente le falta como mínimo otra temporización, tienes toda la razón se la añadiré para ver los cambios que aparecen, pero el programa que realizaste una vez que lo migro y "espero hacerlo bien" cuando voi a archivo generar codigo ASM me da un error te envío pantalla de ello.
Por otro lado y aún mas importante es la carta que he visto hoy al entrar en el foro que has dejado, mucha gente te extrañara por aquí y yo el primero porque el poco tiempo  que llevo tratando contigo ya has dejado miga para mi.
Un abrazo.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #19 en: 12 de Enero de 2016, 22:20:09 »
Al final para poder generar el código ASM he tenido que hacer otra traza desde RB0=1 a RA0=0 y así no me ha creado errores pero no entiendo porque tiene que tener dos trazas RB0=1

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Programa basico con niple
« Respuesta #20 en: 12 de Enero de 2016, 22:32:15 »
Por lo que parece es un bloque de decision. es decir tenes una salida de cuando se cumple, y una salida para cuando NO se cumple.

Si vos unicamentes definis 1 sola, el programa no puede adivinar que hacer con la otra salida. Entonces te tira el error.

Al menos eso es lo que entendi con tu imagen, lamentablemente no se puede ver el cuadro donde esta el error (ya que lo tapa el mismo mensaje de error). Y yo no manejo Niple, pero viene por ahi el tema.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Programa basico con niple
« Respuesta #21 en: 13 de Enero de 2016, 02:51:33 »
No se que paso pero te respondi y por lo que se ve el post no está, te adjunte el fichero incluso con el programa migrado al 16F84A.
El problema surgia porque desde la toma de decision de Rb0 falta una union a la primera decision donde pruebas si RB1y RB2 son igual a 0.
Cuando llegue a casa lo vuelvo a adjuntar.
Te debe de funcionar (salvo lo indicado desde el principio) y genrar los ficheros ASM y hex sin probemas.
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Programa basico con niple
« Respuesta #22 en: 13 de Enero de 2016, 16:13:28 »
El fichero corregido
Todos los días se aprende algo nuevo.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #23 en: 13 de Enero de 2016, 18:16:11 »
Gracias Killerjc , justamente andaba por ahí el problema, faltaba otra salida de ese bloque , me lo solucionó Fer en un momento.
He logrado probarlo en proteus y después de un buen rato, porque es la primera vez que trabajaba con ese programa he logrado hacerlo funcionar.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #24 en: 13 de Enero de 2016, 18:27:14 »
Señor Fer_taca. Ese programa lo he simulado en proteus y con el otro temporizador que le has colocado ahora se encienden y apagan las salidas, tomo nota para realizar yo otros ejercicios ya que desde proteus me resulta mas fácil probarlos que en la protoboard.
Me comentabas que existía una forma mas sencilla de realizarlo por medio de tmrs "creo" no seria mucho pedir que me enseñara, y una última cosa ya para no molestarlo mas,¿ si quisiéramos que las entradas RB0,RB1 y RB2 se quedaran en estado alto (internamente  en el pic ) aunque la tensión real en la pata del pic fuera estado bajo ( es decir que la pata la alimentara a estado alto un simple pulsador) se podría hacer de una forma entendible para mi poca experiencia?

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Programa basico con niple
« Respuesta #25 en: 13 de Enero de 2016, 19:46:21 »
Sir,  claro que puedo. De hecho ya te tengo preparada la mejora que te he venido comentando.  Pero voy a prepararte jna explicación para que lo entiendas y veas por que lo realizado hasta tiene ese problema. Es más como puedes simularlo  on Proteus puedes estudiar el comportamiento de forma rapida. Dame jnas horas y te lo pongo todo.
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Programa basico con niple
« Respuesta #26 en: 14 de Enero de 2016, 04:32:12 »
Si ya has visto y probado que el programa piensas que te funciona, voy a intentar explicarte el porque es muy correcto el hacerlo así:

Según está el funcionamiento es secuencial, es decir el micro ejecuta un bloque, cuando termina ese bloque empieza con el segundo, después el tercero y asi sucesivamente.

¿Pero que pasa al llegar a los delays? Exactamente lo mismo, el micro empieza a contar desde 0 hasta los 500msg. Pero esto es lo más importante. Se queda ahí y no hace otra cosa hasta que su cuenta llega al final y esto no es bueno, Te explico, imaginemos un caso real:

Tienes una máquina que hace un determinado proceso (poner en marcha un motr) que cuando recibe un 1 en su entrada y comienza su ciclo de parada, encendiendo y parando un motor. Piensa también que en vez de 500msg. tienes temporizaciones digamos de 1 minuto. Pues el motor se pondría en marcha durante ese minuto se pararía después durante otro minuto y así sucesivamente hasta que la entrada cambiase a nivel bajo.

¿Pero qué sucedería si durante el minuto que está en marcha se produce algún tipo de accidente? ¿Cómo y cuándo se desconectaría el motor? Bien para eso tendríamos la entrada, que en tu programa es RB0 y que podría ser como una parada de emergencia y que cuando se active paré de forma incondicional el motor (más o menos era lo planteado inicialmente en tu programa).

Pues lo que sucedería es que hasta que no trascurriese el 1 minuto de la temporización (tiempo en ON) más el otro tiempo de descanso, no tienes acceso a parar el sistema. Puedes probarlo y veras como es así. Cambia los valores del tiempo en ON a 1 minuto y el tiempo en OFF a 500mg. esto pasa con una de las entradas, pero para la otra pasa lo mismo.

Como se soluciona esto. Fácil, los micros tienen la posibilidad de ejecutar varias cosas a la vez o en 2º plano. Para ello dispone de mecanismos como los “tmr” para realizar temporizaciones; “interrupciones” que son digamos como señales de emergencia que son atendidas de forma prioritaria cuando son llamadas. Por el momento dejemos a un lado los “timers o tmr” y centrémonos en las interrupciones.

Si estas son eventos que son atendidos de forma inmediata ¿no crees que podría ser justo lo que necesitamos para resolver el problema. Bien pues todo micro, dependiendo de su constitución puede tener varias de ellas como: detección de cambio lógico en alguna entrada, fin de la conversión A/D; fin de transmisión o recepción de datos, etc. Eso lo puedes ver en los datasheet del micro que utilices en cada caso.

Como habrás visto en el programa te había asignado a RB0 la acción de resetear las 2 salidas en el momento de detectar si su nivel era un 1. La elección no fue caprichosa, ya que esta entrada tiene la posibilidad de ser configurada para la detección de su cambio de estado en el momento de producirse bien sea por un tránsito de nivel bajo a nivel alto o viceversa.

Bueno pues cambiando un poco el programa podes hacer uso de esta interrupción y tendríamos el caso solucionado de forma que cuando se detecte un paso de nivel bajo a nivel alto, pues la acción a realizar se pase a dejar las salidas a nivel bajo.

Bueno antes de dejarte l programa, te dejo que estudies lo indicado e intentes realizarlo, sino lo consigues me avisas y te adjunto el fichero. 

Luego ya veremos el tema de cambiar los interruptores por pulsadores y el uso de manejo de los timers, pero para eso creo que si la versión demo solo te permite el uso de 20 bloques va a ser difícil el poder realzarlo. Lo estudiaré en todo caso.

Espero que hayas entendido la explicación y si no me indicas lo que no entiendas e intento hacerlo mejor.
Todos los días se aprende algo nuevo.

Desconectado fievel

  • PIC10
  • *
  • Mensajes: 15
Re:Programa basico con niple
« Respuesta #27 en: 14 de Enero de 2016, 10:59:00 »
Hola, me parece muy bien la expliación que me realizas, con todo lo que me indicas haré las modificaciones en el programa sobre los tiempos y veré sobre proteus como funciona, intentaré cambiar la configuración de la entrada RB0 para que realices lo que indicas,"espero ser capaz "y referente al problema del número de bloques limitado que tiene la versión demo no te preocupes que este fin de semana le daré solución para poder trabajar con el programa al 100%.
Un saludo, y buen fin de semana para todos.


 

anything