//////////////////////////////////////////////////////////////////////////////
//
//                      4 csatornás RC PPM kódoló
//
//       Processzor: PIC12F675
//
//       Author: Nagy Tibor, 2014. május
//
//       Potméter bemenetek: AN0, AN1, AN2, AN3
//       V-Mixer bemenet   : PIN_A3
//       RC jel kimenet    : PIN_A5
//
/////////////////////////////////////////////////////////////////////////////

#include <4ch_rc_ppm_encoder_12F675.h>

#ZERO_RAM

void main()
{
   signed long int ch1, ch2, ch3, ch4;
   unsigned long int ppm1, ppm2, ppm3, ppm4, imp, pause, ch_min, ch_max;
   setup_adc_ports(sAN0|sAN1|sAN2|sAN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   read_adc(ADC_START_ONLY);
   
   ch_min=50;
   ch_max=950;
   

   while(TRUE)
   
   {
   
   // Potméterek olvasása
   
      
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   delay_ms(2);
   ch1 = read_adc();
   delay_cycles(20);
   
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(1);
   delay_ms(2);
   ch2 = read_adc();
   delay_cycles(20);
   
   if (ch1<ch_min)
   ch1=ch_min;
   
   if (ch1>ch_max)
   ch1=ch_max;
   
   if (v_mix)
   ppm1=ch1+1000+(ch2-500); 
    else
   ppm1=ch1+1000;
   
   if (ch2<ch_min)
   ch2=ch_min;
   
   if (ch2>ch_max)
   ch2=ch_max;
      
   if (v_mix)
   ppm2=ch2+1000-(ch1-500); 
    else
   ppm2=ch2+1000;
   
   
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(2);
   delay_ms(2);
   ch3 = read_adc();
   
   if (ch3<ch_min)
   ch3=ch_min;
   if (ch3>ch_max)
   ch3=ch_max;
      
   ppm3=ch3+1000;
   delay_cycles(20);
   
   
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(3);
   delay_ms(2);
   ch4 = read_adc();
   
   if (ch4<ch_min)
   ch4=ch_min;
   if (ch4>ch_max)
   ch4=ch_max;
   
   ppm4=ch4+1000;
   delay_cycles(20);
   
   
   
   // Kimenő jel előállítása
   
   imp=300;  // Impulzusszélesség us-ban.
   
   // 20ms teljes periódusidő
   pause=12000-(ppm1+ppm2+ppm3+ppm4);  // 12ms, mert az ADC elvisz 8 ms-t.
   
   output_high(rc_out);
   delay_us(imp);
   output_low(rc_out);
   delay_us(ppm1-imp);
   
   output_high(rc_out);
   delay_us(imp);
   output_low(rc_out);
   delay_us(ppm2-imp);
   
   output_high(rc_out);
   delay_us(imp);
   output_low(rc_out);
   delay_us(ppm3-imp);
   
   output_high(rc_out);
   delay_us(imp);
   output_low(rc_out);
   delay_us(ppm4-imp);
   
   // Záró impulzus (ez mindig kell!)
   output_high(rc_out);
   delay_us(imp);
   output_low(rc_out);
   delay_us(pause);
   
   }

}
