Страница 1 из 1
софтстарт
Добавлено: Вт май 24, 2022 20:08:47
Johnson1496
В связи со слабоумием прошу на коммерческой основе решить проблему с написанием кода для Tiny13
Суть проблемы:
1. При подаче питания на устройство на всех выходах устанавливается 0;
2. Включение. При кратковременной подаче на один из входов 1 (кнопка)
- подает на один из входов/выходов 1;
- через 30 сек появляется 1 на втором выходе;
- через 30 сек. Появляется 1 на третьем выходе;
при этом 1 первом и втором выходах не снимаются
3. Выключение. При кратковременной подаче на первый вход 1 (кнопка):
- на третьем выходе 1 сменяется на 0;
- через 30 сек появляется 0 на втором выходе;
- через 30 сек появляется 0 на первом выходе.
4. Если процесс включения не закончился и была нажата кнопка - начинается процесс выключения (обратный порядок из места когда нажата кнопка)
Программу хотелось бы на С с пояснениями для даунов.
Привести значения фьюзов, т.к. заводские установки множителя частоты бывают разными.
Цену вопроса обсуждаем в личке.
Re: софтстарт
Добавлено: Вт май 24, 2022 20:14:44
electroget
*Пошёл закупаться попкорном*
Re: софтстарт
Добавлено: Вт май 24, 2022 20:21:43
Ivanoff-iv
тут на форуме эту задачу уже решали я и самсусамыч (но оба на алгоритм билдере) поищи...
я завтра у себя гляну, может проекты сохранились...
Добавлено after 2 minutes 17 seconds:
даже название темы было похожим... чтото типа софтстарт для лампового усилителя...
Re: софтстарт
Добавлено: Ср май 25, 2022 11:39:07
BOB51
У практически всех МК при подаче питания на выводах устанавливается или 1 или Z-состояние.
Для получения начального 0 придется схемотехникой побаловаться - минимум инверторы на транзисторах добавить.

Re: софтстарт
Добавлено: Ср май 25, 2022 14:27:25
VNS
[uquote="Johnson1496",url="/forum/viewtopic.php?p=4235998#p4235998"]Цену вопроса обсуждаем в личке.[/uquote]
Нечего тут обсуждать… такой алгоритм не стоит и выеденного яйца.

Наверное Вы делаете усилители на продажу и потому готовы оплатить за данный алгоритм? Если так, то тогда потратьте ту сумму которую Вы готовы были заплатить, на тех кто в этом более нуждается (соседям, или кому ещё...). Ну а алгоритм работы по вашему описанию вот Вам в виде прошивки за спасибо:
Схема:
МК тактируется на заводских установках (1,2 МГц).
Алгоритм такой: При подаче питания на МК, на выходах 1, 2, 3 присутствует лог 0. При первом нажатии на кнопку устанавливается флаг включения и на выходе 1 появляется лог 1. Затем через 30 сек. проверяется флаг отключения. Если флаг отключения сброшен то включается выход 2 и тд. Если флаг отключения был поднят (была повторно нажата кнопка) во время отсчёта 30 сек., то выход 1 будет выключен. И далее по такому же принципу реализован последующий алгоритм. То есть в любой момент времени можно повторно нажать на кнопку и ход алгоритма переключится на противоположный. Включение сменится на выключение и наоборот. Чтобы визуально видеть какой режим (включение или отключение) отрабатывает, к выводу РВ3 (2) можно подключить светодиод через резистор катодом на общую шину. Светодиод светится – режим включения, погашен – режим отключения. Светодиод на схеме не указан.
Re: софтстарт
Добавлено: Ср май 25, 2022 14:32:40
Johnson1496
Проблема решена. Тему можно закрыть.
Re: софтстарт
Добавлено: Ср май 25, 2022 18:17:40
VNS
[uquote="BOB51",url="/forum/viewtopic.php?p=4236260#p4236260"]У практически всех МК при подаче питания на выводах устанавливается или 1 или Z-состояние.[/uquote]
Вы ошиблись. При подаче питания все входы/выходы принимают только Z состояние, то есть переключены на режим входа.
Для получения начального 0 придется схемотехникой побаловаться - минимум инверторы на транзисторах добавить.

И здесь ошиблись...

всего навсего нужно вначале алгоритма перевести необходимые выводы в режим выхода и тогда на этих выводах будет лог 0.
Добавлено after 3 hours 32 minutes 24 seconds:
В данной прошивке светодиод указывающий на режимы… работает иначе. В режиме отключения он не тухнет, а мигает, а вот когда режим завершится полностью, тогда он гаснет.
Re: софтстарт
Добавлено: Чт май 26, 2022 08:11:10
BOB51
Кроме АВРок есть и другие МК (та же mcs51 к примеру), так что не будьте столь категоричны.
Относительно момента перехода к нулевому статусу даже для АВРок:
сначала интервал предзапуска (задержка POR), затем несколько операций - хоть и мизерное время, но таки имеется.
Так что ежли важен "абсолютный нулевой интервал" придется таки поморочиться.
Альтернатива активным каскадам - подтягивающие к gnd резисторы.

Re: софтстарт
Добавлено: Чт май 26, 2022 09:28:36
musor
очень страный алгоритм....на мягкий пуск не похоже...
Re: софтстарт
Добавлено: Чт май 26, 2022 14:26:19
Demiurg
Ну, как-то так...
Спойлер
Код: Выделить всё
//==================
#include "proc_device.h"
//==================
//==================
// 1. При подаче питания на устройство на всех выходах устанавливается 0;
// 2. Включение. При кратковременной подаче на один из входов 1 (кнопка)
// - подает на один из входов/выходов 1;
// - через 30 сек появляется 1 на втором выходе;
// - через 30 сек. Появляется 1 на третьем выходе;
// при этом 1 первом и втором выходах не снимаются
// 3. Выключение. При кратковременной подаче на первый вход 1 (кнопка):
// - на третьем выходе 1 сменяется на 0;
// - через 30 сек появляется 0 на втором выходе;
// - через 30 сек появляется 0 на первом выходе.
// 4. Если процесс включения не закончился и была нажата кнопка - начинается процесс выключения (обратный порядок из места когда нажата кнопка)
//==================
//==================
void proc_device (void)
{
static u08 _proc_device;
switch (_proc_device)
{
case PROC_DEVICE_INIT:
io_init ();
_proc_device = PROC_DEVICE_WAIT_ON; // Установка состояния-режима ожидания включения
break;
case PROC_DEVICE_WAIT_ON: // Режим ожидания включения
if (Get_Event (EV_ID_KEY_PRESSED)) // Если есть событие нажатия кнопки
{
set_proc_soft_start_on (); // то установка состояния-режима включения
_proc_device = PROC_DEVICE_ON; // Установка состояния-режима включения
}
break;
case PROC_DEVICE_ON: // Режим включения
if (Get_Event (EV_ID_KEY_PRESSED)) // Если есть событие нажатия кнопки
{
set_proc_soft_start_off (); // то установка режима выключения
_proc_device = PROC_DEVICE_OFF; // Установка состояния-режима выключения
}
break;
case PROC_DEVICE_OFF: // Режим выключения
if (Get_Event (EV_ID_START_SOFT_OFF_FINISH)) // Если есть событие завершения режима выключения
{
_proc_device = PROC_DEVICE_WAIT_ON; // то установка состояния-режима ожидания включения
}
break;
default:
break;
}
proc_soft_start ();
proc_led_1 ();
}
//==================
//==================
void io_init (void)
{
set_bit (OUT_1_DDR, OUT_1); // Пин OUT_1 - выход
set_bit (OUT_1_DDR, OUT_2); // Пин OUT_2 - выход
set_bit (OUT_1_DDR, OUT_3); // Пин OUT_3 - выход
set_bit (LED_1_DDR, LED_1);
}
//==================
//==================
static u08 _proc_soft_start;
//------------------------------------------------------------------------
void set_proc_soft_start_on (void)
{
_proc_soft_start = 1;
}
//------------------------------------------------------------------------
void set_proc_soft_start_off (void)
{
_proc_soft_start = 4;
}
//------------------------------------------------------------------------
void proc_soft_start (void)
{
static soft_timer ST_PROC_SOFT_START;
switch (_proc_soft_start)
{
case 0: // Iddle
break;
case 1: // Режим включения
out_1_on ();
led_1_on ();
set_soft_timer (ST_PROC_SOFT_START, SOFT_START_TIME_1);
_proc_soft_start = 2;
break;
case 2:
if (handle_soft_timer (ST_PROC_SOFT_START))
{
out_2_on ();
set_soft_timer (ST_PROC_SOFT_START, SOFT_START_TIME_2);
_proc_soft_start = 3;
}
break;
case 3:
if (handle_soft_timer (ST_PROC_SOFT_START))
{
out_3_on ();
_proc_soft_start = 0; // Iddle
}
break;
case 4: // Режим выключения
out_3_off ();
set_proc_led_1_run ();
set_soft_timer (ST_PROC_SOFT_START, SOFT_START_TIME_1);
_proc_soft_start = 5;
break;
case 5:
if (handle_soft_timer (ST_PROC_SOFT_START))
{
out_2_off ();
set_soft_timer (ST_PROC_SOFT_START, SOFT_START_TIME_2);
_proc_soft_start = 6;
}
break;
case 6:
if (handle_soft_timer (ST_PROC_SOFT_START))
{
out_1_off ();
set_proc_led_1_off ();
Set_Event (EV_ID_START_SOFT_OFF_FINISH, USER_EVENT);
_proc_soft_start = 0; // Iddle
}
break;
default:
break;
}
}
//==================
//==================
static u08 _proc_led_1;
static soft_timer ST_PROC_LED_1;
void set_proc_led_1_run (void)
{
led_1_on (); // Так как в этом проекте урезанный таймер и нет немедленного исполненния, то включение светодиода.
_proc_led_1 = 1;
}
void set_proc_led_1_off (void)
{
led_1_off ();
_proc_led_1 = 0;
}
void proc_led_1 (void)
{
switch (_proc_led_1)
{
case 0:
break; // Idle.
case 1:
set_soft_timer (ST_PROC_LED_1, LED_BLINK_TIME);
_proc_led_1 = 2;
break;
case 2:
if (handle_soft_timer (ST_PROC_LED_1))
{
if (!check_bit(LED_1_PORT, LED_1))
led_1_on ();
else
led_1_off ();
set_soft_timer (ST_PROC_LED_1, LED_BLINK_TIME);
}
break;
}
}
//==================
//==================
void led_1_on (void)
{
__led_1_on ();
}
void led_1_off (void)
{
__led_1_off ();
}
void led_1_switch (void)
{
__led_1_switch ();
}
//==================
//==================
void out_1_on (void)
{
__out_1_on ();
}
void out_2_on (void)
{
__out_2_on ();
}
void out_3_on (void)
{
__out_3_on ();
}
//------------------------------------------------------------------------
void out_1_off (void)
{
__out_1_off ();
}
void out_2_off (void)
{
__out_2_off ();
}
void out_3_off (void)
{
__out_3_off ();
}
//==================
Upd.
Re: софтстарт
Добавлено: Чт май 26, 2022 16:10:52
BOB51
Похоже таки в том девайсе собака зарыта...
Оамповые схемы выходят на рабочий режим после полного прогрева катодов...
А сей процесс зависит от качества лампы, ее времени работы(старения), внешней температуры и теплообмена с окружающей средой.
Все параметры могут изменяться во времени - посему простыми задержками софтстарт обеспечить сложновато.
Надо иметь объективный показатель готовности устройства к работе(и/или его составляющих).
Возможно какой-то вариант датчика тока служебных сеток или еще чего...

Re: софтстарт
Добавлено: Чт май 26, 2022 16:28:11
Demiurg
Это распространенный проект. Повторяется. С вариациями
Суть софт старта в постепенном включении анодного напряжения.
Re: софтстарт
Добавлено: Чт май 26, 2022 16:29:38
OKF
[uquote="Demiurg",url="/forum/viewtopic.php?p=4236965#p4236965"]Ну, как-то так...[/uquote]
Ужос!( Или это наш метод - из простого делать сложное? Про стиль я молчу... Хедер не нужен.
Re: софтстарт
Добавлено: Чт май 26, 2022 16:35:07
Demiurg
Хде ужос ужос нах?! Все нормально. Выдохни.
Ты забыл. Мой принцип конструктор
Re: софтстарт
Добавлено: Чт май 26, 2022 19:43:02
ARV
Добавлено after 30 seconds:
конструктор

Re: софтстарт
Добавлено: Пт май 27, 2022 07:54:02
Demiurg
Опрос кнопки. Выполнение главного алгоритма. Светодиод индикатор работы. Описание работы устройства в теме.
Критикуя, предлагай.
Почему я так делаю? Потому что такой подход позволяет быстро создавать, редактировать и изменять проекты. Также такой подход позволяет создавать различной сложности алгоритмы. Я это уже писал не раз. Поэтому, закончим обсуждение моего подхода. Проходили уже.
Re: софтстарт
Добавлено: Пн май 30, 2022 20:53:16
gatavin320
От нечего делать.
