#include <avr/io.h>
#include <util/delay.h>
 
//-------------------------------------
void m_delay_10ms(unsigned long val) {
//-------------------------------------
           while(val--) _delay_ms(10);
}
 
//-------------------------------------
int main(void) {
//---------------ADC-------------------

//Előosztás beállítása 128-ra
	ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

//Referencia feszültség beállítása a tápfeszültségre
	ADMUX &=~(1<<REFS2);
	ADMUX &=~(1<<REFS1);
	ADMUX &=~(1<<REFS0);

// Analóg csatorna,kiválasztása
	ADMUX &=~(1<<MUX3);
	ADMUX &=~(1<<MUX2);
	ADMUX &=~(1<<MUX1);
	ADMUX &=~(1<<MUX0);

// Automatikus indíthatóság engedélyezése ADC0 (PB5)

	ADCSRA |=(1<<ADATE);

//Szabadon futó mód
	ADCSRB &=~(1<<ADTS2);
	ADCSRB &=~(1<<ADTS1);
	ADCSRB &=~(1<<ADTS0);

//Mérési adat feltolása a felső byte-ba
	ADMUX |=(1<<ADLAR);

//ADC engedélyezése
	ADCSRA |=(1<<ADEN);


//ADC indítása
	ADCSRA |=(1<<ADSC);



//---------------PWM-------------------
 
	DDRB = (1<<PINB0); //PB0 kimenet
 
           //timer inicializálás PWM módra
	GTCCR = 0x00; //nincs TSM
	TCCR0A = (1<<COM0A1)
                  | (1<<COM0A0)    //01 = set on comp. match
                  | (0<<WGM02)
                  | (1<<WGM01)
                  | (1<<WGM00);    //011 = Fast PWM mód
           TCCR0B = (0<<CS02)
                  | (1<<CS01)
                  | (1<<CS00);        //011 = clk/64 előosztás
 
           TCNT0 = 0;    //countert nullázzuk
           OCR0A = 0;  //komparálási szintet nullázzuk
 
           while(1) {

		   		while ( ADCSRA & (1<<ADIF)){
 
				   OCR0A = ADCH; //addig növelem amíg nem max
 
               m_delay_10ms(1);


           	ADCSRA |=(1<<ADSC);
									};
		   			}
           return 0;
}
