Autor Tema: Programa para secadora de ropa  (Leído 1154 veces)

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

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Programa para secadora de ropa
« en: 13 de Enero de 2012, 20:29:16 »
Hola buenas tardes, espero que estén todos bien.

Estoy haciendo un programa para hechar andar una secadora de ropa que tengo por ahí guardada... el problema es que por más ajustes que le hago no logro terminarlo, es más deseo incluirle una botonera para seleccionar temperatura y tiempo de secado... pero salgo de una para entrar en más dudas.

//Definiciones de las salidas
#ifndef Extractor
#define Extractor PORTC.F0
#endif

#ifndef Canasta
#define Canasta PORTC.F1
#endif

#ifndef Quemador
#define Quemador PORTC.F2
#endif

#ifndef Alarma
#define Alarma PORTC.F3
#endif

//DECLARACIÓN DE VARIABLE PARA CARACTER
 char txt[5];
 char txt2[5];
 unsigned char text;
 unsigned char text2;
//DECLARACIÓN DE VARIABLES TIPO ENTERO
 int dato2;
 unsigned contador;
 int contador3;
 int contador4;
 unsigned cnt;
 int dato3;
 int reloj;
 short j;
 short tecla;
 int contador2;
 long muestra;
 //DECLARACIÓN DEL LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
// CONFIGURACIÓN DE PUERTOS EN D PARA LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
void temperatura (void);
void tiempo(void);
void interrupt(){
if (INTCON.T0IF){ contador++; INTCON.T0IF=0; }//RUTINA DE INTERRUPCIÓN
                }
//INICIO DE PROGRAMA
void main() {  //INICIO DEL PROGRAMA
//HABILITACIÓN DEL CONVERTIDOR ANALÓGICO DIGITAL: FOSC/8 Y ENTRADA EN A0
 ADCON1 = 0x12;

//INICIO DEL LCD
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

//PRESENTACIÓN DE INICIO EN EL LCD
Lcd_Out(1,1,"ING.OSCAR ARNAUD");
delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"MARQUIS");
Lcd_Out(2,1,"LOS CABOS");
delay_ms(1500);
Lcd_Cmd(_LCD_CLEAR);

//SALIDAS PREDETERMINADAS
Lcd_Out(1,1,"PROG:");
Lcd_Out(1,8,"T:");
Lcd_Out(2,1,"TEMP:");
Lcd_Out(2,11,"C");

//CONFIGURACIÓN PUERTO D COMO ENTRADA Y PUERTO C COMO SALIDA

TRISD=0xFF;
TRISC=0xF0;

//INICIO DEL TEMPORIZADOR
OPTION_REG=0x02;
TMR0=40;
INTCON=0xA0;

//INICIO DE BUCLE DE PROGRAMA

while(1)  {



                     do{
                     Extractor=1; Canasta=1;
                     if (contador==60){ contador2++;contador=0;tiempo();}
                     }
                     while(contador2<=5);
                     do{
                     Extractor=1; Canasta=1;
                     if (contador==60){ contador2++;contador=0;tiempo();}  <==============================v
                     else temperatura(); <===si esta función la dejo acá deja de contar el programa, si la incluyo dentro del (if) si cuenta pero se sigue contando sin parar              ignorando el while (contador2<=40); y el rpograma no termina, tal vez he garabateado las funciones y todos los pasos pero se que si lo van a entender... realmente les pido un consejo o que me hagan notar mi error que se que los tengo dentro de este programa, muchas de las cosas que hago las he aprendido acá por eso pienso que no se les va a dificultar el programa.


                     }
                     while (contador2<=40);
                     
                     if(contador2==40){
                     
                     do{
                     PORTC=0x00;
                     //ALARMA

                     j=5;
                     Alarma=1;
                     delay_ms(500);
                     Alarma=0;
                     delay_ms(500);
                     j--;
                     }
                     while(j>0);
                                       }


                     }//FIN DEL BUCLE





 }


   //FIN DEL PROGRAMA
// MACRO PARA LA LECTURA ANALÒGICA Y EL LCD

 void temperatura (void) {
 if (dato3<71)
 Quemador=1;
 else
 Quemador=0;

 muestra=Adc_read(0);
 dato2=muestra>>2;
 dato2*=1.953125;
 dato3=dato2;
 WordToStr(dato2,txt);
 Lcd_Out(2,6,txt);

 }
 void tiempo(void){
 contador3=contador2;
 WordToStr(contador3,txt2);
 Lcd_Out(1,11,txt2);

 }

si puse de negro algunas letras, fue para hacer énfasis en el lugar donde tengo detalles.

De ante mano gracias, tengo el programa del isis voy a subirlo junto con el hex, yo programo en mikroC.

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: Programa para secadora de ropa
« Respuesta #1 en: 13 de Enero de 2012, 20:40:27 »
Este es el archivo .hex y el isis: http://www.mediafire.com/?5icf0nheobza7oj
Saludos.

Desconectado Masterboy1980

  • PIC10
  • *
  • Mensajes: 15
Re: Programa para secadora de ropa
« Respuesta #2 en: 16 de Enero de 2012, 16:46:21 »
Hola, ya logré solucionar que la cuenta continúe sin importar que paso siga, ahora el problema que pare de contar y se quede en 40 todavía no lo soluciono ¿alguna idea?