Autor Tema: Ayuda | Proyecto Final problema con maquina y PIC16F877A  (Leído 16024 veces)

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

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Ayuda | Proyecto Final problema con maquina y PIC16F877A
« en: 20 de Diciembre de 2019, 15:53:48 »
Buenos dias compañeros, llevo algo de tiempo aca en el foro y recurro a ustedes de nuevo a ver si alguien me puede sacar de este bache que tengo con un asunto de mi proyecto final

Bueno procedo a explicar para que estemos en el mismo contexto. Estoy realizando un maquina que dispensa por extrusion y frie dulces (churros, asi se le conoce aca en venezuela  :mrgreen:), bueno la cosa es que el "cerebro" de la maquina es el PIC 16F877A, que debe hacer lo siguiente: encargarse del manejo, velocidad y la posicion de un par de motores de paso por medio de sensores final de carrera, debe realizar una medicion de temperatura por medio de una PT100 para un control on/off, debe mostrar el paso a paso en una pantalla LCD y finalmente sensar unos botones que seran nuestra interfaz de usuario junto con la pantalla.

He realizado la programacion en lenguaje C (la alternativa era assembler  :5] ), tengo dos versiones del codigo, una nueva y una vieja que adjuntare. El proceso en general es el siguiente:
  • Configuracion inicial de PIC
  • Definicion de variables
  • Pantalla de bienvenida e intrucciones
  • Verificar temperatura y encender o apagar resistencia de coccion
  • Configurar e Iniciar interrupciones
  • Mover motores y mecanismos a su posicion inicial
  • Definir modo de trabajo (freido de dulces o drenaje de aceite)

Los problemas que tengo son los siguientes:
  • Hasta el punto 6 de la lista anterior trabaja perfecto, pero apenas se muestra la pantalla de seleccion de modo, suceden algunas de estas cosas: el microcontrolador se reinicia, se activa alguna de las interruciones (que seran por cambios de estado RB 4-7) o se queda congelado mostrando los modos de trabajo disponibles
  • Cuando no se queda congelado inmediatamente se activa el modo drenaje de aceite sin presionar nada
  • Al momento de realizar la medicion de temperatura se muestran nuemeros por debajo de la temperatura "real" y otras veces si se muestra bien

He estado revisando el codigo desde hace unas semanas y creo que he encontrado algunas cosas extrañas que me gustaria si alguien me puede aclarar si en realidad esto puede afectar el funcionamiento o no.

*NOTA IMPORTANTE: el PIC tiene cargado el programa en su version vieja, por razones de tiempo y disponibilidad del quemador solo puedo acceder a el nuevamente en enero  :oops: para cargar la nueva version

 1- Originalmente realize la programacion para utilizar un cristal de 20Mhz pero al no conseguirlo (bendita crisis en este pais) tuve que cambialo por uno de 4Mhz, pero hay un detalle que no me fije en la programacion vieja, es el siguiente: tengo el modo HS con 4Mhz y creo que deberia ser XT para 4Mhz, segun lo indica CCS C compiler (PIC C compiler), ¿esto podria afectar el funcionamiento en algun punto? adjunto codigos:

Viejo:
Código: C
  1. #include <16F877A.h>
  2. #device ADC=10
  3. #fuses HS          //High speed Osc (> 4mhz FOR PCM/PCH) (>10mhz for PCD)
  4. #fuses NOWDT       //No Watch Dog Timer
  5. #fuses NOPUT       //No Power Up Timer
  6. #fuses NOBROWNOUT  //No brownout reset
  7. #fuses NOLVP       //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
  8. #fuses NOCPD       //No EE protection
  9. #fuses NOWRT       //Program memory not write protected
  10. #fuses NODEBUG     //No Debug mode FOR ICD
  11. #fuses NOPROTECT   //Code not protected from reading
  12. #use delay(crystal=4000000)
  13. #include <lcd.c>
  14. #include <math.h>
  15. #use standard_io(A)
  16. #use standard_io(B)
  17. #use standard_io(C)
  18. #use standard_io(D)
  19. #use standard_io(E)

Nuevo:
Código: C
  1. #include <16F877A.h>
  2. #device ADC=10
  3. #fuses XT          //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
  4. #fuses NOWDT       //No Watch Dog Timer
  5. #fuses NOPUT       //No Power Up Timer
  6. #fuses NOBROWNOUT  //No brownout reset
  7. #fuses NOLVP       //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
  8. #fuses NOCPD       //No EE protection
  9. #fuses NOWRT       //Program memory not write protected
  10. #fuses NODEBUG     //No Debug mode FOR ICD
  11. #fuses NOPROTECT   //Code not protected from reading
  12. #use delay(crystal=4000000)
  13. #include <lcd.c>
  14. #include <math.h>
  15. #use standard_io(A)
  16. #use standard_io(B)
  17. #use standard_io(C)
  18. #use standard_io(D)
  19. #use standard_io(E)

2- Una posible fuente de reinicio creo que puede ser la siguiente pero me gustaria orientacion para confirmar la solucion que creo haberle dado

Basicamente se realiza la bienvenida, chequeo de temperatura y posicion inicial de motores y mecanismos, despues de eso se pregunta por el modo de trabajo siempre y cuando no se hayan realizado 5 o mas dispensados o el pin C5 este en bajo, ya que este indica el final de del recorrido de la parte de extrusion (es una especie de seguridad, de no tenerlo se podria causar un daño mecanico a la maquina), entonces si este PIN por alguna razon (ruido o algo asi tiene un alto no se ejecutaria la funcion while que da paso a los modos de trabajo, adjunto codigo viejo y nuevo (posible correccion para orientacion):

Viejo:
Código: C
  1. void main()
  2. {
  3.    output_A(0); //Configuracion de puertos
  4.    input(PIN_A0);
  5.    output_B(0);
  6.    output_C(0);
  7.    output_D(0);
  8.    output_E(0);
  9.    delay_ms(10);
  10.    lcd_init(); //inicializacion de la LCD
  11.    SETUP_ADC(ADC_CLOCK_DIV_32); //configuracion del ADC
  12.    SETUP_ADC_PORTS(AN0);
  13.    SET_ADC_CHANNEL (0);
  14.    delay_us(50);
  15.    lcd_putc("\f   BIENVENIDO   "); //pantallas de bienvenida
  16.    delay_ms(2000);
  17.    lcd_putc("\f   MAQUINA DE   \n    CHURROS     ");
  18.    delay_ms(2000);
  19.    lcd_putc("\fINSTRUCCIONES");
  20.    delay_ms(2000);
  21.    lcd_putc("\fPRESIONE 1 O 2\nPARA SELECCION");
  22.    delay_ms(2000);
  23.    lcd_putc("\f1-INICIAR");
  24.    delay_ms(5);
  25.    while(input(PIN_C3)==0){ //pregunta si se quiere iniciar  
  26.    while(T<200){ //se enciende la resistencia hasta alcanzar los 200°C ******ACA hay una funcion de lectura de pt100 y on/off de rele
  27.    ENABLE_INTERRUPTS (INT_AD); //se habilitan las interrupciones por AD, cambio de estado rb4-rb7
  28.    ENABLE_INTERRUPTS (INT_RB);
  29.    ENABLE_INTERRUPTS (GLOBAL); //se habilitan las interrupciones globales
  30.    X=read_adc();
  31.    lcd_putc("\fPOSICIONANDO\nMECANISMOS");
  32.    posicion();
  33.    lcd_putc("\fLISTO...");
  34.    delay_ms(2000);
  35.    X=read_adc();
  36.    printf(lcd_putc,"\f   TEMPERATURA  \n    T:%3.1lf %cC    ",T,223);
  37.    delay_ms(2000);
  38.    lcd_putc("\f  SELECCION DE  \n      MODO      "); //seleccion del modo de trabajo
  39.    delay_ms(2000);
  40.    
  41.    while((dispensados<5)&&(input(PIN_C5)==0)){ //*********ACA es donde planteo que si hay ruido o algo en el PIN no se ejecutario el while e iria de nuevo a la pantalla bienvenida y configuracion
  42.    lcd_putc("\f1-FREIDO\n2-DRENAJE"); //freido o manual
  43.    delay_ms(10);
  44.    X=read_adc();
  45.    if(input(PIN_C3)==1){ //aca se ejecutara el modo freido
  46.    if(input(PIN_C4)==1){ //aca se ejecutara el modo drenaje
  47.    }
  48. }

Nuevo:
Código: C
  1. void main()
  2. {
  3.    output_A(0); //Configuracion de puertos
  4.    input(PIN_A0);
  5.    output_B(0);
  6.    output_C(0);
  7.    output_D(0);
  8.    output_E(0);
  9.    delay_ms(10);
  10.    lcd_init(); //inicializacion de la LCD
  11.    SETUP_ADC(ADC_CLOCK_DIV_32); //configuracion del ADC
  12.    SETUP_ADC_PORTS(AN0);
  13.    SET_ADC_CHANNEL (0);
  14.    delay_us(50);
  15.    lcd_putc("\f   BIENVENIDO   "); //pantallas de bienvenida
  16.    delay_ms(2000);
  17.    lcd_putc("\f   MAQUINA DE   \n    CHURROS     ");
  18.    delay_ms(2000);
  19.    lcd_putc("\fINSTRUCCIONES");
  20.    delay_ms(2000);
  21.    lcd_putc("\fPRESIONE 1 O 2\nPARA SELECCION");
  22.    delay_ms(2000);
  23.    lcd_putc("\f1-INICIAR");
  24.    delay_ms(5);
  25.    while(input(PIN_C3)==0){ //pregunta si se quiere iniciar  
  26.    while(T<200){ //se enciende la resistencia hasta alcanzar los 200°C ******ACA hay una funcion de lectura de pt100 y on/off de rele
  27.    ENABLE_INTERRUPTS (INT_AD); //se habilitan las interrupciones por AD, cambio de estado rb4-rb7
  28.    ENABLE_INTERRUPTS (INT_RB);
  29.    ENABLE_INTERRUPTS (GLOBAL); //se habilitan las interrupciones globales
  30.    X=read_adc();
  31.    lcd_putc("\fPOSICIONANDO\nMECANISMOS");
  32.    posicion();
  33.    lcd_putc("\fLISTO...");
  34.    delay_ms(2000);
  35.    X=read_adc();
  36.    printf(lcd_putc,"\f   TEMPERATURA  \n    T:%3.1lf %cC    ",T,223);
  37.    delay_ms(2000);
  38.    lcd_putc("\f  SELECCION DE  \n      MODO      "); //seleccion del modo de trabajo
  39.    delay_ms(2000);
  40.   while(TRUE){ //***********************************************************AQUI he puesto un while para crear un bucle donde si por ruido o algo se pone en alto el PIN C5 pues no se ira a la pantalla de bienvenida ni configuraciones
  41.    while((dispensados<5)&&(input(PIN_C5)==0)){ //*********ACA es donde planteo que si hay ruido o algo en el PIN no se ejecutario el while e iria de nuevo a la pantalla bienvenida y configuracion
  42.    lcd_putc("\f1-FREIDO\n2-DRENAJE"); //freido o manual
  43.    delay_ms(10);
  44.    X=read_adc();
  45.    if(input(PIN_C3)==1){ //aca se ejecutara el modo freido
  46.    if(input(PIN_C4)==1){ //aca se ejecutara el modo drenaje
  47.    }
  48.   }
  49. }


3- Los otros problemas creo que podrian ser por ruido o algo por el estilo, lo estoy haciendo en Protoboard (es mas economico y no es requisito hacerlo en placa PCB)

Tengo un montaje viejo y nuevo, ambos realizados en proteus, aqui corre muy bien el programa nuevo y va 10/10 pero en la vida real no he probado porque como comente antes, no tengo acceso al programador por el momento

He realizado el montaje con el programa viejo y el circuito viejo y pasa todo lo que les comente, tambien probe realizando el circuito nuevo pero con el programa viejo y me sigue dando problemas, adjunto fotos de los circuitos en proteus:

Viejo: esto es solo una porcion de todo el circuito



Nuevo: esto es solo una porcion de todo el circuito




He investigado acerca del ruido y trate de implementarlo como esta en el circuito nuevo, pero al tener la programacion vieja no se si sera efectivo, creo que eso es todo, agradezco toda la ayuda posible en cuanto al tema y estare gustoso de proporcionar mas informacion en caso de que alguien la requiera. Adjuntare el codigo viejo y nuevo en forma de archivo .c y el circuito con su respectivo en proteus para que lo puedan visualizar mejor

*PD: He probado colocando capacitores en la zona de la fuente de poder, en VDD y VSS del Pic, tambien quiero que sepan que estoy utilizando drivers Pololu A4988 para los motores, aun no he conectado ni encendido los motores, solo sus drivers, ya que aun estoy estancado esto que les mencione (reinicios, activacion de interrupciones, medicion erronea de temperatura y congelamiento)

Gracias por tomarse el tiempo de leer, y por sus respuestas. Espero tengan un buen dia :lol:

*Pido disculpas si el tema no va en esta seccion y por lo largo del post

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #1 en: 20 de Diciembre de 2019, 17:59:22 »
Te vendría muy bien dibujar varias máquinas de estados para diseñar el funcionamiento.

Tendrás que hacer un sistema multitarea basado en los estados anteriores.

https://es.m.wikipedia.org/wiki/M%C3%A1quina_de_Moore

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #2 en: 20 de Diciembre de 2019, 18:26:17 »
El programa podría tener este aspecto:

Código: C
  1. void setup(void) {
  2.    output_A(0); //Configuracion de puertos
  3.    ...
  4. }
  5.  
  6.  
  7. void lcd_mensajes() {
  8.    lcd_putc("\f   BIENVENIDO   "); //pantallas de bienvenida
  9.    ...
  10. }
  11.  
  12. void main() {
  13.  
  14.    int estado_mecan = 1;
  15.  
  16.    setup();
  17.  
  18.    lcd_mensajes();
  19.  
  20.    // Bucle principal
  21.    while(1) {
  22.  
  23.       // Control de temperatura
  24.       T = sonda_temperatura_read();
  25.       if (T < 200) {
  26.          calefactor_on();
  27.       }
  28.       else {
  29.          calefactor_off();
  30.       }
  31.  
  32.       // Lectura de entradas
  33.       push_button_1 = read_pushbutton(1);
  34.       ...
  35.  
  36.       // Transiciones de la máquina de estados
  37.       if (estado_mecan == 1  && condición1) {
  38.          estado_mecan = 2;
  39.       }
  40.       ...
  41.  
  42.  
  43.       // Escritura de salidas
  44.       if (estado_mecan == 1)   salida1();
  45.       if (estado_mecan == 2)   salida2();
  46.       ...
  47.    }
  48.  
  49. }


Pero lo que de verdad es importante es que tengas claro qué es lo que quieres que haga la máquina en cada momento:
   cuántos estados diferentes hay para la máquina
   cómo se pasa de un estado a otro
   qué hay que hacer en cada estado

Por ejemplo cuando se llegue al final de la extrusión y se pulse el final de carrera. En ese estado (extrusión terminada) ¿Qué hay que hacer? ¿Cuál es el siguiente estado y cómo llegamos a él?

Un saludo.

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #3 en: 20 de Diciembre de 2019, 18:53:55 »
El programa podría tener este aspecto:

Código: C
  1. void setup(void) {
  2.    output_A(0); //Configuracion de puertos
  3.    ...
  4. }
  5.  
  6.  
  7. void lcd_mensajes() {
  8.    lcd_putc("\f   BIENVENIDO   "); //pantallas de bienvenida
  9.    ...
  10. }
  11.  
  12. void main() {
  13.  
  14.    int estado_mecan = 1;
  15.  
  16.    setup();
  17.  
  18.    lcd_mensajes();
  19.  
  20.    // Bucle principal
  21.    while(1) {
  22.  
  23.       // Control de temperatura
  24.       T = sonda_temperatura_read();
  25.       if (T < 200) {
  26.          calefactor_on();
  27.       }
  28.       else {
  29.          calefactor_off();
  30.       }
  31.  
  32.       // Lectura de entradas
  33.       push_button_1 = read_pushbutton(1);
  34.       ...
  35.  
  36.       // Transiciones de la máquina de estados
  37.       if (estado_mecan == 1  && condición1) {
  38.          estado_mecan = 2;
  39.       }
  40.       ...
  41.  
  42.  
  43.       // Escritura de salidas
  44.       if (estado_mecan == 1)   salida1();
  45.       if (estado_mecan == 2)   salida2();
  46.       ...
  47.    }
  48.  
  49. }


Pero lo que de verdad es importante es que tengas claro qué es lo que quieres que haga la máquina en cada momento:
   cuántos estados diferentes hay para la máquina
   cómo se pasa de un estado a otro
   qué hay que hacer en cada estado

Por ejemplo cuando se llegue al final de la extrusión y se pulse el final de carrera. En ese estado (extrusión terminada) ¿Qué hay que hacer? ¿Cuál es el siguiente estado y cómo llegamos a él?

Un saludo.

Hola, gracias por tomarte el tiempo de leer. En cuanto a lo que quiero que la maquina haga, ya esta todo definido paso a paso, de hecho tengo el diagrama de flujo para guiarse un poco mas. Por ejemplo, el final de carrera de extrusion es mas que todo de seguridad, de alli segun algunas variables, regresa a su posicion inicial la extrusion y repite o simplemente vuelve y el proceso total concluye.

Por ahora estoy en una etapa de prototipo, y estoy realizando los primeros montajes y pruebas con respecto a la electronica. Todos los procesos a realizar por la maquina estan ya definidos (incluso hay planos y simulaciones  :-/ )  pero me esta dando un verdadero dolor de cabeza los problemas que mencione al principio del tema, que no logro saber si es el ruido, el montaje o la programacion lo que me esta causando el malfuncionamiento.

Queria aclarar tambien que el montaje en la protoboard lo he realizado tal cual se muestra en la imagen de proteus nueva, que se muestra en el post principal, con los mismos valores de capacitores, resistencias, etc.

PD: me diste una idea muy buena con el ejemplo que me diste para ordenar un poco mas el codigo y que se mas entendible, gracias  ;-)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #4 en: 20 de Diciembre de 2019, 19:21:04 »
Creo que el problema está en el programa.

¿Puedes poner los diagramas de flujo para compararlos con el programa y entender mejor el funcionamiento?

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #5 en: 20 de Diciembre de 2019, 23:20:33 »
Creo que el problema está en el programa.

¿Puedes poner los diagramas de flujo para compararlos con el programa y entender mejor el funcionamiento?

Claro, aca esta el diagrama, perdon por lo largo o si esta algo desordenado  :lol: :oops:

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #6 en: 21 de Diciembre de 2019, 05:31:13 »
Lo primero, hurtadoluisalex, felicitarte por el trabajo tan detallado que has hecho y por preparar el diagrama antes de ponerte a programar.
Eso es algo que muy pocos programadores hacen y sin embargo es necesario.

Pero un diagrama de flujo debe comenzar como un diagrama sin detalles, con pocas etapas. Piensa que debes presentar tu proyecto a un tribunal. Si le enseñas ese diagrama de flujo no van a entender nada. Si es necesario se pueden hacer varios diagramas pequeños, cada uno explicando una pequeña etapa o tarea. Te intentaré ayudar con eso después.

Lo primero es entender la máquina (el hardware) antes de entender cómo se comporta (el software).
Yo por ahora entiendo que tiene 4 acciones:
   1.- Motor de extrusora, para que salga masa de churros a la freidora. Con 2 finales de carrera, uno arriba y otro abajo.
   2.- Motor de corte. Va cortando la masa de los churros cada cierto tiempo.
   3.- Motor de extracción de churros. Retira los churros cuando están hechos. Tiene 2 finales de carrera asociados ¿dentro y fuera?
   4.- Resistencia calentadora del aceite, con un sensor de temperatura asociado.

Me falta alguna más que no entiendo bien ¿Puedes explicármelo?

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #7 en: 21 de Diciembre de 2019, 05:39:38 »
En cuanto al diagrama, a este tipo de máquinas le viene muy bien utilizar un diagrama de máquina de estados. El más conocido para programación de autómatas y que utilizan mucho los franceses es el Grafcet. https://es.wikipedia.org/wiki/GRAFCET

Si quieres te puedo ayudar para que hagas un Grafcet de tu proceso (creo que quedaría más profesional) o seguimos con el diagrama de flujo.

Un saludo.

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #8 en: 21 de Diciembre de 2019, 09:58:49 »
Lo primero, hurtadoluisalex, felicitarte por el trabajo tan detallado que has hecho y por preparar el diagrama antes de ponerte a programar.
Eso es algo que muy pocos programadores hacen y sin embargo es necesario.

Pero un diagrama de flujo debe comenzar como un diagrama sin detalles, con pocas etapas. Piensa que debes presentar tu proyecto a un tribunal. Si le enseñas ese diagrama de flujo no van a entender nada. Si es necesario se pueden hacer varios diagramas pequeños, cada uno explicando una pequeña etapa o tarea. Te intentaré ayudar con eso después.

Gracias, tengo una version un poco mas simple pero esta incompleta (le falta el modo drenaje), para el proyecto final nos pidieron algo mas detallado por eso lo tengo tan largo y detallado el diagrama de flujo  :oops:


Citar
Lo primero es entender la máquina (el hardware) antes de entender cómo se comporta (el software).
Yo por ahora entiendo que tiene 4 acciones:
   1.- Motor de extrusora, para que salga masa de churros a la freidora. Con 2 finales de carrera, uno arriba y otro abajo.
   2.- Motor de corte. Va cortando la masa de los churros cada cierto tiempo.
   3.- Motor de extracción de churros. Retira los churros cuando están hechos. Tiene 2 finales de carrera asociados ¿dentro y fuera?
   4.- Resistencia calentadora del aceite, con un sensor de temperatura asociado.

Me falta alguna más que no entiendo bien ¿Puedes explicármelo?

Exacto, tal cual como colocaste los dos primeros puntos asi funciona, se carga la masa en la extrusora que cuenta con dos finales de carrera (uno para indicar la posicion inicial y el otro marca el fin del recorrido). El motor de corte solo se activa cuando se activa la extrusion.

Para extraccion, se cuenta tambien con dos finales de carrera (arriba y abajo), uno para indicar que la cesta que tiene los churros esta afuera del aceite y pueden ser retirados por el operador, y otro para indicar que la cesta esta dentro del recipiente que contiene el aceite.

Tambien estas en lo correcto con respecto a la resistencia, tiene un sensor de temperatura que indicara al microcontrolador si debe activar o desactivar la resistencia segun la medicion. Si quieres me puedes indicar que si hay algo que me falta por explicar y con gusto lo explicare  :o

Honestamente, la poca experiencia que tengo es con diagramas de flujo pues es basicamente lo que utilizamos aca casi todo el tiempo (el resto del tiempo ni se hace un diagrama  :? ) estuve leyendo la pagina con la informacion que me posteaste y se hace algo complicada o por lo menos asi lo percibo ya que nunca he trabajado con ese tipo de diagramas

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #9 en: 21 de Diciembre de 2019, 12:19:46 »
Creo que ese diagrama es un poco complejo y no se ven bien los estados de la máquina.

Yo pondría los siguientes estados resumidos:

   1.- REPOSO
   2.- CALENTANDO
   3.- EXTRUDIENDO
   4.- FRIENDO
   5.- SACANDO CHURROS

Luego hay que meter ahí el llenado de la churrera. Yo lo haría desde reposo con otro camino alternativo:

   1.- REPOSO
   7.- ABRIENDO EXTRUSORA
   8.- LLENANDO EXTRUSORA

Otro camino alternativo para drenar aceite:

   1.- REPOSO
   9.- ENFRIANDO ACEITE PARA DRENAJE
   10.- DRENAR ACEITE

Ahora hay que unir los estados mediante condiciones (pulsadores, tiempos, finales de carrera, temperaturas, etc)

¿Qué opinas?

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #10 en: 21 de Diciembre de 2019, 12:24:27 »
Acabo de darme cuenta de que después del llenado de la extrusora no sabes cuánto hay que mover el motor para que empiece a extrudir. Debería ser una operación manual:

   1.- REPOSO
   7.- ABRIENDO EXTRUSORA
   8.- LLENANDO EXTRUSORA
   11.- CERRANDO EXTRUSORA EN MODO MANUAL

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #11 en: 21 de Diciembre de 2019, 12:40:39 »
Honestamente, la poca experiencia que tengo es con diagramas de flujo pues es basicamente lo que utilizamos aca casi todo el tiempo (el resto del tiempo ni se hace un diagrama  :? ) estuve leyendo la pagina con la informacion que me posteaste y se hace algo complicada o por lo menos asi lo percibo ya que nunca he trabajado con ese tipo de diagramas

No son complicados, al contrario para este tipo de máquinas resulta más natural dibujar una máquina de estados que un diagrama de flujo. Son muy parecidos entre sí y te puedo echar una mano.
El diagráma de flujo queda muy raro, lleno de líneas que van hacia atrás para esperar a que salgas de cada estado.

Lo único que hay que hacer es dibujar los 11 estados anteriores de arriba a abajo y unirlos con líneas. En cada línea de unión se coloca una rayita horizontal y la condición que permite pasar de un estado a otro.

Un ejemplo:


Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #12 en: 21 de Diciembre de 2019, 12:45:35 »
No es buena idea conectar directamente el sensor de temperatura al PIC; debería haber algún circuito de adaptación como por ejemplo un amplificador operacional en modo seguidor de tensión. No creo que este midiendo bien la temperatura ... puede que funcione en Proteus, pero no en la realidad.

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #13 en: 21 de Diciembre de 2019, 12:48:55 »
Creo que ese diagrama es un poco complejo y no se ven bien los estados de la máquina.

Yo pondría los siguientes estados resumidos:

   1.- REPOSO
   2.- CALENTANDO
   3.- EXTRUDIENDO
   4.- FRIENDO
   5.- SACANDO CHURROS

Luego hay que meter ahí el llenado de la churrera. Yo lo haría desde reposo con otro camino alternativo:

   1.- REPOSO
   7.- ABRIENDO EXTRUSORA
   8.- LLENANDO EXTRUSORA

Otro camino alternativo para drenar aceite:

   1.- REPOSO
   9.- ENFRIANDO ACEITE PARA DRENAJE
   10.- DRENAR ACEITE

Ahora hay que unir los estados mediante condiciones (pulsadores, tiempos, finales de carrera, temperaturas, etc)

¿Qué opinas?

Un saludo.

Hola, me gusta la estructura que le has dado. Hay procesos que me falto explicar con mas detalle que pense que no serian relevantes por el problema que tenia, pero ya veo que todo hay que tenerlo en cuenta, procedo a aclarar algunas cosas:

El proceso de llenado para la extrusion (cargar la masa) es completamente manual por parte del operador, cuando se coloca la masa el operador presiona el boton 1 y comienza el dispensado.

Con respecto a esto:
Citar
Acabo de darme cuenta de que después del llenado de la extrusora no sabes cuánto hay que mover el motor para que empiece a extrudir. Debería ser una operación manual:

   1.- REPOSO
   7.- ABRIENDO EXTRUSORA
   8.- LLENANDO EXTRUSORA
   11.- CERRANDO EXTRUSORA EN MODO MANUAL

Es una operacion manual eso que dices, nunca lo habia contemplado pero practicamente se habia hecho y planteado hacerlo manual solo que sin darme cuenta  :lol:

Desconectado hurtadoluisalex

  • PIC10
  • *
  • Mensajes: 24
Re:Ayuda | Proyecto Final problema con maquina y PIC16F877A
« Respuesta #14 en: 21 de Diciembre de 2019, 12:50:49 »
No es buena idea conectar directamente el sensor de temperatura al PIC; debería haber algún circuito de adaptación como por ejemplo un amplificador operacional en modo seguidor de tensión. No creo que este midiendo bien la temperatura ... puede que funcione en Proteus, pero no en la realidad.

Estaba pensando eso, pero aun no tenia la seguridad de si deberia hacerlo o no, porque en ocasiones mide correctamente pero en otras arroja un resultado erroneo, voy a tratar de implementarlo para dejar menos espacio a errores e inconvenientes