Генератор одиночных импульсов на AVR
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Ребята кто сможет помочь?Нужно продумать узел возможно на микроконтроллере с такой задачей:при подаче на вход к примеру пика или AVR логического нуля, на выходе с задержкой на 5 секунд необходимо получить три импульса положительной полярности с длительностью каждого примерно секунду,планируется управление транзисторным ключем и рэле.
- Реклама
- Сообщения: 238
- Зарегистрирован: Чт фев 28, 2013 14:16:10
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Прошить то смогу,программаторы есть,но вот в программировании дуб.
Объясните точнее что требуется на входе, какая модель AVR используется, какая частота тактирования, какие выводы использовать на вход и выход. В общем, точное ТЗ и, желательно, схема. Сама же прошивка очень примитивна. По-крайней мере, видится такой по текущему описанию.artemx писал(а):при подаче на вход к примеру пика или AVR логического нуля, на выходе с задержкой на 5 секунд необходимо получить три импульса положительной полярности с длительностью каждого примерно секунду
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Чтобы при смене с единички на ноль по входу контроллер с задержкой на 5 секунд выдавал три импульса на выходе,можно атмега-8,PIC16F628а или подобные,такт любой необходимый,выводы использовать любые необходимыеглавное чтобы работало
- Реклама
- Сообщения: 238
- Зарегистрирован: Чт фев 28, 2013 14:16:10
Ну допустим начнем так
Это Атмега8, на частоте 1МГц, fuse-биты по-умолчанию. Порты PB0 вход и PB1 выход.
Пока коллективный разум высказывает свое мнение, сразу следующий вопрос:
1. Какая задержка между тремя импульсами по 1 сек? Здесь пока стоит тоже 1 сек.
Код: Выделить всё
#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;
}
}
Пока коллективный разум высказывает свое мнение, сразу следующий вопрос:
1. Какая задержка между тремя импульсами по 1 сек? Здесь пока стоит тоже 1 сек.
Да что высказывать. Похоже, что ТС даже точное ТЗ не может сформулировать, вряд ли он поймёт, что такое PB.ks0 писал(а):Это Атмега8, на частоте 1МГц, fuse-биты по-умолчанию. Порты PB0 вход и PB1 выход. Пока коллективный разум высказывает свое мнение...
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Точнее длительность импульса 0.5 сек,и между импульсами тоже 0.5сек
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Cпасибо!И еще добавлю,управление будет идти с выхода другой меги которая управляет транзисторным ключем и рэлюшкой.
Мега8 под такую задачу маловато будет, надо как минимум Мега32U4, а лучше XMega.
Ещё было бы неплохо уточнить:
- что нужно делать если сигнал пришёл повторно во время исполнения предыдущей последовательности;
- требуется ли фильтрация входного сигнала, а то вдруг он идёт поперёк сварочного цеха.
Ещё было бы неплохо уточнить:
- что нужно делать если сигнал пришёл повторно во время исполнения предыдущей последовательности;
- требуется ли фильтрация входного сигнала, а то вдруг он идёт поперёк сварочного цеха.
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Мне товарищ притащил таймер обратного отсчета от какого-то оборудования,выполненый на жки индикаторе 8#2 winstar и меге-8, со временем отключения до 24 часов.И попросил каким-нибудь образом зафиксировать его жестко на 3 минуты,но исходников нет да и сам мк не читается видимо закрыт.
Изначально прицип таймера такой; при подаче питания таймер входит в рабочий режим и устанавливаем кнопками необходимое время отключения и жмем кнопку пуск при этом включается реле управляемое одним из выходов меги через транзистор,по истечении этого времени рэле отключается и таймер производит автосброс показаний в нули на табло,и далее также набираем время отключения и жмем пуск и цикл повторяется,получается разовый таймер.
Идея: взять сигнал управления с базы ключевого транзистора который управляет рэлюшкой и завести его на новый мк и как только появляется лог 0 то новый мк тупо выдает 3 импульса на выходе на аналогичный ключ на трназисторе и мелкую рэлюшку которая в свою очередь законтачивает кнопку отсчета минут в плюс три раза(3мин),а далее нажимаем кнопку пуск и цикл повторяется.
Другими словами,что-бы не нужно было постоянно выставлять кнопкой эти три минуты.
Cоглашусь что это изобретение велосипеда который уже давно изобретен,но надо сделать.
Изначально прицип таймера такой; при подаче питания таймер входит в рабочий режим и устанавливаем кнопками необходимое время отключения и жмем кнопку пуск при этом включается реле управляемое одним из выходов меги через транзистор,по истечении этого времени рэле отключается и таймер производит автосброс показаний в нули на табло,и далее также набираем время отключения и жмем пуск и цикл повторяется,получается разовый таймер.
Идея: взять сигнал управления с базы ключевого транзистора который управляет рэлюшкой и завести его на новый мк и как только появляется лог 0 то новый мк тупо выдает 3 импульса на выходе на аналогичный ключ на трназисторе и мелкую рэлюшку которая в свою очередь законтачивает кнопку отсчета минут в плюс три раза(3мин),а далее нажимаем кнопку пуск и цикл повторяется.
Другими словами,что-бы не нужно было постоянно выставлять кнопкой эти три минуты.
Cоглашусь что это изобретение велосипеда который уже давно изобретен,но надо сделать.
Кажется проще на этой же меге8 с нуля сделать такой таймер и выкинуть оригинал. Тем более если время фиксированное, то можно и экран выкинуть. И программа у него будет проще чем у генератора импульсов.
Конечно самый эстетичный вариант - выпаять оригинальный микроконтроллер и впаять свой, но тут программировать дольше.
Конечно самый эстетичный вариант - выпаять оригинальный микроконтроллер и впаять свой, но тут программировать дольше.
Последний раз редактировалось Андрей СШ Вс июл 26, 2015 13:09:20, всего редактировалось 1 раз.
А начальная итерация как должна инициироваться, ручным выбором, или сразу после включения питания?
Контроллер используйте максимально плюшевый (mega8=из пушки по воробьям)
Контроллер используйте максимально плюшевый (mega8=из пушки по воробьям)
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
Мега на панельке.И в программировании я не смыслю.
НАПАЛМ
Cразу после подачи питания,к тому же пару мк валяются без дела именно атмега-8
НАПАЛМ
Cразу после подачи питания,к тому же пару мк валяются без дела именно атмега-8
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; //выключить
}
}
Даже проще чем оригинал, можно несколько светодиодов добавить для визуализации отсчёта.
#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; //выключить
}
}
Даже проще чем оригинал, можно несколько светодиодов добавить для визуализации отсчёта.
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
А вообще функиональность таймера нужна такая если к примеру собрать новый: включил питание,таймер установился в режим ожидания нажатия кнопки пуск,кратковременно нажимаем включается рэле и пошел обратный счет с 3 минут до нуля затем отключается и отключает управляющее рэле и снова ожидает нажатия кнопки пуск.
Думаю действительно собрать новый таймер
Думаю действительно собрать новый таймер
Последний раз редактировалось artemx Вс июл 26, 2015 13:39:59, всего редактировалось 1 раз.
- Сообщения: 26
- Зарегистрирован: Пт апр 06, 2012 18:11:44
То что PB0 и PB1 вход и выход понятно,но мне бы сразу HEX,я не шарю в компиляциях.А если бы еще и индикатор 8на2 строк прикрутить то вообще супер было бы
Ну индикатор прикрутить с удалённой отладкой через форум это надо быть джедаем (они ещё и распиновкой все отличаются). Поэтому и предлагаю тающую полоску из светодиодов.
Схему нарисуйте как кнопка подключена и реле (светодиоды опционально) я напишу программу.
Схему нарисуйте как кнопка подключена и реле (светодиоды опционально) я напишу программу.


