#include <16f887.h>
#device ADC=10
#use delay (clock=20000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(c)
#define pinServo0 PIN_C0
#define pinServo1 PIN_C1
#define pinServo2 PIN_C2
#define pinServo3 PIN_C3
#define pinServo4 PIN_C4
#define pinServo5 PIN_C5
#define pinServo6 PIN_C6
#define pinServo7 PIN_C7
int16 ticksTotalServo = 12500; //tickAltoMaximo = 11500 tickAltoMinimo = 3500
int16 ticksAltoServo[8];
int8 servoAMover=0;
int1 subir=1, enableServo[8]={1,1,1,1,1,0,0,0};
#int_timer1
void intTimer(void)
{
if(subir==1)
{
if(servoAMover == 0 && enableServo[0] == 1) output_high(pinServo0);
if(servoAMover == 1 && enableServo[1] == 1) output_high(pinServo1);
if(servoAMover == 2 && enableServo[2] == 1) output_high(pinServo2);
if(servoAMover == 3 && enableServo[3] == 1) output_high(pinServo3);
if(servoAMover == 4 && enableServo[4] == 1) output_high(pinServo4);
if(servoAMover == 5 && enableServo[5] == 1) output_high(pinServo5);
if(servoAMover == 6 && enableServo[6] == 1) output_high(pinServo6);
if(servoAMover == 7 && enableServo[7] == 1) output_high(pinServo7);
set_timer1(65535 - ticksAltoServo[servoAMover]);
subir = 0;
}
else if(subir==0)
{
if(servoAMover == 0 && enableServo[0] == 1) output_low(pinServo0);
if(servoAMover == 1 && enableServo[1] == 1) output_low(pinServo1);
if(servoAMover == 2 && enableServo[2] == 1) output_low(pinServo2);
if(servoAMover == 3 && enableServo[3] == 1) output_low(pinServo3);
if(servoAMover == 4 && enableServo[4] == 1) output_low(pinServo4);
if(servoAMover == 5 && enableServo[5] == 1) output_low(pinServo5);
if(servoAMover == 6 && enableServo[6] == 1) output_low(pinServo6);
if(servoAMover == 7 && enableServo[7] == 1) output_low(pinServo7);
set_timer1(65535 - ticksTotalServo + ticksAltoServo[servoAMover]);
servoamover++;
if (servoAMover > 7) servoAMover = 0 ;
subir = 1;
}
}
void main()
{
int8 i;
set_tris_c(0x00);
set_tris_a(0xFF);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
disable_interrupts(global);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
port_b_pullups(FALSE);
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(60000);
while(1)
{
for(i=0;i<8;i++) //leyendo los valores de los LDR
{
if(enableServo[i]==1)
set_adc_channel(i);
delay_ms(10);
ticksAltoServo[i] = 4750 + (read_adc()*5) ;
}
}
}