Софтстарт для усилителя

Обсуждаем контроллеры компании Atmel.
Johnson1496
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Сб май 02, 2015 10:06:21

Софтстарт для усилителя

Сообщение Johnson1496 »

Добрый день, уважаемые коты и котята.
Прошу помощи, так как сильно хромаю в пользовании микроконтроллерами в народном хозяйстве. Суть проблемы:
- имеется усилитель на прямонакальных лампах по нынешним временам стоящих не по-детски, поэтому нужно некое устройство на Тинни13 (много их у меня), которое:
1. При подаче питания на устройство на всех выходах устанавливается 0;
2. При подаче на один из входов 1 от механического включателя (желательна защита от дребезга):
- подает на один из входов/выходов 1;
- через 5 сек появляется 1 на втором выходе;
- через 30 сек появляется 1 на третьем выходе;
- через 30 сек. Появляется 1 на четвертом выходе;
при этом 1 с остальных выходах не снимаются
3. При снятии 1 с входа/выхода (выкл):
- на четвертом выходе 1 сменяется на 0;
- через 30 сек появляется 0 на третьем выходе;
- через 30 сек появляется 0 на втором выходе.

Программу хотелось бы на ассемблере или С с пояснениями для даунов
Реклама
Аватара пользователя
Core-X
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Софтстарт для усилителч

Сообщение Core-X »

1% из 99% что Ваша хотелка будет реализована в данном разделе форума.
P.S. с AVR-ами не дружу :)
Для связи email: risctronix собака gmail.com
Реклама
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Софтстарт для усилителч

Сообщение NStorm »

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

#define F_CPU 1200000

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

uint8_t i;

void delay_s(uint8_t s) {
    while (s) {
        s--;
        _delay_ms(1000);
    }
}

int main() {
    DDRB = (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4);

    while(1) {
        if (PINB & (1 << PB0))
            i++;
        else
            i = 0;

        if (i >= 250) {
                PORTB |= 1 << PB1;
                delay_s(5);
                PORTB |= 1 << PB2;
                delay_s(30);
                PORTB |= 1 << PB3;
                delay_s(30);
                PORTB |= 1 << PB4;
                while (PINB & (1 << PB0));
                PORTB &= ~(1 << PB4);
                delay_s(30);
                PORTB &= ~(1 << PB3);
                delay_s(30);
                PORTB &= ~(1 << PB2);
        }
    }
}
Johnson1496
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Сб май 02, 2015 10:06:21

Re: Софтстарт для усилителч

Сообщение Johnson1496 »

Спасибо откликнувшимся! На выходных постараюсь отмакетировать
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Софтстарт для усилителя

Сообщение akl »

Как вариант. На ассемблере. :)
TINY13_CYCLE.rar
(1.5 КБ) 188 скачиваний
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Софтстарт для усилителя

Сообщение pyzhman »

[uquote="Johnson1496",url="/forum/viewtopic.php?p=3817693#p3817693"]...сильно хромаю в пользовании микроконтроллерами...[/uquote]
NStorm писал(а):

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

#define F_CPU 1200000
...
Фьюзы оставить заводские.
Docendo discimus
Реклама
Johnson1496
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Сб май 02, 2015 10:06:21

Re: Софтстарт для усилителя

Сообщение Johnson1496 »

akl,
Спасибо президенту, этот вариант проверю точно в ближайшее время.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Софтстарт для усилителя

Сообщение Ivanoff-iv »

а как поступать, если выключил раньше окончания процесса включения?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6308
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Софтстарт для усилителя

Сообщение Jack_A »

Софтстарт - это я понимаю, а выключение тоже ступенчато - это не излишне ? Или не ?
Изображение
Самсусамыч

Re: Софтстарт для усилителя

Сообщение Самсусамыч »

[uquote="Johnson1496",url="/forum/viewtopic.php?p=3817693#p3817693"]поэтому нужно некое устройство на Тинни13 (много их у меня), которое:[/uquote]
Фьюзы прошивать не нужно, если МК новые (тактируется на заводских установках).
Прошивка:
Tiny13.hex
Схема:
1.png
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Софтстарт для усилителя

Сообщение Demiurg »

[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3818459#p3818459"]...[/uquote]
Исходники выложить постеснялись?
Самсусамыч

Re: Софтстарт для усилителя

Сообщение Самсусамыч »

Я пишу на АВ (Algorithm Builder). На форуме единицы кто понимает данный язык программирования. :) Если ТС пожелает размещу и исходник.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Софтстарт для усилителя

Сообщение Demiurg »

ТС, в последнем пункте что происходит с первым выходом?
Последний раз редактировалось Demiurg Чт мар 26, 2020 12:50:35, всего редактировалось 1 раз.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Софтстарт для усилителя

Сообщение NStorm »

Прокомментирую свой прошлый код. Реализовывал его тупо дословно со слов ТС.
Спойлер

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

#define F_CPU 1200000 // Поясним прошивке, что частота МК 1.2МГц (настройки по умолчанию)

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

uint8_t i; // Переменная для счетчкика

void delay_s(uint8_t s) { // Функция задержки на s секунд. Циклично по 1000 мс будет считать, т.к. функция задержки в мс имеет свои ограничения
    while (s) {
        s--;
        _delay_ms(1000);
    }
}

int main() {
    DDRB = (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4); // Переведем порты PB1-4 в режим выхода

    while(1) { // Начинаем бесконечный цикл
// Антидребезг
        if (PINB & (1 << PB0)) // Если на входе PB0 лог. 1, то увеличиваем значение i на 1.
            i++;
        else // иначе сбрасываем i до 0.
            i = 0;

// Если антидребезг выше натикал 250 (это будет порядка 1-3 мс, достаточно чтобы исключить дребезг), то начинаем цикл "включения"
        if (i >= 250) {
                PORTB |= 1 << PB1; // Переводим порт PB1 в лог1.
                delay_s(5); // Ждем 5 с
                PORTB |= 1 << PB2; // Переводим порт PB2 в лог1.
                delay_s(30); // Ждем 30 с
                PORTB |= 1 << PB3; // Переводим порт PB3 в лог1.
                delay_s(30); // Ждем 30 с
                PORTB |= 1 << PB4; // Переводим порт PB4 в лог1.
                while (PINB & (1 << PB0)); // Ждем тут бесконечно пока на входе PB0 лог1

// Если дошли сюда, значит на входе PB0 появилась лог0, т.е. начинаем выключение.

                PORTB &= ~(1 << PB4); // Переводим порт PB4 в лог0.
                delay_s(30); // Ждем 30 с
                PORTB &= ~(1 << PB3); // Переводим порт PB3 в лог0.
                delay_s(30); // Ждем 30 с
                PORTB &= ~(1 << PB2); // Переводим порт PB2 в лог0.
        }
    }
}
Никаких ситуаций, кроме "в лоб" описанной ТС не предусмотрено. Если включить и пока идет включение выключить - включение продолжится до конца и только потом пойдет выключение.

Готовый HEX:
Спойлер:1000000009C016C015C014C013C012C011C010C062
:100010000FC00EC011241FBECFE9CDBF20E0A0E667
:10002000B0E001C01D92A136B207E1F710D033C095
:10003000E7CF882359F081502FE739EA93E0215028
:1000400030409040E1F700C00000F3CF08958EE10A
:1000500087BBB09B06C0809160008F5F809360007B
:1000600002C010926000809160008A3F90F3C19AB4
:1000700085E0DFDFC29A8EE1DCDFC39A8EE1D9DF53
:10008000C49AB099FECFC4988EE1D3DFC3988EE1B5
:0A009000D0DFC298DECFF894FFCF56
:00000001FF
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Софтстарт для усилителя

Сообщение Demiurg »

Как-то так:
SOFT_START.rar
(293.86 КБ) 148 скачиваний
Последний раз редактировалось Demiurg Чт мар 26, 2020 14:33:33, всего редактировалось 1 раз.
Самсусамыч

Re: Софтстарт для усилителя

Сообщение Самсусамыч »

[uquote="NStorm",url="/forum/viewtopic.php?p=3818632#p3818632"]Прокомментирую свой прошлый код. Реализовывал его тупо дословно со слов ТС.[/uquote]
У Вас в алгоритме четыре вывода для управления. У ТС заявлено три. Значит один лишний. ИМХО, в данном алгоритме реализовывать алгоритм антидребезга контактов смысла нет. :) Дребезг контактов при данном алгоритме ни на что не влияет.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Софтстарт для усилителя

Сообщение Demiurg »

В начальном сообщение чётко прописано. Значит пусть автор чётко выскажется. Ждём его.
Самсусамыч

Re: Софтстарт для усилителя

Сообщение Самсусамыч »

Значит пусть автор чётко выскажется
О чём? :)
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Софтстарт для усилителя

Сообщение Demiurg »

[uquote="Johnson1496",url="/forum/viewtopic.php?p=3817693#p3817693"]1. При подаче питания на устройство на всех выходах устанавливается 0;
2. При подаче на один из входов 1 от механического включателя (желательна защита от дребезга):
- подает на один из входов/выходов 1;
- через 5 сек появляется 1 на втором выходе;
- через 30 сек появляется 1 на третьем выходе;
- через 30 сек. Появляется 1 на четвертом выходе;
при этом 1 с остальных выходах не снимаются
3. При снятии 1 с входа/выхода (выкл):
- на четвертом выходе 1 сменяется на 0;
- через 30 сек появляется 0 на третьем выходе;
- через 30 сек появляется 0 на втором выходе.[/uquote]
[uquote="Самсусамыч",url="/forum/viewtopic.php?p=3818682#p3818682"]
Значит пусть автор чётко выскажется
О чём? :)[/uquote]
Все-таки один вход-выход под сомнением. Вот и ждем уточнения. Пусть автор четко выскажется. Входов - столько-то, выходов - столько-то. Тогда не будет непоняток.
Самсусамыч

Re: Софтстарт для усилителя

Сообщение Самсусамыч »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3818683#p3818683"]Все-таки один вход-выход под сомнением.[/uquote]
На мой взгляд всё очевидно: :))
Здесь указано на какой уровень реагировать.
2. При подаче на один из входов 1 от механического включателя (желательна защита от дребезга):

А это последовательность алгоритма при появлении на входе лог 1
Коианда:
- подает на один из входов/выходов 1; - это вход для "механического включателя"
Действие:
- через 5 сек появляется 1 на втором выходе; - (Первый выход)
- через 30 сек появляется 1 на третьем выходе; - (Второй выход)
- через 30 сек. Появляется 1 на четвертом выходе; - (Третий выход)

и тд.
Последний раз редактировалось Самсусамыч Чт мар 26, 2020 14:25:01, всего редактировалось 1 раз.
Ответить

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