/* Проек OpenVoron
ЧП Ворон
ЧП Магетэкс
для датчика освещения
---------------------------------------
Автор:
Геннадий Чернов, Днепропетровск 2011
Gennady Chernov, Dnepropetrovsk 2011
---------------------------------------
Устройство ---------->>> 
версия v-1.0
---------------------------------------
программная среда
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.83
MPLAB 8.83
*/
#include <htc.h>				// для настройки под выбранный контроллер
//----------------------------------------------------
							
// Контроллер PIC10F222, тактирование - внутрений генератор с частотой 8MHZ.

//---------------------------------------------------------------------------
// конфигурирование контроллера
__CONFIG(
 IOSCFS_8MHZ 	& 				// Тактовый генаратор на 8 MHz
 MCPU_OFF		&				// Pull-up резистор отключен
 WDTE_OFF		&				// Сторожевой таймер включен
 CP_ON			&				// Защита кода включена
 MCLRE_ON);						// Вывод GP3/MCLR настроен на функцию MCLR
//---------------------------------------------------------------------------

// Описание переменных
//bit

//int

char ADCIZ,p_humip,p_humi;
char porog;
// определения
#define		LED		GP1			// порт индикации 
#define		OUT		GP2			// выход управления 

#define _XTAL_FREQ 	8000000		// для __delay


// сама программа
void main(void)
{
// Настройка контроллера
	CLRWDT(); 					//сброс сторожевого таймера +++++++++++++++++++++- 
// загрузку калибровочной константы си берет на себя
// обнуление порта (правда Си тоже это делает)
	GPIO=0;
// настройка регистра OPTION
	OPTION=0b11001111;
//			 |||||+++--- PS<2:0>: настройка предделителя
//			 ||||+------ PSA: пределитель подключен к сторожевому таймеру
//			 |||+------- T0SE: счет по фронту импульса на входе T0CKI
//			 ||+-------- T0CS: вход таймера подключен к внутренему генератору
//			 |+--------- GPPU: подтягивающие резисторы на GP0, GP1, GP3 отключены
//           +---------- GPWU: побуждение по входам GP0, GP1, GP3 отключено

//  настройка портов ввода вывода
  TRISGPIO=0b11111001;
//			 |||||||+--- GP0: вход
//			 ||||||+---- GP1: выход
//			 |||||+----- GP2: выход
//			 ||||+------ GP3: вход
//			 ++++------- неиспользуются

// настройка АЦП
	ADCON0=0b01000001;
//			 |||||||+--- ADON: АЦП включен
//			 ||||||+---- GO/DONE: статус и запуск конвертирования
//			 ||||++----- CHS<1:0>: АЦП подключен к входу GP0/AN0
//			 ||++------- неиспользуются
//			 |+--------- ANS0: вывод GP0/AN0 настроен как аналоговый
//			 +---------- ANS1: вывод GP1/AN1 настроен как цифровой

	CLRWDT(); 					//сброс сторожевого таймера +++++++++++++++++++++- 
	LED=1;
//---------------------------------------------------------------------------


	
	while(1)
	{
	CLRWDT(); 					//сброс сторожевого таймера +++++++++++++++++++++- 

	//---------------------------		
// начать измерение
	GO=1;	
	while (GO) continue; 			// 
// сосчитать значение АЦП
		ADCIZ=ADRES; 				// чтение значение АЦП 

	// усреднение измерения 		// 
		ADCIZ=ADCIZ/10; 			// 
		p_humi=p_humi-p_humi/10; 	// 
		p_humi=p_humi+ADCIZ; 		// 

//		p_humi=ADCIZ;
	//---------------------------

// ФИЛЬТР  "накапливающий интегратор"
		if(p_humi^p_humip && porog)porog--;
		else 
		{
			p_humip=p_humi;
			porog=3;	// реакция
		}
		
	//---------------------------

		if(p_humip>130)	// порог чуствительности, должна быть выше 125
		{
			LED=0;
			OUT=1;
			__delay_ms(5000); // время "горения"
		}
		else
		{
			LED=1;
			OUT=0;
		}

	}
	
}//end programm===============================================================