TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: dcsalg en 24 de Febrero de 2012, 12:28:48

Título: PROBLEMA CON CCS y el ADC en PROTEUS
Publicado por: dcsalg en 24 de Febrero de 2012, 12:28:48
Estaba haciendo el programa de una alarma sencilla pero puede ser que el CCS tenga problemas con la parte ADC? si lo programo en mikroC anda pero lo mismo en CCS no funciona como que no estaria leyendo. paso el codigo en CCS. EN la Subrutina Bateria esta la lectura del ADC capaz esta algo mal configurado o mi CCS no sirve algo parecido en mikroC y anda. Pero yo lo quiero el programa en CCS no me gusta  mucho mikroC. La Version de CCS que tengo es la 4.093.

#include "C:\Users\Daniel\Documents\Alarma Papis\Alarma 819\Alarma DCS.h"
//  #include <stdio.h>
//  #include <stdlib.h>
  #ZERO_RAM

// OPERADOR OR ||

/*
      RA0 = ADC
      RA1 = LISTO
      RA2 = ARM
      RA3 = ALARMA
      RA4 = SIRENA
*/
#define ADIF 6
#byte PIR1=0x0C

void configura()
{
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_oscillator(OSC_1MHZ);
   port_b_pullups(TRUE);
   set_tris_b(0xff);
   set_tris_a(0x21); 

   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);    //(ADC_CLOCK_DIV_2);

}

int armado(int z1, int z3, int z4)
{
   int listo;
   if(z1==0 && z3==0 && z4==0)
   {
      output_bit(PIN_A1,1);                     // Enciende LED LISTO
      listo=1;
   }
   else
   {
      output_bit(PIN_A1,0);                     // Apaga LED LISTO
      listo=0;
   }
   return listo;
}

// OPERADOR OR ||
void delay_seg(int8 s)
{
   while (s!=0)
   {
      delay_ms(1000);
      s--;
   }
}

void alarma()
{
    output_bit(PIN_A3,1);   // Enciende LED ALARMA
    output_bit(PIN_A4,1);   // Enciende SIRENA
    delay_seg(60);
    output_bit(PIN_A4,0);   // Apaga SIRENA
}


void bateria()
 {
   long valorADC; int1 done;
         set_adc_channel(0);
         delay_us(10);
         read_adc(ADC_START_ONLY);
         
         done = adc_done();
         while(!done) {   
            done = adc_done();
         }
        valorADC = read_adc();
 }
 
 
void main()
{
   // TODO: USER CODE!!
   int contar=15;   //Tiempo de Salida y Entrada en segundos
   int RB0,  RB1, RB2, RB3, RB4, RB5;
   int listo, c;
   int act;
   
   

   
   configura();         //SETEA CONFIGURACION DEL MICRO
   output_a(0x00);

   
//======================================================================
//                   INICIO PROGRAMA BUCLE
//======================================================================
   c=contar;
   while(true)
   { 
      RB4=input(PIN_B4); delay_ms(100); //chequea la llave Armado SAL
      RB5=input(PIN_B5); delay_ms(100); //chequea la llave Armado QUEDAR
      RB0=input(PIN_B0); delay_ms(10);  //chequea Zona 1
      RB1=input(PIN_B1); delay_ms(10);  //chequea Zona 2
      RB2=input(PIN_B2); delay_ms(10);  //chequea Zona 3
      RB3=input(PIN_B3); delay_ms(10);  //chequea Zona 4
     
      listo=armado(RB0, RB2, RB3);   // Chequea las Zonas 1,3,4
     
/****************************************************************************
                           ARMA SALIDA
****************************************************************************/
      if(listo==1 && RB4==0)
      {
         output_bit(PIN_A2,1);           // Enciende LED ARM
         while ((c!=0) && (RB4!=1))
         {
            RB4=input(PIN_B4); delay_ms(100);  //chequea la llave Armado
            output_bit(PIN_A3,1);              // Enciende LED ALARMA
            delay_ms(500);
            output_bit(PIN_A3,0);              // Apaga LED ALARMA
            delay_ms(500);
            c--;
         }
         act=1;
      }
      else
      {
         if(listo==1 && RB4==1)
         {
            output_bit(PIN_A2,0);        // Apaga LED ARM
            c=contar;
            act=0;
         }

/****************************************************************************
                           ARMA QUEDAR
****************************************************************************/
         if(listo==1 && RB5==0)
         {
            output_bit(PIN_A2,1);        // Enciende LED ARM
            act=1;
         }
         else
         if(listo==1 && RB5==1)
         {
            output_bit(PIN_A2,0);        // Apaga LED ARM
            c=contar;
            act=0;
         }
      }


//======================================================================
//                        DISPARA ALARMA
//======================================================================

         RB0=input(PIN_B0); delay_ms(5);  //chequea Zona 1
         RB1=input(PIN_B1); delay_ms(5);  //chequea Zona 2
         RB2=input(PIN_B2); delay_ms(5);  //chequea Zona 3
         RB3=input(PIN_B3); delay_ms(5);  //chequea Zona 4

         // El retardo de 20ms para que no de falsa alarma por interuppciones
         // cortas
         RB0=input(PIN_B0); delay_ms(20);  //chequea Zona 1
         RB1=input(PIN_B1); delay_ms(20);  //chequea Zona 2
         RB2=input(PIN_B2); delay_ms(20);  //chequea Zona 3
         RB3=input(PIN_B3); delay_ms(20);  //chequea Zona 4

//============================ ALARMA SALIR ==============================
         // SI ACTIVA Z1  CON RETARDO   
         if(act==1 && RB4==0 && RB0==1)    //ZONA 1
         {
            delay_seg(contar);      // mismo tiempo que salida 15 Seg
            alarma();
         }

         // SI ACTIVA Z2  SIN RETARDO   
         if(act==1 && RB4==0 && RB1==1)    //ZONA 2
         {
            alarma();
         }

         // SI ACTIVA Z3  SIN RETARDO   
         if(act==1 && RB4==0 && RB2==1)    //ZONA 3
         {
            alarma();
         }
         
         // SI ACTIVA Z4  SIN RETARDO   
         if(act==1 && RB4==0 && RB3==1)    //ZONA 4
         {
            alarma();
         }

//============================= ALARMA QUEDAR ==============================
         // SI ACTIVA Z1  CON RETARDO   
         if(act==1 && RB5==0 && RB0==1)    //ZONA 1
         {
            alarma();
         }

         // SI ACTIVA Z3  SIN RETARDO
         if(act==1 && RB5==0 && RB2==1)    //ZONA 3
         {
            alarma();
         }
         
         // SI ACTIVA Z4  SIN RETARDO   
         if(act==1 && RB5==0 && RB3==1)    //ZONA 4
         {
            alarma();
         }

//========================== CHEQUEA BATERIA =============================


         bateria();


//only starts the conversion
        // valorADC=read_adc(ADC_READ_ONLY);

        // if(valorADC==1023)  //<=
        // {
        //   output_bit(PIN_A3,1);
        // }
   
   }   // FIN WHILE PRINCIPAL
   

}