TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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
}