Помогите с алгоритмом)

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Т.е. светодиод "water_pump" не должен гореть вначале ? Или должен, но должен погаснуть как импульсы пойдут ?
Нормально опишите алгоритм :)
Контактная информация:
Реклама
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Сообщение Sel4 »

Код: Выделить всё


b=key2; //а было key1
if(b!=c) count1=500000;
if(count1){
  count1--;
  pump_on;
}
else{
  pump_off;
}
c=b;
Последний раз редактировалось Sel4 Вт май 12, 2015 22:52:35, всего редактировалось 1 раз.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вы можете сказать, что должно быть со светодиодом "water_pump" в начале программы, и что с ним должно происходить когда есть импульсы и когда их нет ?
Контактная информация:
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Сообщение Sel4 »

ПРи нормальной работе в данном тесте не должен гореть. А если импульсы не пойдут, то должен загореться. Но это так , для наглядности. В место его в программе заведу разрешение или запрет на работу )
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Держите вариант.
Pump_achtung.rar
(58.75 КБ) 102 скачивания
При нормальной работе (импульсы идут) светодиод не горит (также вначале при старте). Как импульсы пропадают (либо их изначально не было), через 500000 тиков счётчика он загорается.

Код :
Спойлер

Код: Выделить всё

#define key1 (bit_is_set(PINC, PC0))

#define TIME_OUT        500000L

//**********************************************************************************************************************//
void pump(void){
static struct{unsigned start:1; unsigned cur:1; unsigned pre:1; unsigned long count;}mPomp={0,0,0,TIME_OUT};

if(!mPomp.start){mPomp.start=1; mPomp.pre = key1;}

mPomp.cur=key1;
if(mPomp.cur!=mPomp.pre) mPomp.count=TIME_OUT;
if(mPomp.count){
  mPomp.count--;
  pump_off;
}
else{
  pump_on;
}
mPomp.pre=mPomp.cur;
}
//**********************************************************************************************************************//

//**********************************************************************************************************************//
int main(void)
{

................
................

while (1)    {

pump();

}
}
//**********************************************************************************************************************//
Контактная информация:
Реклама
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Сообщение Sel4 »

Alex, вы не будете против, если я к вам обращусь за помщью в причесывании кода программы? ))
А то там такое, ужос)) Это такой мой первый проект на МК. Но работает оно , в автомобиле стоит, по сигналке запускается и останавливается. Планируется туда rs232 , чтобы на дешевый андроид выводить параметры, даже rc-05 Bluetooth модуль прикупил )) Нужна будет помощь в том, чтобы некоторые части кода в функции оформить.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вы лучше сюда обращайтесь, здесь не только я один нахожусь :)
У меня, в основном, нет свободного времени для помощи. Это сегодня я коротаю вечерок на форумах, с кружечкой пива :)
Контактная информация:
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Сообщение Sel4 »

Спасибо большое )) Пойду я спать, пожалуй, на работу с утра )) до связи.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Я последнее время всякие переключения отлавливаю следующим образом.

Код: Выделить всё

#define key1  PINC.0 
unsigned char mode=PIN_NULL; 

//---------------------------
if(count>500000){		//Период опроса
	count=0;			//
	switch(mode){
//---------- состояние на выводе 0-----------
		case PIN_NULL:{
			if(key1==1){		//На выводе поймали 1 значит произошёл переход с 0 в 1
				mode=PIN_ONE;	//Переключаемся в "единичное" состояние  
			}
			//=================
			//Тут можно запускать обработчик "нулевого" состояния      
			break;
		}
//--------Текущее состояние на выводе 1-------------
		case PIN_ONE:{	
			if(key1==0){		//На выводе поймали 0 значит произошёл переход с 0 в 1
				mode=PIN_NULL;	//Переключаемся в "нулевое" состояние  
			}
			//=================
			//Тут можно запускать обработчик "единичного" состояния      
			break;
		}	
	}
}
Ответить

Вернуться в «AVR»