Autor Tema: PROBLEMAS CON PROYECTO EN IMPLEMENTACION  (Leído 1987 veces)

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

Desconectado Lord_Duran

  • PIC12
  • **
  • Mensajes: 76
PROBLEMAS CON PROYECTO EN IMPLEMENTACION
« en: 21 de Octubre de 2010, 09:20:44 »
Saludos.

Tengo problemas en la implementacion de un proyecto, la cuestion es que la temperatura que me muestra en la LCD es variable, no se mantiene constante, en algunos momentos muestra 14 grados, luego muestra 24, luego 30, luego baja a 28 grados y así, creo que se desborda la temperatura, pero no entiendo por qué, tambien estoy leyendo valores de humedad, osea, esos estan siendo simulados por potenciometros, con variaciones de voltaje entre 0 y 5 V que llegan al ADC, y esos valores me es mostrado de forma correcta en el LCD y con ello puedo manejar una bomba de agua (rango entre 75 y 77 % de humedad), cuando baja a 75% o menor, pues se activa una bomba. El punto es que la humedad no se desborada, por que se desborda la temperatura???

otro porblema que tengo, es que en la implementacion tampoco funciona la comunicacion serial (TX del pic a la PC)

bueno, aqui dejo el programa que manejo en CCS, espero contar con mucha ayuda y solucionar el problema, ya que estoy contra la pared en cuanto a tiempo se refiere.

Código: [Seleccionar]
#include <16F877A.h>
#device adc = 10
#FUSES XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT
#use delay(clock=4000000)

#use fast_io(C)
#use fast_io(D)
#use fast_io(e)

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_RS    PIN_B2
#define LCD_E     PIN_B3

#include <flex_lcd204.C>
#bit Fin_C1 = 7.4   // ES EL SENSOR DE ARRIBA
#bit Fin_C2 = 7.5   // ES EL SENSOR DE ABAJO
#define enter input(pin_b1)
//#bit enter = 6.1
#bit arriba = 8.6
#bit abajo = 8.7

#define nivel1 input(pin_e0)
#define nivel2 input(pin_e1)

#zero_ram
float TempA=20.0,TempB=28.0,TempM=25.0,HumA=75.0,HumB=77.0;
int puntero = 0;
int bandera,ban2=0;

void sube(void);
void baja(void);
void para(void);
void vDibujaPuntero(int puntero);
void OpcionSelect(int puntero);
void testeo(void);

void main()
{
   short control, control1, controlh; // VARIABLES DE CONTROL
   int16 hum1, hum2, hum3, temp1, temp2;
   float tempt1, tempt2, humt1, humt2, humt3, humS, tempS, RH;
   
   set_tris_c(0xB0);
   set_tris_d(0xC0);
   set_tris_e(3);
   output_low(pin_e2);
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
   lcd_init();
   
   control = 0;
   control1 = 0;
   controlh = 0;

   while(true)
   {
      set_adc_channel(0);  //CANAL 0
      delay_us(20);
      temp1 = (read_adc() * 100);
      set_adc_channel(1);  //CANAL 1
      delay_us(20);
      temp2 = (read_adc() *100);
      delay_ms(300);
      tempt1 = temp1 * 0.0049;
      tempt2 = temp2 * 0.0049;
      tempS = (tempt1 + tempt2) / 2.0;   //TEMPERATURA A MANEJAR
      // LECTURA DE HUMEDAD
      set_adc_channel(2);  //CANAL 2
      delay_us(20);
      hum1 = read_adc();
      set_adc_channel(3);  //CANAL 3
      delay_us(20);
      hum2 = read_adc();
      set_adc_channel(4);  //CANAL 4
      delay_us(20);
      hum3 = read_adc();
      humt1 = hum1 * 0.0049;
      humt2 = hum2 * 0.0049;
      humt3 = hum3 * 0.0049;
      humS = (humt1 + humt2 + humt3) / 3;
      RH = (humS - 0.958) / 0.0307;   // HUMEDAD HA MANEJAR
      //*********** RUTINA DE CONTROL DE TEMPERATURA ****************
      if (tempS >= TempB)
      {
         if (Fin_C1 == 0 && Fin_C2 == 1)
         {
            control = 0;   
         }
         if (control == 0) 
         {
            output_high(PIN_C1);
            sube();
            if (Fin_C1 == 1)
            {
               para();
               output_low(PIN_C1);
            }
         }
      }
      if (tempS <= TempA)
      {
         if (Fin_C1 == 1 && Fin_C2 == 0)
         {
            control = 1;
         }
         if (control == 1)
         {
            output_high(PIN_C3);
            baja();
            if(Fin_C2 == 1)
            {
               para();
               output_low(PIN_C3);
               ban2=1;
            }
         }
         if(ban2==1){
            output_high(PIN_C2); //AIRE CALIENTE
            control1 = 1;
            ban2=0;
         }
         
      }
      if (control1 == 1)
      {
         if (tempS <= TempM)
         {
            output_high(PIN_C2);  //AIRE CALIENTE
         } else
           {
              output_low(PIN_C2);  //APAGA AIRE CALIENTE
              control1 = 0;
           }
      }
      //************ FIN RUTINA CONTROL TEMPERATURA *****************

      //******* RUTINA CONTROL DE HUMEDAD ****************
      if (RH >= HumB)
      {
         output_low(PIN_C0);
      }
      if (RH <= HumA)
      {
         output_high(PIN_C0);
         controlh = 1;
      }
      if (controlh == 1)
      {
         if (RH <= HumB)
         {
            output_high(PIN_C0);
         }else
         {
            output_low(PIN_C0);
            controlh = 0;
         }
      }
      //*********** FIN RUTINA CONTROL HUMEDAD **************
      printf(lcd_putc, "\f    TEMPERATURA    \n      %01.2f %cC\n      HUMEDAD   \n      %01.2f %c",tempS,0xDF,RH,0x25);
      printf("ADC = %4ld Temperatura = %01.2f C\r\n",tempt1,tempS);
      printf("ADC = %4ld humedad = %01.2f RH\r\n", hum3,RH);
      delay_ms(100);
      if(enter==1){
         lcd_putc("\f");
         lcd_gotoxy(1,2);
         lcd_putc("     SELECCIONE     ");
         lcd_gotoxy(1,3);
         lcd_putc("     PLANTACION     ");
         delay_ms(2000);
         //lcd_putc("\f");
         testeo();
      }
      if(nivel1==1 && nivel2==1){
         output_low(pin_e2);}
      else {if(nivel1==0 && nivel2==0)
         output_high(pin_e2);}
   }
}
void sube(void)
{
   output_high(PIN_D4);  // EN1
   output_high(PIN_D5);  // EN2
   output_low(PIN_D0);   // IN1
   output_low(PIN_D2);   // IN3
   output_high(PIN_D1);  // IN2
   output_high(PIN_D3);  // IN4
}
void baja(void)
{
   output_high(PIN_D4);   // EN1
   output_high(PIN_D5);   // EN2
   output_high(PIN_D0);   // IN1
   output_high(PIN_D2);   // IN3
   output_low(PIN_D1);    // IN2
   output_low(PIN_D3);    // IN4
}
void para(void)
{
   output_high(PIN_D4);   // EN1
   output_high(PIN_D5);   // EN2
   output_low(PIN_D0);    // IN1
   output_low(PIN_D2);    // IN3
   output_low(PIN_D1);    // IN2
   output_low(PIN_D3);    // IN4
}

void testeo()
{
   puntero = 1;
   vDibujaPuntero(puntero);
   bandera = 1;
   while (bandera == 1)
   {
      if (abajo == 1)
      {
         delay_ms(300);
         puntero++;
         if (puntero == 5)
         {
            puntero = 1;
         }
         vDibujaPuntero(puntero);
      }
      if (arriba == 1)
      {
         delay_ms(300);
         puntero--;
         if (puntero == 0)
         {
            puntero = 4;
         }
         vDibujaPuntero(puntero);
      }
      if (enter == 1)
      {
         OpcionSelect(puntero);
         bandera = 0;
      }
   }
}

void vDibujaPuntero (int puntero)
{
   lcd_putc("\f");
   lcd_gotoxy(3,1);
   lcd_putc("1 CLAVEL");
   lcd_gotoxy(3,2);
   lcd_putc("2 ROSAS");
   lcd_gotoxy(3,3);
   lcd_putc("3 PLANTACION 3");
   lcd_gotoxy(3,4);
   lcd_putc("4 PLANTACION 4");
   lcd_gotoxy(1,puntero);
   lcd_putc("->");
}

void OpcionSelect(int puntero)
{
   switch(puntero)
   {
      case 1:lcd_putc("\fCLAVEL");
             TempA=20.0;
             TempB=28.0;
             TempM=25.0;
             HumA=75.0;
             HumB=77.0;
             break;
      case 2:lcd_putc("\fROSAS");
             TempA=22.0;
             TempB=30.0;
             TempM=26.0;
             HumA=75.0;
             HumB=85.0;
             break;
      case 3:lcd_putc("\fPLANTACION 3");
             TempA=10.0;
             TempB=30.0;
             TempM=23.0;
             HumA=74.0;
             HumB=89.0;
             break;
      case 4:lcd_putc("\fPLANTACION 4");
             TempA=15.0;
             TempB=30.0;
             TempM=23.0;
             HumA=74.0;
             HumB=85.0;
             break;
   }
   printf(lcd_putc,"\nTA=%2.2f TB=%2.2f\nHA=%2.2f HB=%2.2f",TempA,TempB,HumA,HumB);
   printf("Valores %2.2f %2.2f %2.2f %2.2f %2.2f\r",TempA,TempB,TempM,HumA,HumB);
   //printf("Valores %2.2f %2.2f %2.2f %2.2f\r\n",TempA,TempB,HumA,HumB);
   delay_ms(3000);
}

En la simulacion da 100 puntos, no hay ninguna falla, la TX y todo lo demás funciona perfecto.

Muchas gracias

Desconectado Lord_Duran

  • PIC12
  • **
  • Mensajes: 76
Re: PROBLEMAS CON PROYECTO EN IMPLEMENTACION
« Respuesta #1 en: 21 de Octubre de 2010, 22:15:00 »
Saludos

Muchas gracias por las "respuestas"  :lol: :lol: :lol:
pero ya solucine el problema

gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PROBLEMAS CON PROYECTO EN IMPLEMENTACION
« Respuesta #2 en: 22 de Octubre de 2010, 01:23:04 »
¿Y cómo lo solucionaste?

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: PROBLEMAS CON PROYECTO EN IMPLEMENTACION
« Respuesta #3 en: 22 de Octubre de 2010, 11:25:23 »
Saludos

Muchas gracias por las "respuestas"  :lol: :lol: :lol:
pero ya solucine el problema

gracias

Otro usuario que erróneamente cree que debemos saber todo y contestarle todo.

Se dan respuestas cuando se puede y cuando se sabe, si no las hay es porque no se puede ayudarte.