Asus P5B-VM SE странное поведение Smart Fan

Купили комп на сабжевой материнке, хотелось бы сделать его максимально тихим. Так вышло, что сборщик поставил туда процессорный вентилятор с трехконтактным разъемом, а на материнке - 4-х контактный (причем в силу дешевизны платы производитель сэкономил на транзисторе, который должен был бы управлять питанием вентилятора). Поскольку вентилятор мне в целом нравится, решил сделать переходничок - преобразователь ШИМ -> напряжение. В процессе постройки обратил внимание на то, что при включенном в BIOS SmartFan скважность на ШИМ контакте вентилятора устанавливается не более 50% (если скорость вращения пытаться выставлять в пределах 50 - 90%) при установке меньших значений скважность меняется соответствующим установленному значению образом. Причем, если скорость сначала установить <= 40%, а затем пытаться увеличить, то она останется ровно той же, что и была сколько ни перезагружайся. Если же выключить и включить питание, то все нормально.
Посему вопрос - это я что-то подпалил (там ШИМ-выход логический с уровнем 5В где-то, а я по незнанию думал, что открытый коллектор и пытался его к +12В резистором 8,2к подтянуть) или так оно и должно быть? BIOS - 1008.

переходничок - преобразователь ШИМ -> напряжение
По какой схеме, как подключали?

Аватар пользователя BSV

Продолжаем изыскания... Попытался поуправлять мультом (W83627DHG). Чтение регистра CPUFANOUT0 Output Value Select Register - Index 03 (Bank 0) дает ожидаемые результаты (похоже на то, что в БИОСе выставлено), а вот писАть туда не получается, остается прежнее значение. Может ли быть заблокирована запись по шине LPC? Как тогда БИОС туда значения пишет? Что нужно сделать для записи значения в указанный регистр? Cейчас я делаю так:

    outportb(lpc_base + LPC_IR, 0x03);
    outportb(lpc_base + LPC_DR, value);

lpc_base читается так:
const unsigned char EFIR = 0x2E;
const unsigned char EFDR = 0x2F;

unsigned char rd_mio_logdevreg(unsigned char logdev, unsigned char reg)
{
  unsigned char regval;
  outportb(EFIR, 0x87); // Enter extended
  outportb(EFIR, 0x87); //  function mode
  outportb(EFIR, 0x07); // Write logical device number index register
  outportb(EFDR, logdev); // Write logical device number
  outportb(EFIR, reg); 
  regval = inportb(EFDR);
  outportb(EFIR, 0xAA); // Exit extended function mode
  return(regval);
}
...
int main ()
{
  const unsigned char LPC_IR = 0x5;
  const unsigned char LPC_DR = 0x6;
  
  union CHIP_ID {
    unsigned short w;
    unsigned char b[2];
  } chip_id;

  unsigned short lpc_base;

...
  //Reading CR60 & CR61 of Device B
  chip_id.b[1] = rd_mio_logdevreg(0x0B, 0x60);
  chip_id.b[0] = rd_mio_logdevreg(0x0B, 0x61);
  printf("Logical device B Base address: %04Xh\n", chip_id.w);
  lpc_base = chip_id.w;
...
}

Второй закон Вышковского: Все можно наладить, если вертеть в руках достаточно долго.

Аватар пользователя Santa

А зачем Вы вычисляете базовые адреса для управления Environment Controller (295h, 296h)? Для тренировки? Они ж вроде как стандартные..
И работать нужно IMHO сразу через них. Как-то пытался поуправлять IT8716 прямо из БИОС, даже ISA модуль туда вставлял (контрольные точки и всё такое) но ничё не получилось и поэтому забросил сиё занятие.
PS Надо пошерстить даташит на _южник - может быть там возможна блокировка операции записи по LPC?

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей