Nesse teste utilizamos leds para sinalizar quando a aceleração em um eixo é maior ou igual a 1g e quando ela é menor ou igual a menos 1g.
//#include "main.h"
#device <16F877a.h>
#device ADC=10
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#int_AD
#include <math.h> //Incluindo bibliotéca matemática
void AD_isr(void)
{
}
void main()
{
long int x;
long int y;
long int z;
/*
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
//setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
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_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
*/
// TODO: USER CODE!!
setup_adc_ports( AN0_AN1_AN4_VREF_VREF );//Setando as portas analógicas do MCU.
setup_adc(ADC_CLOCK_INTERNAL ); //Setando clock interno para uso com o ADC
delay_ms(1000); //Pausa de 1 segundo
//indica que está ligado
output_bit(PIN_B3, 1);
//ao iniciar
output_bit(PIN_D3, 1);
delay_ms(500);
output_bit(PIN_D2, 1);
delay_ms(500);
output_bit(PIN_C5, 1);
delay_ms(500);
output_bit(PIN_C4, 1);
delay_ms(500);
output_bit(PIN_D4, 1);
delay_ms(500);
output_bit(PIN_C7, 1);
delay_ms(500);
output_bit(PIN_D3, 0);
delay_ms(500);
output_bit(PIN_D2, 0);
delay_ms(500);
output_bit(PIN_C5, 0);
delay_ms(500);
output_bit(PIN_C4, 0);
delay_ms(500);
output_bit(PIN_D4, 0);
delay_ms(500);
output_bit(PIN_C7, 0);
delay_ms(500);
//fim
//mandar valor alto para sleep
output_bit(PIN_D5, 1);
//selecionar sensibilidade
output_bit(PIN_D7, 0);
output_bit(PIN_D6, 0);
/*
channel 0 EIXO x +g D3 -g D2
channel 1 EIXO y +g C5 -g C4
channel 4 EIXO z +g D4 -g C7
sleep D5
select1 D7
select2 D6
*/
while(true){
//LENDO EIXO X
x=0;
set_adc_channel(0);
delay_ms(1);
x=read_adc();
if(x>=745){
output_bit(PIN_D3, 1);
delay_ms(2000);
output_bit(PIN_D3, 0);
}
if(x<=292){
output_bit(PIN_D2, 1);
delay_ms(2000);
output_bit(PIN_D2, 0);
}
delay_ms(1);
//LENDO EIXO Y
y=0;
set_adc_channel(1);
delay_ms(1);
y=read_adc();
if(y>=745){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
if(y<=292){
output_bit(PIN_C5, 1);
delay_ms(2000);
output_bit(PIN_C4, 0);
}
//LENDO EIXO Z
delay_ms(1);
z=0;
set_adc_channel(4);
delay_ms(1);
z=read_adc();
if(z>=745){
output_bit(PIN_D4, 1);
delay_ms(2000);
output_bit(PIN_D4, 0);
}
if(z<=292){
output_bit(PIN_C7, 1);
delay_ms(2000);
output_bit(PIN_C7, 0);
}
delay_ms(1);
}
}
Nenhum comentário:
Postar um comentário