задержка включения и выключения на 8-й меге

Модератор: boogyman

Ответить
Аватара пользователя
scorpionlion
Любитель
Сообщения: 17
Зарегистрирован: 07 янв 2015, 23:39
Откуда: Россия Евпатория
Контактная информация:

задержка включения и выключения на 8-й меге

#1

Сообщение scorpionlion »

изучаю азы программирования, научился включать и мигать светодиодом. теперь попытался сделать задержку включения и выключения для трех независимых "каналов". но что-то не так, нет стабильности.

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

#include <avr/io.h>
/***функция задержки***/
void wait1 (void)
{
TCNT1 = 0;
while (TCNT1 < 7812){};
}
int main(void)
{
DDRC = 0x00; // Порт C вход
PORTC = 0xFF; // подключаем внутренние подтяг. резисторы
DDRD = 0xFF; // Порт D выход
PORTD = 0x00; // Лог. 0 на выходе

// Настройка таймера
TCCR1A = 0x00;
TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10); //выбор коэффициента предделителя clk/1024

while(1)
{
//управление 1
if(PINC&(1 << PC0)) // Проверяем наличие сигнала PC0
{
PORTD &= ~(1 << PD0); // нагрузка отключена
wait1(); // Задержка
}
else
{
PORTD |= (1 << PD0); // нагрузка включена PD0
//wait1(); // Задержка
}
//управление 2
if(PINC&(1 << PC1)) // Проверяем наличие сигнала PC1
{
PORTD &= ~(1 << PD1); // нагрузка отключена
wait1(); // Задержка
}
else
{
PORTD |= (1 << PD1); // нагрузка включена PD1
//wait1(); // Задержка
}
//управление 3
if(PINC&(1 << PC2)) // Проверяем наличие сигнала PC2
{
PORTD &= ~(1 << PD2); // нагрузка отключена
wait1(); // Задержка
}
else
{
PORTD |= (1 << PD2); // нагрузка включена PD2
wait1(); // Задержка
}
}
} 
использую Atmel Studio 6
Можно ли еще как-то организовать задержку включения и выключения в 3-х каналах?
Последний раз редактировалось scorpionlion 11 янв 2015, 18:56, всего редактировалось 1 раз.
автоматика для систем отопления
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: задержка включения и выключения на 8-й меге

#2

Сообщение AntonChip »

Использование прерываний по таймеру поможет
Аватара пользователя
scorpionlion
Любитель
Сообщения: 17
Зарегистрирован: 07 янв 2015, 23:39
Откуда: Россия Евпатория
Контактная информация:

Re: задержка включения и выключения на 8-й меге

#3

Сообщение scorpionlion »

там я не могу разобраться, для одного канала слепил, мож и неправильно. не хватает мозгов пока еще.

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

/***Использование прерывания по таймеру***/
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <util/delay.h> 

/***Процедура обработки прерывания по Таймеру 1***/

ISR (TIMER1_COMPA_vect)
{
	// Обработчик прерывания таймера 1 по совпадению A
	//управление насосом
	if(PINC&(1 << PC0)) // Проверяем наличие сигнала PC0
	{
	PORTD &= ~(1 << PD0); // нагрузка отключена
	}
	else
	{
	PORTD |= (1 << PD0); // нагрузка включена PD0
	}
	//управление вентилятором
	if(PINC&(1 << PC1)) // Проверяем наличие сигнала PC1
	{
	PORTD &= ~(1 << PD1); // нагрузка отключена
	}
	else
	{
	PORTD |= (1 << PD1); // нагрузка включена PD1
	}
	
	//управление газовым клапаном
	if(PINC&(1 << PC2)) // Проверяем наличие сигнала PC2
	{
	PORTD &= ~(1 << PD2); // нагрузка отключена
	}
	else
	{
	PORTD |= (1 << PD2); // нагрузка включена PD2
	}
	}

int main(void)
{
	
	/***настраиваем порты ввода-вывода***/
	
	DDRC = 0xF0; // Порт C вход
	PORTC = 0xF; // подключаем внутренние подтяг. резисторы
	DDRD = 0xF; // Порт D выход
	PORTD = 0xF0; // Лог. 0 на выходе
	
	/***Настраиваем таймер***/
	
	TCCR1A = 0x00;
	TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10)|(1 << WGM12); //предделитель clk/1024, режим таймера СТС
	TCNT1 = 0x00;
	// Верхняя граница счета. Диапазон от 0 до 65535.
	OCR1A = 3906;                                   // Частота прерываний A будет = Fclk/(N*(1+OCR1A))
	TIMSK |= (1<<OCIE1A);                    // Разрешить прерывание по совпадению A
	//TIMSK |= (1<<OCIE1B);                    // Разрешить прерывание по совпадению B
	//TIMSK |= (1<<TOIE1);                      // Разрешить прерывание по переполнению
	
	
	sei(); // Разрешение прерываний
	
while (1)
{}
}
автоматика для систем отопления
Аватара пользователя
scorpionlion
Любитель
Сообщения: 17
Зарегистрирован: 07 янв 2015, 23:39
Откуда: Россия Евпатория
Контактная информация:

Re: задержка включения и выключения на 8-й меге

#4

Сообщение scorpionlion »

ну вот и следующий шаг сделал, все получилось, код подправил
автоматика для систем отопления
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: задержка включения и выключения на 8-й меге

#5

Сообщение AntonChip »

scorpionlion писал(а):ну вот и следующий шаг сделал, все получилось, код подправил
Да, все правильно
Ответить