//********************************************************************************
//
// Файл			: dc_timer.h
//
// Автор		: DruidCat
//
// МК			: ATmega8 и ATmega328P
//
// Toolchain	: WinAVR|AVRToolchain
//
// Назначение	: Настройка таймера Т/С0, работает в микросекундах (1/1000000)
//
// Дата			: 24.02.2014
//
// Версия		: 1.1
//
//********************************************************************************

#ifndef DC_TIMER0_H_
#define DC_TIMER0_H_

#include <stdlib.h>				//size_t

/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////В Ы Б О Р   М К/////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
//#define	TC0_ATmega8	1		/*Раскомментировать нужный МК, ненужный  МК закомментировать*/
#define TC0_ATmega328P	1		/*Раскомментировать нужный МК, ненужный  МК закомментировать*/

/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////Н А С Т Р О Й К И   Т А Й М Е Р А   Т / С 0///////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
#define	TC0_MKS			100		/*Время в Микросекундах(1/1000000) (Если при компиляции ошибка csuchTimer0, выбирайте меньшее колличествто микросекунд)*/
#define TC0_F_CPU		20000000UL/*Частота процессора*/
//Варианты TC0_F_CPU: 20000000 18432000	16000000	14745600	11059200	8000000	7372800	4000000	3686400	2000000	1843200	1000000

/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////Ф У Н К Ц И И   Т А Й М Е Р А   Т / С 0/////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
void	initTimer0		(void);	//Иннициализация таймера T/C0.
size_t	getTimer0		(void);	//Получение значения счетчика таймера (от 0 до 65535)
void	setTimer0zero	(void);	//Функция установки счетчика таймера T/C0 в 0

#endif							/* DC_TIMER0_H_ */

/*
ИНСТРУКЦИЯ:

````````````````````````````````````````````````````````````````````````````````````````
dc_timer0.h

#define	TC0_MKS			100		//Время в Микросекундах(1/1000000)
````````````````````````````````````````````````````````````````````````````````````````
main.c

#include <avr/io.h>
#include "dc_timer0.h"			//Подгружаем библиотеку таймера Т/С0
int main (void)					//Главная функция программы
{
	DDRD = 0xFF;				//Порт D выход
	initTimer0();				//Иннициализируем таймер Т/С0
	while (1)					//Бесконечный цикл
    {
    	if (getTimer0() > 10000)//Если счетчик таймера Т/С0 > 10000 (TC0_MKS 100(мс) * 10000 = 1 секунда)
    	{
    		PORTD ^= 0xFF;		//Инверсируем биты порта D
    		setTimer0zero();	//Обнуляем счетчик
    	}
    }
}
*/
