Control sustituto para lavadora automatica.

Eso lo había entendido, creo yo, pero resulta que el compilador que tengo yo, no me marca ningún error y compila bien y al probarlo en proteus va todo correcto.
Te recomiendo que si puedes, actualices tu compilador. (Que no te indique esos errores está muy mal)

Nota bien los mensajes que da ISIS durante la simulación pues existen contenciones lógicas.
Esto es debido a la librería que estás usando para la pantalla.
Utiliza esta que no tiene problemas y está modificada para trabajar por el puerto D. LCD420

También te recomiendo que coloques resistencias pull-up/pull-down en los pines de entrada.
Puedes utilizar las resistencias pull-up internas del puerto B si lo deseas.
Adjunto el archivo de como está ahora que creo entender es lo que me explicaste.
Vuelvo a repetir que los tiempos que pongo son a modo de ejemplo.
Pues va algo mejor, pero no como tiene que ser.

Tienes que realizar una rutina previa de funciones.
Es decir...
* Verificar tipo de programa seleccionado por el usuario. (Establecer programa por defecto.)
* Verificar puerta cerrada, esperar orden de inicio. (Avisar si la puerta está abierta)
* Iniciar programa.
* Resto de comprobaciones durante programa.
* Final del programa.

Si quieres hacer un programa sencillo puedes hacer una rutina básica, pero siempre con comprobaciones.
Una cosa que se me olvida; ¿cómo haces para poner, cuando quieres referirte a una parte del texto de otro miembro del foro, eso que sale con los símbolos el nombre al que te refieres y luego "dijo:->"?
En la parte de abajo a la derecha del mensaje se encuentra una etiqueta que dice "Citar"
Si haces click sobre ella, aparece la ventana de edición con el mensaje envuelto y con su referencia.
Puedes copiar la referencia, separar los bloques del texto e irla añadiendo al principio de cada mensaje a citar y con su respectivo "[/quote]" al final para cerrar la cita. (Sin comillas)

Saludos.
 

Adjuntos

  • Logic Contentions.jpg
    Logic Contentions.jpg
    93.2 KB · Visitas: 35
  • DSC00084.JPG
    DSC00084.JPG
    55.6 KB · Visitas: 44
  • DSC00085.JPG
    DSC00085.JPG
    144.8 KB · Visitas: 32
Tienes que realizar una rutina previa de funciones.
Es decir...
* Verificar tipo de programa seleccionado por el usuario. (Establecer programa por defecto.)
* Verificar puerta cerrada, esperar orden de inicio. (Avisar si la puerta está abierta)
* Iniciar programa.
* Resto de comprobaciones durante programa.
* Final del programa.
Saludos.

Lo de establecer "programa por defecto" ya habia pensado en ello, estoy en ello, pero poco a poco que yo termino de llegar a este mundo, otra cosa es que lo haga bien.

En lo de la puerta no se si lo he hecho bien pero mi idea tal y como lo he puesto es que cuando activas la primera tecla automaticamente se activa el seguro y ya no se puede abrir la puerta por mas que quieras salvo que se corte la corriente.

En lo de resto de comprobaciones pues esoo, mas de lo mismo voy poco a poco.



Puedes copiar la referencia, separar los bloques del texto e irla añadiendo al principio de cada mensaje a citar y con su respectivo "
"

Ya me voy defendiendo un poco con esto, jejeje. Gracias



Te recomiendo que si puedes, actualices tu compilador. (Que no te indique esos errores está muy mal)

Nota bien los mensajes que da ISIS durante la simulación pues existen contenciones lógicas.
Esto es debido a la librería que estás usando para la pantalla.
Utiliza esta que no tiene problemas y está modificada para trabajar por el puerto D. LCD420"
"

Ya la he puesto, es mas, la he guardado y asi la tengo para el puerto D, por que tengo la misma pero es para el puerto B y encima me ocupa menos memoria, que todo cuenta.
Me volvi un poco mico por que no me di cuenta de cambiar las salidas en proteus y no me iba, jeje. Gracias
 
Última edición:
Bueno pues despues de un tiempo con mi programa para mi lavadora creo que avanzado algo pero en estos momentos estoy atascado con lo siguiente que no se como resolver, por eso espero ver si me echais un cable, me explico:
Donde estoy atascado es que cuando cierro la puerta y pulso uno de los dos programas, en este caso centrifugar o lavar, asta que no lo resuelva no puedo añadir mas, pues si por lo que sea se da el caso de que lo que pulsado me equibocado y quiero cambiar de programa se me queda bloqueado y no puedo cambiar salvo que en proteus le de al reset, cosa por cierto que tambien tengo como problema por que el mando de programas de mi lavadora es manual y si por lo que sea una vez puesto un programa quiero parar la lavadora, poniendo el mando en paro, el microcontrolador no me responde y sigue haciendo el programa y aqui es donde estoy, tambien, atorado y no se como hacerlo.

como no me aclaro para camiar el archivo rar pues lo hago de esta manera
 

Adjuntos

  • Lavadora.rar
    24.9 KB · Visitas: 49
  • Lavadora.rar
    25 KB · Visitas: 35
Última edición:
Donde estoy atascado es que cuando cierro la puerta y pulso uno de los dos programas, en este caso centrifugar o lavar, hasta que no lo resuelva no puedo añadir mas, pues si por lo que sea se da el caso de que lo que he pulsado me he equivocado y quiero cambiar de programa, se me queda bloqueado y no puedo cambiar, salvo que en proteus le de al reset, cosa por cierto que también tengo como problema porque el mando de programas de mi lavadora es manual y si por lo que sea una vez puesto un programa quiero parar la lavadora, poniendo el mando en paro, el microcontrolador no me responde y sigue haciendo el programa y aquí es donde estoy también atorado y no se cómo hacerlo.
Es que deberías usar más interrupciones para realizar comprobaciones, por ejemplo, las del puerto B (RB4<>RB7)
También será necesario que sustituyas los delay_ms(); por una rutina de bucle para que el uC no se trabe.
Algo así:
Código:
void retardo (int16 milisegundos)
{
int16 x;
   for (x=1;x<=milisegundos;++x)
   {
      delay_ms(1);
   }
}
Y lo llamas de esta forma, por ejemplo: retardo(1000); // 1 segundo de retardo.

Recuerda que el programa es secuencial y que no se puede salir hasta que se llegue al final de la rutina.
Y si utilizas retardos largos con delay_ms(); no se atenderán las interrupciones hasta que termine el periodo. (No ocurre ésto si lo haces con el bucle mencionado.)

Nota:
Yo sigo viendo una mala estructura del programa y realizar un programa de este tipo debe llevar una estructura y un control más estrictos.
Tal vez por ahora estés realizando una simulación, pero hacen falta resistencias pull-down en algunas entradas.
 
deberías usar más interrupciones para realizar comprobaciones, por ejemplo, las del puerto B (RB4<>RB7)

Eso ya lo he pensado pero en tanto en cuanto no resuelva otros temas eso lo dejo para mas tarde



será necesario que sustituyas los delay_ms(); por una rutina de bucle para que el uC no se trabe.
Algo así:
Código:
void retardo (int16 milisegundos)
{
int16 x;
   for (x=1;x<=milisegundos;++x)
   {
      delay_ms(1);
   }
}
Y lo llamas de esta forma, por ejemplo: retardo(1000); // 1 segundo de retardo.

Recuerda que el programa es secuencial y que no se puede salir hasta que se llegue al final de la rutina.
Y si utilizas retardos largos con delay_ms(); no se atenderán las interrupciones hasta que termine el periodo. (No ocurre ésto si lo haces con el bucle mencionado.)
Esto no lo sabia que se puede trabar el programa, si por ejemplo yo pongo un retardo de 4 segundos no viene a ser, mas o menos, lo mismo que como tu lo pones en tu ejemplo?.



Nota:
Yo sigo viendo una mala estructura del programa y realizar un programa de este tipo debe llevar una estructura y un control más estrictos.
Yaaa, pero intento, en la medida de lo posible, hacerlo lo mas correcto partiendo de que no soy ningun programador y que voy aprediendo a pasos agigantados con lo que leo y lo que me enseñais personas como tu, gracias a todo eso me voy fijando en los procesos de la lavadora que tengo en casa y con todo un poco pues intento hacerlo, de hay que cuando en el proceso hago, a mi manera, una funcion y luego quiero cambiar a otra, ya sea por que me equibocado al querer realizar un proceso o bien por cualquier circustancia inesperada pues me quedo, como indicaba en el post anterior, atascado y no se como solucionar o mejor dicho que sentencias o funciones poner para salir del atasco.
Gracias por la informacion que me has aportado esta vez,voy haber si soy capaz de mejorar la cosa.
Postdata: en lo de mala estructura del programa ¿cuales son los pasos que, segun tu, ves que hago incorrectos?.
 
Última edición:
Eso ya lo he pensado pero en tanto en cuanto no resuelva otros temas eso lo dejo para mas tarde
OK. Porque si sería muy conveniente.
Esto no lo sabia que se puede trabar el programa, si por ejemplo yo pongo un retardo de 4 segundos no viene a ser, mas o menos, lo mismo que como tu lo pones en tu ejemplo?.
Si creas un bucle con retardos de 1ms. Será más fácil que se pueda romper si ocurre una interrupción, pues es un periodo relativamente corto.
Los retardos afectan más que nada a atender otros puertos, no tanto sobre las interrupciones.
Y ésto en el caso de PIC C Compiler, en otros lenguajes de alto nivel cómo PIC Basic, si se congela el microcontrolador ante interrupciones.
Yaaa, pero intento, en la medida de lo posible, hacerlo lo mas correcto partiendo de que no soy ningún programador y que voy aprendiendo a pasos agigantados con lo que leo y lo que me enseñáis personas como tú.
Gracias a todo eso me voy fijando en los procesos de la lavadora que tengo en casa y con todo un poco pues intento hacerlo, de ahí que cuando en el proceso hago a mi manera una función y luego quiero cambiar a otra, ya sea por que me he equivocado al querer realizar un proceso o bien por cualquier circunstancia inesperada, pues me quedo, como indicaba en el post anterior, atascado y no sé cómo solucionar o mejor dicho que sentencias o funciones poner para salir del atasco.
Pues sí, lo que pasa es que estás realizando un programa algo complicado para un novato.
Sin embargo has ido aprendiendo, dentro de poco podrás terminar el programa y con el tiempo podrás mejorarlo.
Gracias por la información que me has aportado esta vez.
Voy a ver si soy capaz de mejorar la cosa.
Postdata: En lo de mala estructura del programa, ¿cuales son los pasos que, según tú, ves que hago incorrectos?
De nada.
Lo que tienes que hacer, es crear rutinas independientes para que no se realice un solo proceso en un único bucle.
De esta forma ordenas el programa, lo haces más comprensible para ti mismo, consigues una mejor depuración y tienes la posibilidad de hacer ciclos no redundantes y con más comprobaciones.

Suerte.
 
Estoy en ello sin parar, lo que pasa es que no resuelvo un problema que me ha surgido con la dichosa LCD 4x20 y asta no resolverlo no puedo seguir, por cierto y aprobecho para preguntar, por que creo que tiene que ser algo que se me escapa en la lcd 4x20, me explico, al encender, la tarjeta que tengo con los leds indicadores de las funciones se posiciona bien, osea se enciende el led rojo que me dice que el programa esta parado esperando las ordenes pertinentes, como no soy capaz de hacer que se encienda bien la LCD pues no puedo seguir y me temo que igual es alguna configuracion ya que este LCD lo compre en ebay y creo que pone algo de para arduino, no recuerdo muy bien, y esa es mi pregunta para si alguien sabe el por que de que se ilumine tan raramente y me explico, cada vez que enciendo se ilumina como con poca luz y solo se iluminan 2 filas intercaladas y no sale texto ni dato alguno, alguien puede tener idea de que puedo estar haciendo mal?



Te comento, un pequeño problema lo he resuelto, es el de la iluminacion, "a medias", te explico, resulta que este disply lleva retroiluminacion y no me di cuenta, una vez hecho se ilumina con fuerza pero sigo teniendo el mismo problema, solo se iluminan dos linias y no consigo que salga informacion por las linias por lo tanto si alguien de indica el por que pues estare agradecido ya que de lo contrario estoy atascado.
Un saludo





Bufffffff, por si faltaba poco termino de descubrir que la tarjeta de los pulsadores me equibocado en casi todo, un desastre por mi parte, jeje, no si ya se dice que por la noche todos los gatos son pardos, o lo que por la noche se hace por la mañana se ve jejeje, nada a volver hacer la tarjeta de los pulsadores y a prestar mas atencion,"una pequeña cagada por mi parte", cuando lo corriga vere si entonces funciona bien la lcd, ya contare el resultado.


[Edita tus comentarios en lugar de crear nuevos]
 
Última edición por un moderador:
Hola:

No pasa nada, es normal, ya que el equivocarse y los errores forman parte del aprendizaje.

Hace tiempo dejé la versión del PIC16F886/887 en ensamblador o asm y me metí en Arduino porque acabas muchísimo antes, encuentras errores de programación mucho antes. Cuando acabe que me queda mucho y llevo desde el 2012 analizando mi lavadora para imitarlo, lo presentaré con todo su explendor.

Ánimos y adelante.
 
Gracias fogonazo por editarlo, se me olvido.
Meta te comento una cosa por si te sirve de ayuda que es como lo are yo cuando lo tenga hecho, espero que si, en la lavadora que tengo, y a la que que quiero hacer el control, no utiliza reles, la tension tanto de las electrovalvulas como de la bomba de desagüe se activa a traves de triacs directamente y estos a su vez a traves de transitores que reciben los pulsos del micro, cosa que no me esperaba ya que yo hubiese usado optoacopladores, de hcho asi lo are, mas que nada por separar la tension de 230 del resto del circuito , para lo que es el motor si utiliza reles.
Por cierto es una bosch
 
Holas:

He sacado algunos vídeos de mi lavadora para tomar nota en cada programación. En mi lavadora solo usan 4 relés. Dos para el motor. Uno para la seguridad del motor por si se recalienta, es decir, si detecta mucha temperatura o en la resistencia para calentar el agua o otra cosa, simplemente se activa, el último es del propio calentador.

Las dos electroválvulas, el cierre de la puerta, el arranque del motor funcionan con triac. Aunque mi idea es hacerlo con un módulo de 8 relés, pero me lo estoy pensando mejor. Al final compraré el otro módulo de 4 relés y los demás a triac como debe ser.

Le puse Led directo a 220 VAC en paralelo a las electroválvulas y otra en el motor de salidad de agua de color naranja. Los rojos son de 24 VDC directo de los 4 relés, 2 cambio giro motor, seguridad de motor, y el calentador o resistencia. Los Led verdes son de fábrica.

P1270526.png

Leds colocalo en la lavadora.
P1270525.jpg

He seguido los pasos en un cuaderno cuando se encienden y apaga cada Led, en el cual seguiré revisando por si me escapa algo. Quiero hacerlo lo más parecido posible. Los 8 relés es para empezar rápido, si veo que funciona, haré ya la palca casera con sus 4 relés y los demás a triac.

Saludos.
 
Haber Meta tranquilizate, por lo que dices es parecida a la mia, la tarjeta de mi lavadora solo usa 3 reles.
Otra cosa! eso de poner led directo a 220Vac ¡¡estas jugando con fuego!!, es mas sencillo cuando se da la orden de activar las electrovalvulas a la misma vez activa el led que indica esa tarea pero no lo pongas a 220Vac que te puedes llevar un susto.
Lo de motor de salida de agua supono que te refieres a la bomba de desagüe ¿no es asi?, pues lo mismo pones como con las electrovalvulas
 
Trankis.
Esos relés los compré así preparado para ello con su porta led, dentro de ella tiene resistencia de 47000 Ohmios y un 1N4007. Va de maravilla y los dos primero sde las electroválvules ya llevan un año de uso.
 
Meta te comento que ya he resuelto el problema del lcd, era otra pequeña macana por mi parte, habia soldado, sin darme cuenta, los pins 14 y 15 entre si y como el 15 le asignado una tarea pues este era el error, una vez reparado ya funciona todo como deve ser.
 
Última edición por un moderador:
Gracias .... estudio ...


Vamos a la inserción LAVADO Como ver de un programa.
No Pude Encontrar un completo programa.
Gracias de Nuevo.
 
Última edición:
Atrás
Arriba