Я бы на твоем месте крен допаял. Это самое простое.
Вот, смотри распиновку пика
3 3.3 Enabled, 2642 out, inv
4 PS on in,inv
...
15 V+12,+5 enabled out
То есть 3.3 инвертирован - 0 - запуск.
а +12 и +5 - не инвертирован.
У меня в программе логика такая:
Подаем VSB (если не было подано ранее) +5, +12.
Дожидаемся, пока не поднимется контрольный пин VSB.
Подаем +3.3.
Ждем пока не будет 3.3 корректным.
Если не произошло таймаута - поднимаем Power good и считаем, что питание подано.
Код:
V12Enable_Pin::Set();
while ( (timer<=100) && (!CheckVsbGood()) )
{
_delay_ms(1);
timer++;
}
if (timer<=100)
{
V33Enable_Pin::Clear();
while ( (timer<=200) && (!CheckV33()) )
{
_delay_ms(1);
timer++;
}
if (timer<=200)
{
PowerOk_Pin::Set();
PowerEnabled=true;
AmpTimer=1;
SetPwrLed(true);
AddLog(145,2);//окончание включения питания - успешно
}
else
{
AddLog(147,1);//окончание включения питания - не успешно - 3.3V
Ok=false;
}
}