S12 mit geänderter Lüftersteuerung in NHC möglich?

BitKiller

Active member
Themenstarter
Registriert
24 März 2008
Beiträge
2.952
Hallo,
ich weiss, dass ich mit dem S12 (noch) alleine dastehe, aber Aufgrund der Ähnlichkeit zum S10(e) hoffe ich doch auf Eure Unterstützung... ;)
Zugegeben, ich bin kein NHC- und Script-Profi, aber ich habe es wenigstens geschafft, dass NHC ein geändertes S10(e) bzw. N500 Profil anzeigt.
Es stammt aus dem eeepcnews.de Forum.
Nur kommt leider die Meldung "ERROR - ACPI Control System problem detected."

Das Profil wird nicht umgesetzt: Der Lüfter startet bei 45Grad und schaltet sich nicht mehr ab (=Werkseinstellung).
Die CPU-Temperatur liegt dann bei laufenden Lüfter zwischen 39 und 44Grad, die HD bei 35Grad.
Kann jemand von Euch einen Fehler entdecken?

Lenovo.xml:
Code:
<?xml version="1.0"?>
<Lenovo>
<Model name="20021,2959" location="SYSTEM" class="S12" file="S12.cs" />
</Lenovo>
S12.cs:
Code:
//
//  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  N o t e b o o k   H a r d w a r e   C o n t r o l   A C P I   D L L
//  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  Example class only
//
//  It is recommended to use a c# editor which supports c# syntax highlighting
//  and supports the directive #region and #endregion. With these directives
//  the source code is much more readable and it is easy to hide or show block 
//  of code (for example you can use the c# editor "SharpDevelop 2.0").
//
public static class LENOVO
{

    #region Computer model : class S12
    //
    public static class S12
    {

        public static class FAN
        {
            // Info
            public const string description = "Notebook FAN Control";
            public const bool default_enable = false;
            public const int icon = 2;

            // Condition variables (optional)
            public static bool initialisation = false;
            public static bool enable = false;

            #region Value class for QUIET_FAN_CONTROL : class QUIET_FAN_CONTROL
            //
            public static class QUIET_FAN_CONTROL
            {
                // Properties of the value class
                public const string description = "Quiet fan control";
                public const bool nhc_visible = true; // true -> value is visible in NHC
                // Value
                public static int quiet_fan_control = 0; // It must have the same name as the class
                // (case are ignored)
                public const string unit = ""; // unit of value
                // With this class it is possible to change the value in NHC on runtime
                public static class NHC_WRITE
                {
                    public const bool nhc_write = true; // true -> it is possible to change the
                    // value in NHC
                    public const int nhc_minimum_value = 0; // the minimum value
                    public const int nhc_maximum_value = 1; // the maximum value
                    public const int nhc_default_value = 1; // the default value
                }
            }
            //
            #endregion

            #region Value class for CPU_FAN_ON_TEMP : class CPU_FAN_ON_TEMP
            //
            public static class CPU_FAN_ON_TEMP
            {
                // Properties of the value class
                public const string description = "CPU FAN ON Temperature";
                public const bool nhc_visible = true; // true -> value is visible in NHC
                // Value
                public static int cpu_fan_on_temp = 0; // It must have the same name as the class
                // (case are ignored)
                public const string unit = "°C"; // unit of value
                // With this class it is possible to change the value in NHC on runtime
                public static class NHC_WRITE
                {
                    public const bool nhc_write = true; // true -> it is possible to change the
                    // value in NHC
                    public const int nhc_minimum_value = 40; // the minimum value
                    public const int nhc_maximum_value = 65; // the maximum value
                    public const int nhc_default_value = 55; // the default value
                }
            }
            //
            #endregion

            #region Value class for CPU_FAN_OFF_TEMP : class CPU_FAN_OFF_TEMP
            //
            public static class CPU_FAN_OFF_TEMP
            {
                // Properties of the value class
                public const string description = "CPU FAN OFF Temperature";
                public const bool nhc_visible = true; // true -> value is visible in NHC
                // Value
                public static int cpu_fan_off_temp = 0; // It must have the same name as the class
                // (case are ignored)
                public const string unit = "°C"; // unit of value
                // With this class it is possible to change the value in NHC on runtime
                public static class NHC_WRITE
                {
                    public const bool nhc_write = true; // true -> it is possible to change the
                    // value in NHC
                    public const int nhc_minimum_value = 20; // the minimum value
                    public const int nhc_maximum_value = 60; // the maximum value
                    public const int nhc_default_value = 45; // the default value
                }
            }
            //
            #endregion

            #region Public definition: CPU temperatures
            //
            public static int cpu_temperature = 0;
            //
            #endregion

            #region FAN Control highspeed refresh function : highspeed_refresh()

            private const int TEMP_HYSTERESIS = 5;  // If the temperature is equal or higher
            // as (FAN_ON_TEMP.fan_on_temp +
            // TEMP_HYSTERESIS) then the FAN Control
            // is given back to the system

            private const int TEMP_HYSTERESIS_QUIET_FAN = 8;    // Temperature hysteresis for quiet fan control

            private const int TEMP_CPU_FAN_LOW_SPEED = 52;  // Temperature for low speed FAN operation
            private const int TEMP_CPU_FAN_OFF = 35;        // Temperature for FAN off

            private static bool nhc_fan_control_disabled = true;    // NHC fan control disabled (FAN is controlled by BIOS because high temperature)
            private static bool nhc_fan_on = false;                 // Actual state of the FAN
            private static bool quiet_fan_state = false;            // For quiet fan control
            private static bool quiet_fan_running = false;
            private static bool quiet_fan_control_active = false;   // Quiet control active flag
            private static int quiet_fan_control_read_temp_counter = 0;

            private static int temp_cpu = 0;
            private static int written_temp_cpu = 0;
            private static bool cpu_temperature_updated = false;

            public const int highspeed_refresh_interval = 50;
            public static bool highspeed_refresh()
            {
                // 1. Get CPU  temperatures
                if (!quiet_fan_control_active || (quiet_fan_control_read_temp_counter == 0))
                {
                    // If quiet control active do not read temperatures on every refresh to save CPU cycles
                    if (ACPI.FIELD.ReadByOffset("_SB.PCI0.LPCB.EC0.ERAM", ref temp_cpu, 0x51, 8) == false) { return false; }
                }

                // 2. Save the CPU temperatures (only if the CPU temperature is not the same
                // as the last written CPU temperature)
                if (quiet_fan_control_active)
                {
                    // Wait for both CPU temperatures
                    if (quiet_fan_control_read_temp_counter == 0)
                    {
                        if (temp_cpu != written_temp_cpu)
                        {
                            cpu_temperature = temp_cpu;
                            cpu_temperature_updated = true;
                        }

                        if (cpu_temperature_updated)
                        {
                            quiet_fan_control_read_temp_counter = 20;   // 20 * 50 ms = 2000 ms read temperatures period in quiet fan control
                        }
                    }
                    else
                    {
                        cpu_temperature_updated = false;
                    }
                }
                else
                {
                    if (temp_cpu != written_temp_cpu)
                    {
                        cpu_temperature = temp_cpu;
                    }
                }
                quiet_fan_control_active = false;

                // Check high temperatures
                if (nhc_fan_control_disabled || (cpu_temperature > CPU_FAN_ON_TEMP.cpu_fan_on_temp + TEMP_HYSTERESIS))
                {
                    // Too high temperature, disable NHC fan control and allow the BIOS firmware to do the dirty colling work
                    if (cpu_temperature <= CPU_FAN_OFF_TEMP.cpu_fan_off_temp)
                    {
                        // Colled (thanks BIOS :-)), NHC controls FAN
                        nhc_fan_control_disabled = false;
                    }
                    else
                    {
                        nhc_fan_control_disabled = true;
                    }
                    return true;
                }

                // Check normal temperature operation range
                if (nhc_fan_on)
                {
                    if (cpu_temperature <= CPU_FAN_OFF_TEMP.cpu_fan_off_temp)
                    {
                        // Colled, switch off fan
                        nhc_fan_on = false;
                    }
                }
                else
                {
                    if (cpu_temperature >= CPU_FAN_ON_TEMP.cpu_fan_on_temp)
                    {
                        // Too high temperature, switch on fan
                        nhc_fan_on = true;
                    }
                }

                // FAN hardware control
                if (nhc_fan_on)
                {
                    // Run FAN at low speed
                    if (temp_cpu != TEMP_CPU_FAN_LOW_SPEED)
                    {
                        if (ACPI.FIELD.WriteByOffset("_SB.PCI0.LPCB.EC0.ERAM", TEMP_CPU_FAN_LOW_SPEED, 0x51, 8) == false) { return false; }
                        written_temp_cpu = TEMP_CPU_FAN_LOW_SPEED;
                    }
                }
                else
                {
                    // QUIET fan control
                    if (cpu_temperature >= CPU_FAN_OFF_TEMP.cpu_fan_off_temp)
                    {
                        quiet_fan_running = true;
                    }

                    if (cpu_temperature <= CPU_FAN_OFF_TEMP.cpu_fan_off_temp - 3)
                    {
                        quiet_fan_running = false;
                    }

                    if ((QUIET_FAN_CONTROL.quiet_fan_control == 1) && quiet_fan_running)
                    {
                        // Change periodically ON/OFF states of the fan. It causes low speed fan operation
                        quiet_fan_control_active = true;
                        if (!quiet_fan_state)
                        {
                            quiet_fan_state = true;
                            if (ACPI.FIELD.WriteByOffset("_SB.PCI0.LPCB.EC0.ERAM", TEMP_CPU_FAN_OFF, 0x51, 8) == false) { return false; }
                            written_temp_cpu = TEMP_CPU_FAN_OFF;
                        }
                        else
                        {
                            quiet_fan_state = false;
                            if (ACPI.FIELD.WriteByOffset("_SB.PCI0.LPCB.EC0.ERAM", TEMP_CPU_FAN_LOW_SPEED, 0x51, 8) == false) { return false; }
                            written_temp_cpu = TEMP_CPU_FAN_LOW_SPEED;
                        }
                        if (quiet_fan_control_read_temp_counter > 0) quiet_fan_control_read_temp_counter--;
                    }
                    else
                    {
                        // Switch off FAN
                        if (temp_cpu != TEMP_CPU_FAN_OFF)
                        {
                            if (ACPI.FIELD.WriteByOffset("_SB.PCI0.LPCB.EC0.ERAM", TEMP_CPU_FAN_OFF, 0x51, 8) == false) { return false; }
                            written_temp_cpu = TEMP_CPU_FAN_OFF;
                        }
                    }
                }

                return true;
            }
            //
            #endregion
        }

        #region Thermal Zone class for CPU Temperature : class TZ00
        //
        public static class TZ00 // If the name of the Thermal Zone class is the same as the name of
        // an existing thermal zone in the system then NHC will overwrite
        // the system thermal zone
        {
            // Info
            public const string description = "CPU Temperature"; // Description of current class
            public const bool default_enable = true; // false = By default the current
            // class is disabled in NHC
            public const int icon = 5; // 5 = Temperature icon
            public const bool thermal_zone = true; // NHC will interpret this class as
            // a Thermal Zone class if this
            // value is true
            #region Value class for _TMP : class _TMP
            //
            public static class _TMP
            {
                // Properties of the value class
                public const string description = "Current CPU Temperature"; // Description of current
                // value
                public const bool nhc_visible = true; // true -> value is visible in NHC
                // Value
                public static int _tmp = 0; // It must have the same name as the class
                // (case are ignored)
                public const string unit = "°C"; // unit of the example_value class.
            }
            //
            #endregion
            public const int refresh_interval = 1; // <= 1 -> 1 Second; 2 -> 2 Seconds ...
            public static bool refresh()
            {
                if (FAN.enable == true)
                {
                    _TMP._tmp = FAN.cpu_temperature; // read cpu temperature from FAN control
                    return true;
                }
                else
                {
                    // get CPU temperature form Embedded Controller
                    return ACPI.FIELD.ReadByOffset("_SB.PCI0.LPCB.EC0.ERAM", ref _TMP._tmp, 0x51, 8);
                }
            }
        }
        //
        #endregion
    }
}
    #endregion

NHC legt auch eine 10,0 KB grosse S12.dll im acpi-Ordner ab.
Wo liegt der Hund begraben?
Vielen Dank, Martin
 
Einfach das "//" am Anfang der einen Zeile entfernen.

MfG

Carsten
 
Immer noch dabei

.... man könnte ja auch Teamviewer oder sowas nehmen... dann sitzt Du direkt davor :)



Da ich heute ausnahmsweise mal den "grossen" X32 zu Testzwecken missbrauche, ist heute alles mit dem "kleinen" erledigt worden... Dauertest des S10 94er BIOS :) allerdings mit abgeschalteten NHC... :)



Grüsse KalvinKlein
 
[quote='CW82',index.php?page=Thread&postID=626405#post626405]Einfach das "//" am Anfang der einen Zeile entfernen.[/quote]
Hab´s verstanden! :D

Jetzt kommt ein Error:

Code:
Error building 'C:\Programme\Notebook Hardware Control\acpi\S12.cs' into 'C:\Programme\Notebook Hardware Control\acpi\S12.dll'

  ErrorNumber:  CS1002
  ErrorText:    ; expected
  Line:         15
  Column:       25
  IsWarning:    False

Gruß, Martin

Edit: Nochmal probiert, kein Error mehr, seitdem wird beim Debugger nichts mehr angezeigt, auch mit //
Edit2: Neustart sowie löschen der S12.dll brachte auch nichts - Debugger bleibt leer (Kontrollkästchen "Show only Errors" und "Pause" ist nicht angehakt)
 
Könnte man, aber "die drei mit den Mützen" kriegen es ja nicht hin, hier mal ne performante DSL-Leitung anzubieten und der N270 kommt ordentlich ins Schwitzen... Pixelkino und Springmaus garantiert...

Ach so, was ich noch erwähnen muss, beim S10e dauert es nach dem Start von NHC bis zu 60 Sekunden, bis die Lüftersteuerung greift (am besten startet man es, wenn der Lüfter noch steht).


MfG

Carsten

Edit: Dass der jetzt nichts mehr anzeigt ist normal. Oder Du machst den Haken bei "Pause" weg.
Edit2: Ok.... die Idee mit dem Teamviewer gefällt mir immer besser... :whistling: ... würd ich aber auf morgen verschieben wollen, weil ich früh raus muss...
Editx: Oder die bösen Entwickler haben sich wieder irgendwas fieses ausgedacht, um uns das Basteln zu erschweren... so wie den Wechsel des Offsets beim Wechsel von BIOS 57 auf 58 beim S10e... :D


21.07.2009: Ich habe gesehen, dass der S12 noch einige ähnliche Register im EC-RAM hat. Das angehängte Profil liest diese alle aus, die entsprechenden Schreibevorgänge sind auskommentiert - siehe oben. Falls hier jemand Ahnung hat, poste ich mal die wichtigen Sektionen der DSDT, ich selbst hab das beim S10e auch nur per Trial 'n Error hinbekommen, gelernt hab ich sowas nie.
Code:
Scope (\_TZ)
	{
    	Name (TBSE, 0x0AAC)
    	Name (CRT0, 0x00)
    	Name (PSV0, 0x00)
    	ThermalZone (TZS0)
    	{
        	Method (_TMP, 0, NotSerialized)
        	{
            	If (\ECON)
            	{
                	Store (\_SB.PCI0.LPCB.EC0.THS0, Local0)
                	Store (\_SB.PCI0.LPCB.EC0.KCSS, Local1)
                	Store (\_SB.PCI0.LPCB.EC0.KOSD, Local2)
            	}
            	Else
            	{
                	Store (\_SB.RBEC (0x92), Local0)
                	And (Local0, 0x01, Local1)
                	And (Local0, 0x08, Local2)
                	Store (\_SB.RBEC (0xA8), Local0)
            	}

            	If (Local1)
            	{
                	Add (PSV0, 0x01, Local0)
            	}

            	If (Local2)
            	{
                	If (LLessEqual (Local0, CRT0))
                	{
                    	Add (CRT0, 0x02, Local0)
                	}
            	}

            	Return (C2K (Local0))
        	}

        	Method (_CRT, 0, NotSerialized)
        	{
            	If (\ECON)
            	{
                	Store (0x20, \_SB.PCI0.LPCB.EC0.TIID)
                	Store (\_SB.PCI0.LPCB.EC0.TSC0, Local0)
            	}
            	Else
            	{
                	\_SB.WBEC (0x01, 0x20)
                	Store (\_SB.RBEC (0xD1), Local0)
            	}

            	If (LOr (LGreaterEqual (Local0, 0x80), LLess (Local0, 0x1E)))
            	{
                	Store (0x78, Local0)
            	}

            	Store (Local0, CRT0)
            	Return (C2K (Local0))
        	}

        	Method (_PSL, 0, Serialized)
        	{
            	If (MPEN)
            	{
                	Return (Package (0x02)
                	{
                    	\_PR.CPU0, 
                    	\_PR.CPU1
                	})
            	}

            	Return (Package (0x01)
            	{
                	\_PR.CPU0
            	})
        	}

        	Method (_PSV, 0, NotSerialized)
        	{
            	If (\ECON)
            	{
                	Store (0x20, \_SB.PCI0.LPCB.EC0.TIID)
                	Store (\_SB.PCI0.LPCB.EC0.TSP0, Local0)
            	}
            	Else
            	{
                	\_SB.WBEC (0x01, 0x20)
                	Store (\_SB.RBEC (0xD0), Local0)
            	}

            	If (LOr (LGreaterEqual (Local0, 0x80), LLess (Local0, 0x1E)))
            	{
                	Store (0x5A, Local0)
            	}

            	Store (Local0, PSV0)
            	Return (C2K (Local0))
        	}

        	Name (_TC1, 0x00)
        	Name (_TC2, 0x32)
        	Name (_TSP, 0x00)
    	}

    	ThermalZone (TZS1)
    	{
        	Method (_TMP, 0, NotSerialized)
        	{
            	If (\ECON)
            	{
                	Store (\_SB.PCI0.LPCB.EC0.THS1, Local0)
            	}
            	Else
            	{
                	Store (\_SB.RBEC (0xA9), Local0)
            	}

            	Return (C2K (Local0))
        	}

        	Method (_CRT, 0, NotSerialized)
        	{
            	If (\ECON)
            	{
                	Store (0x20, \_SB.PCI0.LPCB.EC0.TIID)
                	Store (\_SB.PCI0.LPCB.EC0.TSC1, Local0)
            	}
            	Else
            	{
                	\_SB.WBEC (0x01, 0x20)
                	Store (\_SB.RBEC (0xD3), Local0)
            	}

            	If (LOr (LGreaterEqual (Local0, 0x80), LLess (Local0, 0x1E)))
            	{
                	Store (0x78, Local0)
            	}

            	Return (C2K (Local0))
        	}
    	}

    	Method (C2K, 1, NotSerialized)
    	{
        	Store (Arg0, Local0)
        	If (LLessEqual (Local0, 0x10))
        	{
            	Store (0x1E, Local0)
        	}

        	If (LGreaterEqual (Local0, 0x7F))
        	{
            	Store (0x1E, Local0)
        	}

        	Add (Multiply (Local0, 0x0A), TBSE, Local0)
        	Return (Local0)
    	}
	}

Code:
Field (RAM, ByteAcc, Lock, Preserve)
                	{
                            	Offset (0x01), 
                    	TIID,   8, 
                            	Offset (0x10), 
                        	,   1, 
                    	KTEE,   1, 
                            	Offset (0x11), 
                    	KPPS,   1, 
                            	Offset (0x91), 
                    	TTID,   8, 
                    	KCSS,   1, 
                    	KCTT,   1, 
                    	KDTT,   1, 
                    	KOSD,   1, 
                    	KVTP,   1, 
                            	Offset (0xA8), 
                    	THS0,   8, 
                    	THS1,   8, 
                    	THS2,   8, 
                    	THS3,   8, 
                    	THS4,   8, 
                    	THS5,   8, 
                    	THS6,   8, 
                    	THS7,   8
                	}
 
Gibts da irgendwelche neue Erkenntnisse ?

Carsten hat gerade was geupdatet...oben



Servus KalvinKlein
 
Gibts da irgendwelche neue Erkenntnisse ?
Ja, mein Kühlschrank ist im Eimer. ;(

;)

Ich frage mich, was KCSS und KOSD sein sollen. Da schreibt er immer irgendwas rein, bei unserem S10e steht da nur der RTMP-Wert als Empfänger.


MfG

Carsten
 
@ CW82:

Habe gerade die letzte test.txt getestet:
Beim ersten Programmstart folgender Error:
Code:
Error building 'C:\Programme\Notebook Hardware Control\acpi\S12.cs' into 'C:\Programme\Notebook Hardware Control\acpi\S12.dll'

  ErrorNumber:  CS0219
  ErrorText:    The variable 'write_value' is assigned but its value is never used
  Line:         31
  Column:       9
  IsWarning:    True

Beim zweiten Programmstart keine Fehlermeldung mehr, Debugger funktioniert, Lüfter wird über das BIOS geregelt.



[quote='CW82',index.php?page=Thread&postID=627507#post627507]Ja, mein Kühlschrank ist im Eimer.[/quote]
Eventuell ein falsch programmierter Lüfter? :D

Gruß, Martin
 
Jepp, die Befehle, die den write_value benutzen sind ja auch auskommentiert... das ist nur ein Hinweis...

Schau mal bitte, wie sich die Werte verhalten. Im Moment interessieren mich besonders die ersten beiden (146 und 149), da aus ihrer Bezeichnung nicht hervorgeht, wofür sie stehen (z.B. wird einer 1 wenn Lüfter an oder so ähnlich?). Ansonsten: Stellen die anderen Werte alle irgendwie eine Temperatur dar?

Ansonsten kannst Du mal wieder schrittweise von oben nach unten die Auskommentierung der Zeilen ("//") entfernen und kontrollieren, ob sich was tut. Wie gesagt, beim S10e dauert es eine Weile, bis die Lüftersteuerung greift, das kann beim S12 auch so sein.


MfG

Carsten
 
Habe nacheinander auskommentiert, kann keinen Unterschied feststellen.

Die Festplattentemperatur wird nicht geliefert, da eine SSD eingebaut ist.
Soll ich ev. die normale Festplatte wieder einbauen oder ist jetzt die Suche einfacher?

Gruß, Martin
 
Nabend.

Also einen Unterschied zwischen HDD und SSD sollte es nicht geben.

Ich hab es jetzt mal so hingebaut, dass er genau die Werte, die Du bei "Lüfter aus" angegeben hast, zurückschreibt. Außerdem gibts nen Fehler, wenn beim Schreiben was nicht funktioniert - kann ja auch sein. So nen schönen Einzelschritt-Debugger wie im Visual Studio gibts ja hier nicht...

Du könntest auch mal testen, ob sich eine Wirkung zeigt, wenn Du NHC bei stehendem Lüfter startest. Vielleicht ist es ja ein BIOS-Bug, dass der Lüfter nie wieder stehen bleibt. (Der Ausschaltwert liegt beim S10e aber auch recht niedrig, bei hohen Außentemperaturen geht der bei BIOS-Regelung auch nie wieder aus...)


MfG

Carsten
 
Hallo Carsten,
leider wieder kein Unterschied.
Auch nach einem Kaltstart mit stehendem Lüfter.
Trotzdem möchte ich mich mal für Deine Bemühungen bedanken! :thumbsup:

Bezüglich Unterschied zwischen HDD und SSD:
PFControl und NHC liefern bei allen meinen OCZ SSD´s keine Festplattentemperatur (0 Grad), egal bei welchem Lenovo.
Dürfte kein Temperatursensor bei vielen SSD´s drinnen sein.

Gruß, Martin
 
Mahlzeit.

Bevor die erlaubten 70°C erreicht werden, dürfte auch eher das PCB vom Mainboard schmelzen und sich ein paar Elkos selbst auslöten... ;)

Och da nich für, hab ja eh nix besseres zu tun.
Mir gehen nur langsam die Ideen aus. Ich stelle daher mal kurz den prinzipiellen Lösungsweg vor, evtl. kann ja einer das nochmal nachvollziehen und gucken, wo der Fehler noch liegen könnte. Im Prinzip hält man sich bei der Suche an dieses Handbuch . Man sucht in der ACPI DSDT nach einem Wert, der so aussieht, als würde er für die Temperatur stehen, von der der Lüfter abhängig ist (aber Achtung, wenn man - wie im Handbuch empfohlen - eine Suche über den gesamten EC RAM macht, könnt Ihr mal feststellen, was laggen wirklich ist...). Wenn man den gefunden hat, überschreibt man ihn permanent mit einem Wert, bei dem der Lüfter entsprechend das macht, was man will. Das war es eigentlich schon.
Beim S10e gibt es dann noch den Fall, dass sich bei einem neuen BIOS-Release sowohl die absolute Höhe des Wertes als auch sein Name verändert haben, daher habe ich dann noch ein kleines Tool namens NHCC (NHC Config) gebastelt, das die BIOS-Version und die Gerätekennung automatisch ermittelt und die benötigten Profildateien in den NHC-Ordner schreibt (welches sich auch problemlos auf das S12 [und S10-2] erweitern lässt, sobald wir den Wert gefunden haben).

Es ist also jeder, der davon halbwegs Ahnung und/oder eine Idee hat, herzlich eingeladen, sich zu beteiligen.


MfG

Carsten
 
Ruhe hier im Forum - aber der Lüfter läuft weiter und verbereitet Lärm

Hallo zusammen,

habe aufmerksam alles gelesen, jedoch keine Lösung gefunden. Gibt es die schon - bin leider ein richtiger Anfänger und somit hilflos. Habe auch ein S12 zuhause und würde gerne wieder die Ruhe ohne Lüfter genießen.

LG
 
verkaufbar[/url]... :(

Hast Du schon ein sauberes Windows installiert?
Das Lenovo-Windows, welches serienmässig installiert ist, hat bei Leerlauf eine Prozessorlast von 15-23%.
Ein sauberes Windows mit Treibern hingegen 0-1% Leerlauflast.
Bevor Du nicht ein sauberes Windows drauf hast, hätte die geänderte Lüftersteuerung sowieso wenig Sinn.

Gruß, Martin

EDIT:
gleiche Frage[/url] gestellt hast... ;)
 
Nabend zusammen.

Wie gesagt gehen mir die Ideen aus. Wir könnten noch austesten, ob es im Speicherbereich noch andere Temperaturfelder gibt und anschließend gucken, ob bei Manipulation der Werte was passiert - siehe Anhang. Aber wie ich schon sagte, dieses Auslesen führt dazu, dass das System mal ordentlich anfängt zu hängen. Gibt es irgendwo noch Felder, die offensichtlich was mit der Systemtemperatur oder dem Lüfterverhalten zu tun haben?

Vielleicht ist es aber einfach ein BIOS-Bug, dass der nie wieder ausgeht. Habt Ihr Lenovo das schon mal in der Klarheit gefragt? Ob sie antworten ist ne andere Frage, sie wurden im Lenovo-Forum schon mehrfach gefragt, was denn nun mit den zu lauten Lüftern der S10(e) werden soll, weil das Problem nach wie vor nur verschlimmbessert, aber nicht gelöst wurde. Eine Antwort bleibt aus, kein neues BIOS seit 3 Monaten. Meine Cousine hat den Lüfter meines S10e schon mal für einen Föhn im Nebenzimmer gehalten...

Beim S10e hat es übrigens ca. 5 Monate gedauert, bis ne Lüftersteuerung verfügbar war (gerechnet ab Markteinführung).


MfG

Carsten
 
Hallo Carsten!
Ich denke nicht, dass ein BIOS-Bug beim S12 vorliegt:
Der Lüfter schaltet sich oft bei einem Kaltstart bei ca. 41Grad ganz kurz ein,
geht nach 3 Sekunden wieder aus und läuft dann dauernd ab 43Grad.

Nicht dass Du denkst, ich hätte nichts unternommen:
Ich habe das NHC_acpi_guide_ Samsung_P50.pdf durchstudiert und für das S12 abgeändert,
doch leider reichen anscheinend meine IT-Kenntnisse nicht aus, um eine Veränderung zu erreichen... :whistling:

Mit Deinem letzten Script hat sich leider auch nichts geändert,
was ich herausgelesen habe wird ja auch nichts verändert... ;)

Wenn es Dir weiterhilft:
Zeile 168 bis 171 klingt interessant:

43Grad:
ref 42, 168, 8
ref 42, 169, 8
ref 46, 170, 8
ref 40, 171, 8

50Grad:
ref 49, 168, 8
ref 49, 169, 8
ref 48, 170, 8
ref 46, 171, 8

58Grad:
ref 60, 168, 8
ref 59, 169, 8
ref 52, 170, 8
ref 50, 171, 8

Linie 15, 220, 222, 233, 240, 242, 244, 247 bis 253 sehen auch nach Temperatur aus.

Diese Scripte funktionieren ohne Errors: Anhang anzeigen 17411 Anhang anzeigen 17414 , leider ohne den Lüfter zu beeinflussen... ?(

Hier mit Errors: Anhang anzeigen 17412 Anhang anzeigen 17413


[quote='CW82',index.php?page=Thread&postID=633603#post633603]Beim S10e hat es übrigens ca. 5 Monate gedauert, bis ne Lüftersteuerung verfügbar war (gerechnet ab Markteinführung).[/quote]
Wir bekommen das doch unter 5 Monaten hin ? :thumbup:

Gruß und schönen Sonntag, Martin


EDIT: Wäre es eigentlich möglich, bei einem BIOS-Update die Ein- und Ausschaltwerte des Lüfters in der neuen BIOS-Setupdatei zu ändern?
Man könnte sich dadurch NHC und somit auch Framework ersparen, was meiner Meinung nach überhaupt nichts auf einem Netbook zu suchen hat... :?:
 
Mahlzeit.

Also prinzipiell ist es möglich, diese ACPI Tabellen, die wir da ausgelesen haben, auch in veränderter Form wieder zurück zu schreiben. Das dürfte aber normal nur jemand können, der selbst ein BIOS entwickeln könnte. Und ich bin eher auf der Anwenderseite zu Hause... in VB bin ich ganz gut, aber das Bisschen C# hier ist auch eher aus der Not heraus entstanden, zum Semesterbeginn ein leises Netbook haben zu müssen...
Am Framework habe ich allerdings nur auszusetzen, dass das Laden der Bibliotheken beim Start immer so ewig lang dauert. Ansonsten find ich das keine schlechte Erfindung. Und NHC braucht zwischen 6.000 und 8.000 K RAM, das ist selbst auf einem Netbook nicht der Rede wert.

Hm. 168 und 169 sind genau die beiden Felder, die wir ohnehin als Temperaturregister identifiziert haben (168 => 0xA8, 169 => 0xA9). Du könntest jetzt noch mal versuchen, eine nach der anderen Deine identifizierten Zeilen zu manipulieren. Aber Vorsicht, ein falscher Wert an der falschen Stelle kann unvorhersehbares Verhalten des Gerätes hervorrufen... (beim S10 hat's mal die Akkuerkennung komplett zerlegt... [Gerät kurz stromlos behebt sowas])

Deine beiden Scripte mit Error machen das übrigens, weil Du in den Read-Befehlen hinten das ,8 in der Klammer vergessen hast (der Wert gibt an, wieviel Bit an der Stelle gelesen werden sollen, ohne die Angabe kann der Befehl nicht ausgeführt werden).


MfG

Carsten
 
Hallo und schönen Nachmittag!
Danke für die Korrektur, bin halt kein Spezialist!
Habe die Fehler korrigiert, kein Error mehr ... :D
Jedoch reagiert der Lüfter nicht... :(

Anhang anzeigen 17423

Habe auch "value = value -20;" , "value = value +40;" getestet, leider keine Veränderung...
Jetzt fällt mir auch nichts mehr ein... :S

Danke und Servus, Martin
 
hallo zusammen,

ich habe jetzt auch mal S12wati7.cs verwendet. Ich kann auch nur bestätigen, dass die Temp. anscheinend von 0xA9 ausgelesen wird.

Nun habe ich insgesamt gar keine Ahnung von all dem Programmieren, aber wo ist denn in dem script der Befehl, den Lüfter auszuschalten? (Ich hoffe keine zu blöde Frage!)

LG Tobias
 
[quote='langeto',index.php?page=Thread&postID=633784#post633784]aber wo ist denn in dem script der Befehl, den Lüfter auszuschalten?[/quote]
Gar nirgends!

Es werden im Script Werte ausgelesen, diese manipuliert und zurückgeschrieben, um dem System eine niedrigere Temperatur vorzutäuschen.
Nur reagiert das S12 System leider nicht auf die manipulierten Werte... ;)

Gruß, Martin
 
  • ok1.de
  • thinkstore24.de
  • ok2.de - Notebook Computer Server
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben