
/******************************************************************************
 Title:			Test
------------------------------------------------------------------------------				   
 Author:		IMi  
 Date:     		
 Software:		Eclipse & AVR GCC 
 Project name:	PWM & sleep test
 File name:		test.c
------------------------------------------------------------------------------ 
 Hardware:		ATtiny45
 MCU clock:		1MHz
 Fuse bits:		0xXX high | 0xXX low
 Lock bits:
------------------------------------------------------------------------------ 
 Description:	
 
 
 
 
*******************************************************************************/


/*############################=- INCLUDES -=####################*/
#include "avr/io.h"
#include "user/AVR035.h"		//bit manipulációk :)
#include "user/delay_x.h"
#include "avr/interrupt.h"
#include <avr/sleep.h>

/*############################=- DEFINES  -=####################*/
#define F_CPU 1000000UL

#define h_ido 3000


volatile uint8_t flag=0;			//jelzőbitek


#define led1 PORTB,2
#define led2 PORTB,1

void ms_delay(uint16_t val)	{	//várakozás függvény 1ms lépéssel
	while(val--) _delay_ms(1);
	}
void us_delay(uint16_t val)	{	//várakozás függvény 1us lépéssel
	while(val--) _delay_us(1);
	}

void pwm_init (void)
	{
	GTCCR = 0x00;						//TSM 0
	DDRB |= (1<<PINB1) ;				//PB1 kimenet
	TCCR0A = (1<<COM0B1) | (0<<COM0B0)	// set comp. match
			| (1<<WGM01) | (1<<WGM00);	// fázis helyes PWM
	TCCR0B =  (0<<WGM02)				//fázis helyes PWM
			| (0<<CS02) | (1<<CS01) | (1<<CS00);	// előosztás = clk/64
	TCNT0 = 0x00;
	OCR0B = 0x00;
	}

void pice_init (void)
	{
	GIMSK |= (1<<PCIE);		//Pin változás megszakítás engedélyezés
	PCMSK = 0b0000001;		//PB0 pin változására
	sei();					//globális megszakítás engedélyezése
	}

void L_BE (void)			//Kimenet PWM-el be
	{
	uint16_t a;
	uint8_t d1;
	a=h_ido/255;
	for (d1=0;d1<255;d1++)
		{
		OCR0B=d1;
		ms_delay(a);
		}
	OCR0B=255;
	}

void L_KI (void)			//Kimenete PWM-el ki
	{
	uint16_t a;
	uint8_t d1;
	a=h_ido/255;
	for (d1=255;d1>0;d1--)
		{
		OCR0B=d1;
		ms_delay(a);
		}
	OCR0B=0;
	}


ISR(PCINT0_vect)
	{
	GIFR |= ( 1 << PCIF );    // clear interrupt flag
	flag++;
	return;
	}

int main(void)
	//
	{
	ms_delay (200);
	DDRB = 0b00100110;		//Be és ki menetek bállítása
	PORTB |= (1<<PB0);		//Felhúzó ellenállások bekapcsolása
	set_sleep_mode (SLEEP_MODE_PWR_DOWN);
	pwm_init();
	pice_init();

	for(;;)
	  {
		if (flag==1)
			{
			L_BE();
			_delay_s(4);
			L_KI();
			flag=0;
			}
		ms_delay(20);
		C_FLIPBIT (led1);	//debug led
		sleep_mode();
	  } // end for
	} //end main

