Страница 1 из 2

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

Добавлено: Сб июл 25, 2015 18:09:15
artemx
Ребята кто сможет помочь?Нужно продумать узел возможно на микроконтроллере с такой задачей:при подаче на вход к примеру пика или AVR логического нуля, на выходе с задержкой на 5 секунд необходимо получить три импульса положительной полярности с длительностью каждого примерно секунду,планируется управление транзисторным ключем и рэле.

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

Добавлено: Сб июл 25, 2015 18:25:33
ks0
Прошить МК сами сможете?

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

Добавлено: Сб июл 25, 2015 18:29:01
artemx
Прошить то смогу,программаторы есть,но вот в программировании дуб.

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

Добавлено: Сб июл 25, 2015 18:55:05
smacorp
artemx писал(а):при подаче на вход к примеру пика или AVR логического нуля, на выходе с задержкой на 5 секунд необходимо получить три импульса положительной полярности с длительностью каждого примерно секунду
Объясните точнее что требуется на входе, какая модель AVR используется, какая частота тактирования, какие выводы использовать на вход и выход. В общем, точное ТЗ и, желательно, схема. Сама же прошивка очень примитивна. По-крайней мере, видится такой по текущему описанию.

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

Добавлено: Сб июл 25, 2015 19:10:07
artemx
Чтобы при смене с единички на ноль по входу контроллер с задержкой на 5 секунд выдавал три импульса на выходе,можно атмега-8,PIC16F628а или подобные,такт любой необходимый,выводы использовать любые необходимыеглавное чтобы работало

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

Добавлено: Сб июл 25, 2015 19:48:24
ks0
Ну допустим начнем так

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

#include <avr/io.h>
#include <util/delay.h>

#define PIN_INPUT	PINB
#define B_INPUT		(1<<PB0)
#define DDR_OUTPUT	DDRB
#define PORT_OUTPUT	PORTB
#define B_OUTPUT	(1<<PB1)

void main()
{
	DDR_OUTPUT |= B_OUTPUT;
	while(1)
	{
		while(PIN_INPUT & B_INPUT);
		_delay_ms(5000);
		PORT_OUTPUT |= B_OUTPUT;
		_delay_ms(1000);
		PORT_OUTPUT &= ~B_OUTPUT;
		_delay_ms(1000);
		PORT_OUTPUT |= B_OUTPUT;
		_delay_ms(1000);
		PORT_OUTPUT &= ~B_OUTPUT;
		_delay_ms(1000);
		PORT_OUTPUT |= B_OUTPUT;
		_delay_ms(1000);
		PORT_OUTPUT &= ~B_OUTPUT;		
	}
}


Это Атмега8, на частоте 1МГц, fuse-биты по-умолчанию. Порты PB0 вход и PB1 выход.
Пока коллективный разум высказывает свое мнение, сразу следующий вопрос:
1. Какая задержка между тремя импульсами по 1 сек? Здесь пока стоит тоже 1 сек.

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

Добавлено: Сб июл 25, 2015 19:56:40
smacorp
ks0 писал(а):Это Атмега8, на частоте 1МГц, fuse-биты по-умолчанию. Порты PB0 вход и PB1 выход. Пока коллективный разум высказывает свое мнение...
Да что высказывать. Похоже, что ТС даже точное ТЗ не может сформулировать, вряд ли он поймёт, что такое PB.

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

Добавлено: Сб июл 25, 2015 20:01:34
artemx
Точнее длительность импульса 0.5 сек,и между импульсами тоже 0.5сек

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

Добавлено: Вс июл 26, 2015 10:10:22
ks0
Ну 0,5 так 0,5, забирайте

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

Добавлено: Вс июл 26, 2015 10:19:34
artemx
Cпасибо!И еще добавлю,управление будет идти с выхода другой меги которая управляет транзисторным ключем и рэлюшкой.

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

Добавлено: Вс июл 26, 2015 11:35:23
Андрей СШ
Мега8 под такую задачу маловато будет, надо как минимум Мега32U4, а лучше XMega.

Ещё было бы неплохо уточнить:
- что нужно делать если сигнал пришёл повторно во время исполнения предыдущей последовательности;
- требуется ли фильтрация входного сигнала, а то вдруг он идёт поперёк сварочного цеха.

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

Добавлено: Вс июл 26, 2015 12:42:04
artemx
Мне товарищ притащил таймер обратного отсчета от какого-то оборудования,выполненый на жки индикаторе 8#2 winstar и меге-8, со временем отключения до 24 часов.И попросил каким-нибудь образом зафиксировать его жестко на 3 минуты,но исходников нет да и сам мк не читается видимо закрыт.
Изначально прицип таймера такой; при подаче питания таймер входит в рабочий режим и устанавливаем кнопками необходимое время отключения и жмем кнопку пуск при этом включается реле управляемое одним из выходов меги через транзистор,по истечении этого времени рэле отключается и таймер производит автосброс показаний в нули на табло,и далее также набираем время отключения и жмем пуск и цикл повторяется,получается разовый таймер.
Идея: взять сигнал управления с базы ключевого транзистора который управляет рэлюшкой и завести его на новый мк и как только появляется лог 0 то новый мк тупо выдает 3 импульса на выходе на аналогичный ключ на трназисторе и мелкую рэлюшку которая в свою очередь законтачивает кнопку отсчета минут в плюс три раза(3мин),а далее нажимаем кнопку пуск и цикл повторяется.

Другими словами,что-бы не нужно было постоянно выставлять кнопкой эти три минуты.

Cоглашусь что это изобретение велосипеда который уже давно изобретен,но надо сделать.

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

Добавлено: Вс июл 26, 2015 13:06:55
Андрей СШ
Кажется проще на этой же меге8 с нуля сделать такой таймер и выкинуть оригинал. Тем более если время фиксированное, то можно и экран выкинуть. И программа у него будет проще чем у генератора импульсов.

Конечно самый эстетичный вариант - выпаять оригинальный микроконтроллер и впаять свой, но тут программировать дольше.

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

Добавлено: Вс июл 26, 2015 13:09:05
НАПАЛМ
А начальная итерация как должна инициироваться, ручным выбором, или сразу после включения питания?
Контроллер используйте максимально плюшевый (mega8=из пушки по воробьям)

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

Добавлено: Вс июл 26, 2015 13:11:08
artemx
Мега на панельке.И в программировании я не смыслю.

НАПАЛМ
Cразу после подачи питания,к тому же пару мк валяются без дела именно атмега-8

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

Добавлено: Вс июл 26, 2015 13:21:07
Андрей СШ
ks0 выложил программу, чтобы из неё сделать трёхминутный таймер нужно удалить лишние переключения и изменить время в на 3 минуты.

#include <avr/io.h>
#include <util/delay.h>

#define PIN_INPUT PINB
#define B_INPUT (1<<PB0)
#define DDR_OUTPUT DDRB
#define PORT_OUTPUT PORTB
#define B_OUTPUT (1<<PB1)

void main()
{
DDR_OUTPUT |= B_OUTPUT;
while(1)
{
while(PIN_INPUT & B_INPUT);
PORT_OUTPUT |= B_OUTPUT; //включить выходное реле
_delay_ms(60000);//одна минута
_delay_ms(60000);//вторая
_delay_ms(60000);//третяя
PORT_OUTPUT &= ~B_OUTPUT; //выключить
}
}

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

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

Добавлено: Вс июл 26, 2015 13:33:55
artemx
А вообще функиональность таймера нужна такая если к примеру собрать новый: включил питание,таймер установился в режим ожидания нажатия кнопки пуск,кратковременно нажимаем включается рэле и пошел обратный счет с 3 минут до нуля затем отключается и отключает управляющее рэле и снова ожидает нажатия кнопки пуск.

Думаю действительно собрать новый таймер

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

Добавлено: Вс июл 26, 2015 13:37:22
Андрей СШ
Программа выше именно это и делает.

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

Добавлено: Вс июл 26, 2015 13:45:08
artemx
То что PB0 и PB1 вход и выход понятно,но мне бы сразу HEX,я не шарю в компиляциях.А если бы еще и индикатор 8на2 строк прикрутить то вообще супер было бы

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

Добавлено: Вс июл 26, 2015 13:53:16
Андрей СШ
Ну индикатор прикрутить с удалённой отладкой через форум это надо быть джедаем (они ещё и распиновкой все отличаются). Поэтому и предлагаю тающую полоску из светодиодов.

Схему нарисуйте как кнопка подключена и реле (светодиоды опционально) я напишу программу.