#include <18f4550.h>
#device ADC=10
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT
#use delay (clock=48000000)
#use fast_io(a)
#use fast_io(d)
#priority timer1
#define pinServo0 PIN_D0
#define pinServo1 PIN_D1
#define pinServo2 PIN_D2
#define pinServo3 PIN_D3
int16 ticksTotalServo = 30012;
int16 ticksAltoServo[8];
int8 servoAMover=0;
int1 subir=1, enableServo[4]={1,1,1,1};
#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);
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);
set_timer1(65535 - ticksTotalServo + ticksAltoServo[servoAMover]);
servoamover++;
if (servoAMover > 7) servoAMover = 0 ;
subir = 1;
}
}
void main()
{
int8 i;
set_tris_D(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(true)
{
for(i=0;i<8;i++)
{
if(enableServo[i]==1)
set_adc_channel(i);
delay_ms(10);
ticksAltoServo[i] = 12004.8 + (read_adc()*11.734);
}
}
}