Люблю Си...
прошу помощи компьютерщиков
Нужно сделать так, чтоб конденсатор разряжался через обмотку. Тут уж без транзистора не обойтись.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Реклама
- Сообщения: 540
- Зарегистрирован: Пт фев 20, 2009 12:26:26
Сделать так, чтобы релешка срабатывала второй раз, если у Вас нет опыта работы с электроникой будет достаточно сложно. Простым выходом из этой ситуации в Вашем случае будет взять реле с двумя группами контактов, одну группу оставить как есть, то есть коммутировать контакты питания материнской платы через конденсатор, вторую группу поставить на коммутацию блока питания материнской платы. Необходимо, чтобы при отключении реле отключался и блок питания. При таком подходе возможно придется несколько увеличить емкость исходного конденсатора, так как некоторое время после включения матплаты она не будет реагировать на состояние переключателя питания, однако конденсатор уже будет заряжаться. Думаю увеличения раза в два будет достаточно, а может увеличивать и не придется - экспериментируйте. При таком варианте ОС не будет размонтировать файловые системы, что чревато потерей данных, уменьшить эту вероятность можно с помощью использования журналируемых ФС(ntfs,ext3,reiser итп.) и максимального использования ФС, смонтированных только для чтения.GaPik писал(а):Yftul , спасибо за совет с кондером и реле! отлично работает, вот теперь бы придумать, как сделать так, чтоб при выключении питания магнитолы комп выключался, то есть еще раз чтоб релешка срабатывала?
ЗЫ: а теперь немного подумал и нашел верное, как мне кажется, решение для общего случая:)
Просто возьмите реле, с переключающей группой контактов. Общий контакт подведите к одному контакту питания матплаты, а переключающие контакты - через такие же конденсаторы, как в предыдущем случае - ко второму, разряжающие резисторы - обязательно. При включении реле будет подключаться один конденсатор, при выключении - второй
ЗЗЫ: Недостатком такой схемы пожалуй будет возможность рассинхронизации при сбоях питания во время включения-выключения, потому я бы таки вывел кнопку питания куда-нибудь, где ее случайно не нажмут, просто на всякий случай. Кроме того, для уменьшения вероятности сбоев добавил бы простой фильтр в цепь питания обмотки реле, состоящий из большой ёмкости(несколько тысяч мкФ, подобрать, т.к. зависит от типа реле) параллельно обмотке и обычного диода, не дающего возможности разряжаться конденсатору не в обмотку. В таком случае включение стартера и провалы напряжения по иным причинам не будут приводить к сбоям в работе схемы.
Вот что я вам посоветую. (Работает, уже проверил)
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Сообщения: 584
- Зарегистрирован: Чт янв 07, 2010 16:58:11
убери диодGaPik писал(а):Yftul , спасибо за совет с кондером и реле! отлично работает, вот теперь бы придумать, как сделать так, чтоб при выключении питания магнитолы комп выключался, то есть еще раз чтоб релешка срабатывала?
Сделай на простеньком микроконтроллере.
Если правильно составить программу, то работать будет чётко. )))
Вот кусок программы для AVR AT90S2313:
reset: ;Начало
ldi stack, RamEnd ;Инициализация стека
out SPL, stack
ldi temp, 0b00000000
out DDRB, temp
ldi temp, 0b11111111
out DDRD, temp
rjmp run11 ;Переход к первой п\программе опроса порта В
run1: ;Первый цикл
rcall on ;Вызов п\п одновибратора
run11: ;1я п\программа опроса порта PB
in temp, PinB ;Принять в РОН значение порта
cpi temp, 0b00000001 ;Сравнить и проверить на наличие напряжения
breq run2 ;Если есть напряжение, то ко второму циклу
rjmp run11 ;Иначе в начало 1ой п\программы опроса
run2: ;Второй цикл
rcall on ;Вызов одновибратора
run22: ;2я п\программа опроса порта В
in temp, PinB ;Принять в РОН значение порта
cpi temp, 0b00000000 ;Сравнить и проверить на наличие напряжения
breq run1 ;Если нет напряжения, то к первому циклу
rjmp run22 ;Иначе в начало 2ой п\программы опроса
on: ;ОДНОВИБРАТОР
sbi PortD, 1 ;Установка бита на выводе PD1
rcall delay ;Вызов задержки
cbi PortD, 1 ;Сброс бита на выводе PD1
ret ;Выход из одновибратора
delay: ;ЗАДЕРЖКА
dec temp ;декремент значения
brne delay ;Если не ноль, то повторить
dec temp1
brne delay
ret ;Выход из задержки
При подаче напряжения на вывод PB1 на выводе PD1 проскакивает импульс,
длину которого можно задать в программе.
При снятии этого-же напряжения с вывода PB1 на выводе PD1 опять-же проскакивает
такой-же импульс.
Регулировать длину импульса можно по разному: подбирая одну из
стандартных тактовых частот МК, увеличением количества циклов с декрементом,
задействованием встроенного таймера МК, но программа будет выглядеть уже по другому.
Если правильно составить программу, то работать будет чётко. )))
Вот кусок программы для AVR AT90S2313:
reset: ;Начало
ldi stack, RamEnd ;Инициализация стека
out SPL, stack
ldi temp, 0b00000000
out DDRB, temp
ldi temp, 0b11111111
out DDRD, temp
rjmp run11 ;Переход к первой п\программе опроса порта В
run1: ;Первый цикл
rcall on ;Вызов п\п одновибратора
run11: ;1я п\программа опроса порта PB
in temp, PinB ;Принять в РОН значение порта
cpi temp, 0b00000001 ;Сравнить и проверить на наличие напряжения
breq run2 ;Если есть напряжение, то ко второму циклу
rjmp run11 ;Иначе в начало 1ой п\программы опроса
run2: ;Второй цикл
rcall on ;Вызов одновибратора
run22: ;2я п\программа опроса порта В
in temp, PinB ;Принять в РОН значение порта
cpi temp, 0b00000000 ;Сравнить и проверить на наличие напряжения
breq run1 ;Если нет напряжения, то к первому циклу
rjmp run22 ;Иначе в начало 2ой п\программы опроса
on: ;ОДНОВИБРАТОР
sbi PortD, 1 ;Установка бита на выводе PD1
rcall delay ;Вызов задержки
cbi PortD, 1 ;Сброс бита на выводе PD1
ret ;Выход из одновибратора
delay: ;ЗАДЕРЖКА
dec temp ;декремент значения
brne delay ;Если не ноль, то повторить
dec temp1
brne delay
ret ;Выход из задержки
При подаче напряжения на вывод PB1 на выводе PD1 проскакивает импульс,
длину которого можно задать в программе.
При снятии этого-же напряжения с вывода PB1 на выводе PD1 опять-же проскакивает
такой-же импульс.
Регулировать длину импульса можно по разному: подбирая одну из
стандартных тактовых частот МК, увеличением количества циклов с декрементом,
задействованием встроенного таймера МК, но программа будет выглядеть уже по другому.
- Реклама

