
#include <pic.h>           
#include <htc.h>  



unsigned char value,value2;
unsigned char v1,v2,t1,t2,t3,zold,kek,piros;
unsigned char ct1,ct2,ct3,del;  /*pwm ciklusvaltozok*/
unsigned char del2=250,del1;

char tulcsordul=0,tulcsorddebug;

unsigned long int freki=0;

unsigned char ccphdebug,ccpldebug;

void init_io(void)
{
   
   
    TRISC = 0x04; /*RC2 a bementet*/
    TRISD = 0x00;  /*digitalis kimenetek*/

}


void init_ccp(void){

/*timer 1*/

T1CON=13;    /*beallit belso 1:1 , fut*/
CCP1CON=5;    /*lefuto bla bla bla*/


}/*fg vege*/

void pwm(void){


	del=20;
	
	while (del!=0){
	ct1=t1;	ct2=t2;	ct3=t3; /*idovaltozok attoltese*/
	
	PORTD = v1+v2; /*bekapcs mind2*/
	while ( ct1 !=0) ct1--;		/*kozosen futnak*/
	PORTD = v2;	/*csak amelyik tobb*/
	while (ct2 !=0) ct2--;
	PORTD =0;
	while (ct3 !=0) ct3--; /*ures ido*/

	del--; 
	}

}/*fgv vege*/







void frekimer(){
tulcsordul=0;

CCP1IF=0; /* jelzobit torlese*/
if (value < 128 ) PORTD=1;		/*ures idok kitoltese*/
if (value == 128) PORTD=2;
if (value > 128 ) PORTD=4;
while (CCP1IF != 1) {}   /*elso konverzio megvarasa*/

CCP1IF=0; /* jelzobit torlese*/


while ( CCP1IF != 1){

						   /*varunk hogy vegezzen*/
		if ( TMR1IF ) {  /*ha tulcsordul*/

		TMR1IF = 0;      /*toroljuk*/
		tulcsordul++;	/*es szamoljuk a tulcsordulast*/

		}


}
freki=0;
ccphdebug=CCPR1H;			/*debug valtozok*/
ccpldebug=CCPR1L;
tulcsorddebug=tulcsordul;
freki=tulcsordul;
freki=freki << 8;
freki=freki+CCPR1H;
freki=freki << 8;
freki=freki+CCPR1L;
freki = freki & 0x00FFFFFF;

}/*frekimero fgv vege*/











void elagazas(void){    /*eldontjuk meliyk szakaszba  vagyunk, pwm ciklusvaltozok kiszamitasa*/
	
	if (value == 128) value++;

	if ( value  <= 128 ){

	zold = 255-2*value ;
	kek= 2*value ;
        
	if (zold > kek){
				v1=2;
				v2=1;
               t3=255-zold;
               t1=kek;
               t2=zold-kek;
                              }

	else{
				v1=1;
				v2=2;
	     t3= 255-kek;
	     t1=zold;
	     t2=kek-zold;
	     }

     }/*if <=128 vege*/
     
     
     
     
     
     	if ( value  > 128 ){
     	value2 = value-128;
     	
	kek = 255-2*value2 ;
	piros = 2*value2 ;

	if (kek  > piros){
				v1=4;
				v2=2;
               t3=255-kek;
               t1=piros;
               t2=kek-piros;
                              }

	else{
				v1=2;
				v2=4;
	     t3= 255-piros;
	     t1=kek;
	     t2=piros-kek;
	     }

     }/* if > 128 vege*/


 }/*fgv vege*/





/*char plusz=1;      /*csak a PWM modul probahoz*/

void ujertek2(void){

if (value == 255) plusz=-1;
if (value == 0) plusz=1;
if (del2==0){ del2=252; value=value+plusz;}
del2++;
}*/






void feldolgoz(void){

if (freki >= 0x03594E){ value=255; return;}

value=255-(freki/860);

}/*fg vege*/

void main()
{
value=0;

    
  
    init_io();
	init_ccp();


		while (1){    /*main loop*/

		frekimer();
		feldolgoz();  /*freki valtozot atkonvertaljuk valueba*/
		
		elagazas();
		pwm();

			}	/*main loop vege*/


}/*main vege*/
