Страница 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
Андрей СШ
Ну индикатор прикрутить с удалённой отладкой через форум это надо быть джедаем (они ещё и распиновкой все отличаются). Поэтому и предлагаю тающую полоску из светодиодов.
Схему нарисуйте как кнопка подключена и реле (светодиоды опционально) я напишу программу.