Генератор одиночных импульсов на AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

Ну любой из входов МК к кнопке на массу к примеру,и также любой выход мк задействовать,там далее через резистор на базу npn транзистора эммитер которго на земле а в коллекторе с плюсом питания рэлюшка.
Реклама
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

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

with 	AVR, AVR.MCU, AVR.Wait;
use 	AVR, AVR.MCU;
	
procedure timer_3_min is 
		
	procedure Wait_ms is 
	new AVR.Wait.Generic_Busy_Wait_Milliseconds(Crystal_hertz => 1_000_000);
	
	button: boolean renames PINB_Bits(0);
	relay:	boolean renames PORTB_Bits(1);
	
begin	
	PORTB_Bits(0) := high;
	
	relay := low;

	DDRB_Bits := (0 => DD_Input, 1 => DD_Output, others => DD_Input);
	
	
	loop 
		if button=low then
			relay := high;
			wait_ms(60_000);
			wait_ms(60_000);
			wait_ms(60_000);
			relay := low;
		end if;
	end loop; 
	
end timer_3_min;
Вложения
timer_3_min.hex
(545 байт) 276 скачиваний
Реклама
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

Порты PB0 и PB1 использовать ? и фьюз-биты как выставить при прошивке?Генератор внутренний используется?подскажите
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

ks0, вроде сказал, что по умолчанию она на 1 МГц работает, так что если кварцевый резонатор не нужен, то ничего выставлять не надо.
artemx писал(а):Порты PB0 и PB1 использовать ?
Андрей СШ писал(а):   

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

button: boolean renames PINB_Bits(0);   
relay:   boolean renames PORTB_Bits(1);
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

С порта PB0 на массу не фиксированная кнопка(пуск) ?
И насколько точно время со внутреннем генератором?
Последний раз редактировалось artemx Вс июл 26, 2015 15:08:43, всего редактировалось 1 раз.
Реклама
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

Да, с внутренней подтяжкой.

Теоретически внутренний генератор имеет точность +/-30%, но на практике при комнатной температуре у меня получалось +/- 0,1%.
При необходимости его можно немного подстроить или припаять кварцевый (программа при этом не изменится).
Реклама
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

Спасибо.Будем колдовать
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

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

Всем спасибо за помощь!
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

Хорошо, что точность устраивает. Теперь главное не допускать сильных колебаний температуры и напряжения.

Пищалку добавить можно, но они бывают разные:

1. Электродинамическая - требует подавать с ног микроконтроллера переменку и подстраивать частоту для правильного звучания.
2. Пьезоэлектрическая - тоже самое, но ещё нужно высокое напряжение.
3. Зуммер со встроенным генератором - подключить проще всего.
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

Вот вот зумер самое то.
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

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

with 	AVR, AVR.MCU, AVR.Wait;
use 	AVR, AVR.MCU;
	
procedure timer_3_min is 
		
	procedure Wait_ms is 
	new AVR.Wait.Generic_Busy_Wait_Milliseconds(Crystal_hertz => 1_000_000);
	
	button: boolean renames PINB_Bits(0);
	relay:	boolean renames PORTB_Bits(1);
	beeper:	boolean renames PORTB_Bits(2);
	
begin	
	PORTB_Bits(0) := high;
	
	relay := low;
	beeper := low;

	DDRB_Bits := (0 => DD_Input, 1|2 => DD_Output, others => DD_Input);
		
	loop 
		if button=low then
			relay := high;
				wait_ms(60_000);
				wait_ms(60_000);
				wait_ms(40_000);
			beeper := high;
				wait_ms(1_000);
			beeper := low;
				wait_ms(19_000);
			relay := low;
		end if;
	end loop; 
	
end timer_3_min;
Вложения
timer_3_min.hex
(684 байт) 282 скачивания
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пт апр 06, 2012 18:11:44

Сообщение artemx »

Вообще планируется использовать девайс с питанием от авто акуммулятора,а от сетевого блока питания заметил не большую нестабильность,то есть бывает и полторв минуты и минута и восемь срабатывает,сеть блоку питания передергиваю и потом считает нормально по 3 минуты,видимо по сети мусор какой-то лезет,сварка,холодильники и прочее
Ответить

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