
#define ADC_VREF_TYPE 0x40  	//nastaveni reference 5V a kondenzator na AREF
 
#include <avr/io.h>  			// definice periferii procesoru
#include <avr/interrupt.h>		// definice funkci pro rizeni preruseni
 
#include "ks0108.h"				//knihovna ovladani LCD
#include "arial_bold_14.h"		//font pisma
#include "tucne.h"
#include "touch.h"
  
//--------------------------------------------- >> GLOBALNI PROMENNE <<
  
unsigned char j=0;				//promenna na rizeni casu vypisu

	 
//============================================= >> HLAVNI FUNKCE MAIN << 

int main(void)    
{   

//--------------------------------------------- >> LOKALNI PROMENNE <<

	unsigned char vypis_T[4], vypis=0;


//--------------------------------------------- >> I/O PORTY <<  

	DDRA |= ( 1 << DDA3 ) | ( 1 << DDA4 ) | ( 1 << DDA5 ) | ( 1 << DDA6 ) | ( 1 << DDA7 );
    	//nastaveni pinu 3 az 7 portu A jako vystupni, temito piny se adresuji jednotlive sloupce
	DDRB = 0xFF; 	//vystupni - ridici signaly pro LCD
	DDRC = 0xFF;	//vystupni - datove signaly pro LCD

	PORTA &= ~ ( 1 << PORTA3 );
	PORTA &= ~ ( 1 << PORTA4 );
	PORTA &= ~ ( 1 << PORTA5 );
	PORTA &= ~ ( 1 << PORTA6 );
	PORTA &= ~ ( 1 << PORTA7 );

		//nastaveni vytupnich pinu portu A (3 az 7) na 0

//--------------------------------------------- >> 16b T/C 1 <<
	
	// nastaveno mode 12 - CTC: pri rovnosti s ICR1 dojde k smazani casovace
	TCCR1B	|= ( 1 << WGM13 ) | ( 1 << WGM12 );
	TCCR1A &= ~ ( 1 << WGM11 );
	TCCR1A &= ~ ( 1 << WGM10 );

	ICR1	= 46875;				// hranice do ktere se ma citat
	
	TCCR1B	|= ( 1 << CS11 ) | ( 1 << CS10 ); // preddelicka clk / 64
	TCCR1B &= ~ ( 1 << CS12 );

	TIMSK	|= ( 1 << TICIE1 );		// povoleni preruseni od casovace

	sei(); 	// povoleni globalniho preruseni

//--------------------------------------------- >> OSETRENI LCD <<
  
	for(volatile uint16_t i=0; i<50000; i++);	// chvilka cekani na start LCD
	
	ks0108Init(0);								//inicializace LCD

	ks0108SelectFont(tucne, ks0108ReadFontData, BLACK);		//vyber fontu
	
//--------------------------------------------- >> NASTAVENI A/D PREVODNIKU <<  
	   
    ADMUX = ADC_VREF_TYPE;   	//nastaveni reference 5V a kondenzator na AREF 
								//nastaveni REFS1 REFS0 na kombinaci 01 to znaci referenci 5V a kondenzator na AREF
    ADCSRA = (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0);   //povoluje A/D prevodnik (ADEN)
		//ADPS2 az ADPS0 (111) definuje delici pomer XTAL, nastaven na 1/128 
  
//--------------------------------------------- >> VLASTNI PROGRAM <<  
 
    for(;;)
    	{   
		

		if (j==2)		//cekani dokud 2x nepretece casovac = dobe 1s
			{
			ks0108ClearScreen();		//mazani LCD	
	
			vypis=F_stlaceno();	//zkopirovani hodnoty promenne stlaceno do pr. vypis
		
			j=0;		//nulovani promenne na rizani casu vypisu
			}

		ks0108GotoXY(45,25);		//souradnice vypisu na LCD
		itoa(vypis, vypis_T, 10);	//pretypovani cisla na retezec
		ks0108Puts(vypis_T);		//vypis stisknuteho radku	   
    	}   
} 

//============================================= >> OBSLUHA PRERUSENI <<

SIGNAL ( SIG_INPUT_CAPTURE1 )	//preruseni od casovace (kazdych 500ms)
  {
	j++;		//citani poctu preruseni
  }
