Knackende Tonausgabe auf Dell Latitude 14 5495 beheben

Problem

Während der Soundwiedergabe (Musik, Videos, Spiele) oder sogar während einfacher Windows Benachrichtungstöne ist immer wieder ein Knacken zu hören, unabhängig davon ob man die internen Lautsprecher oder externe Lautsprecher oder Köpfhörer nutzt. Dieses Knacken tritt sogar beim Soundtest in den Realtek-Geräte-Einstellungem, im Windows Mixer und im MaxxAudioPro auf. 

Lösung

Die PCIe Stromspareinstellungen müssen weniger aggressiv eingestellt werden. Mit der rechten Maustaste auf das Batterie/Netzteil-Icon in der Taskleiste klicken, "Energieoptionen" auswählen. Da dann "Erweiterte Energieeinstellungen ändern" rechts neben dem Dell Plan anklicken, wird ein anderer Plan verwendet, dann diesen (auch) bearbeiten.  Unten "Erweiterte Energieeinstellungen ändern" anklicken, im Editor dann "PCI Express" aufklappen und darunter dann den einzigen Eintrag "Verbindungszustand-Energieverwaltung". Für beide Einträge oder, je nach persönlicher Vorliebe für saubere Tonausgabe oder länger Batterielaufzeit, nur für den Netzbetrieb die Einstellung "Mittlere Energieeinsparungen" einstellen. Mit einem Klick auf übernehmen wird die Einstellung direkt aktiv. Ich denke nicht (im Sinne von hoffen) , dass diese Einstellung eine größere Auswirkung auf die Akkulaufzeit hat. Fun Fact: wenn man die Einstellung auf maximale Einsparung zurückstellt und auf Übernehmen klickt, hat man eine hohe Chance schon wieder ein Klicken zu hören ;-) 
 
Mein Dank gilt "Francois Villemaire" der die Lösung im Microsoft Forum gepostet hatte. Im Gegensatz zu dem Fall da war ein Ändern der USB Einstellungen nicht notwendig. 

Meine Meinung

Anstatt an einem meiner Projekte zu arbeiten geht wieder mal ein Abend dabei drauf ein Problem bei einem neugekauften Gerät zu analysieren. Das wird langsam echt ärgerlich. Können die Hersteller keine fehlerfreien, 100% getesten Geräte mehr ausliefern? 
 
Zuerst habe ich versucht verschiedene Treiber zu aktualisieren oder zu downgraden, vor allem den Realtek Soundkartentreiber. Dann habe ich an den Soundeinstellungen rumgespielt, vor allem verschiedene Sampling Raten und Bittiefen, wo aber dann beim Testton schon wieder ein knacken zu vernehmen war. Dieses Knacken ist typisch dafür wenn der Datenstrom abreisst, aus welchem Grund auch immer, und hab dann nach den Ursachen für Buffer Underruns gesucht. Meine letzte Soundblaster ist wegen DPC problemen vor ~10 Jahren rausgflogen, deswegen mal nach DPC und Interrupt Problemen gesucht und als die dann Dank LatencyMon und DPC Latency Checker offensichtlich waren, geguckt wer diese verursachen könnte. Die Ursache habe ich zwar nicht gefunden, aber bin auf der Suche nach Hilfe auf den Forum-Eintrag mit der Energieeinstellung gestolpert. Interessanterweise war dieser ISR/DPC Aufruf ~16,6ms lang, was so ziemlich 1/60s (= 60Hz) lang ist, hatte da fast auf irgendein Problem mit der Grafikkarte oder dem Monitor-VSync getippt. Hab wieder was über Windows gelernt, hätte da aber gerne drauf verzichtet. 

Fundstücke während des Debuggens:

 

AMD RyZen & Windows 7 works

I managed to upgrade my existing 6 years Windows 7 installation to Ryzen. Hardware is ASUS Prime X370-Pro with a Ryzen 1800X. Just for a few tipps for people which do not like Windows 10 and want to live 2 more years with win7.

- Deinstall old AMD software beforehand. Windows kept on crashing during any normal startup. After a lot of safe mode boots it turned out to be the aoddriver service which belongs to the old AMD Overdrive. Looks like this software does not like Ryzen. I also removed the AMD DualCore optimizer.
- Having a PS/2 keyboard and mouse is also helpful as you will most like lose all USB controllers until you can install the drivers. Installing the drivers before the upgrade did not work. Having a PCIe USB controller with installed drivers may also be a working workaround
- Having a SATA DVD drives may also be handy: https://forums.anandtech.com/threads/ryzen-strictly-technical.2500572/pa...
- Have copied all drivers that come with the new mainboard can be also helpful when you are able to boot into system.
- When using TrueCrypt, removing the full system encryption makes any repair attempt easier as you can access your data.
- Create an disk image of your OS disk, just in case you get stuck and want to revert to your old hardware.

- The latest bios version 0504 seems to be not very stable. Sometimes the system won't boot or will hang and sometime it takes several seconds to get to the splash screen. Sometimes everything is fine.
- The first day I spent getting anything to work. Linux would hang during startup, windows would hang very early, even the installation DVD could not boot. Even memtest86 just resetted the machine. Turned out that one of the two DDR4 modules was bad. This is my first DDR4 hardware so I had nothing to crosstest.
- I undid the truecrypt encryption in a second PC went I was stuck. This put me probably in some UEFI/Legacy problem rooted in the history of the system. Win7 was installed in UEFI mode, then converted to Legacy Boot for Truecrypt. Now with truecrypt removed I get one or two messages from the Win7 bootloader. Stop code 225. Fortunately it lets me continue.

Rubrik: 

ASUS M3A78, SB Live! 5.1 und die Mtron Mobi 3525

Um es kurz zu machen, es hat mich das Wochenende gekostet herauszufinden das AM2+ Mainboard M3A78 von ASUS einfach Scheisse ist. Da ich auf ein reines AMD System umstellen wollte, kam für mich nur ein Board mit AMD Chipsatz in Frage, noch dazu ohne eingebaute Grafikkarte, denn da hab ich eine (weniger Komponenten, weniger Fehler). Also sollte es ein AMD 770 mit der Southbridge SB700 werden (die SB600 ist zu alt). Und wenn ich schon dabei bin, dann sollte auch direkt eine SSD Flash Festplatte rein, denn ordentliche sind schneller als jede normale Consumerfestplatte. Der erste Hammer war die Leistung der Festplatte, da war meine alte Samsung PATA SP1604N schneller und die ist jetzt mindestens 5 Jahre alt. Installation von Linux und XP, Benchmarks, Installation von Usersoftware, alles fühlte sich recht zäh an, und das obwohl SSDs eigentlich ein flüssigeres Arbeiten ermöglichten sollten. AHCI, SATA, Mainboard und SSDs Updates, BIOS & Treiber Tuning, ich hab alles ausprobiert. Es half nichts. Hab mich dann doch irgendwie damit abgefunden. Also weiter installiert... Zwischenzeitlich hab noch mal geguckt wie ausgelastet das System eigentlich ist (hatte die Auslagerungsdatei ausgeschaltet) und 25% CPU-Auslastung auf einem System wo nur Winamp läuft. Bisschen gegooglet, Hinweise auf den DPC Latency Checker gefunden, bisschen rumprobiert und rausgefunden, das diese 25% CPU Belastung, die der Process Explorer unter Interrupts führt von der alten Soundblaster Live! 5.1 rührt. Also deaktiviert, mit on-Board Sound getestet. Funktioniert sauber, also fliegt sie raus. Zwischenzeitlich hab ich meine Erfahrungen in einem Thread bei Forum de Luxx niedergeschrieben und um Kommentare gebeten. Als ich dann meine Backupdaten von meinem Server zurückspielen wollte, kam der nächste Hammer. Die Netzwerkkarte ist das nächste Problem. 50% CPU Last und <30MB/sec, das war dann das final.... verfluchter RealTek Chip. Da wollte ich das alte Board (Asus M2N4-SLI mit nForce Chipsatz) nochmal gegentesten, ausser ein paar Stunden Zeit war ja nix mehr zu verlieren. Also altes Board wieder rein, und der Unterschied war wie Tag und Nacht. Die SSD rannte und die SB Live! fraß nun auch keine Rechenleistung mehr. Das bleibt jetzt auch erstmal wieder drin. Folglich: Zumindestens das ASUS M3A78 mit der BIOS-Version 1001 verträgt sich nicht mit der Mtron Mobi 3525 und auch nicht mit der Soundblaster Live! 5.1, wobei ich da eher an ein Versagen der SB Live! glaube. Vermutlich ist das sogar ein allgemeines AMD AMD 770/SB700 Chipsatz Problem (siehe oben verlinktes Forum), vielleicht liegt´s auch nur an der Southbridge, ich weiss es nicht. Bin nur mal wieder mal um die Erfahrung "Never change a running system" reicher.

Die CPU Strom sparen lassen - 2. Versuch

Athlon 64 X2 Prozessoren haben die Stromspartechnologie Cool'n'Quiet eingebaut, die automatisch dynamisch den CPU-Takt, die CPU-Spannung und damit auch den Stromverbrauch reduziert. Nebenbei entsteht dadurch auch weniger Wärme. Möchte man das einsetzen, muss das BIOS mitspielen und man muss einen Treiber für die AMD CPUs installieren und unter XP/Vista einen anderes Energieprofil auswählen.

stabile & instabile Speichertimings

Sollte man denken. Ich konnte auf meinem Rechner auch ein anderes Energieprofil auswählen, doch spätestens beim zurücksetzen hing sich der Rechner auf. Hatte zuerst wieder mein Mainboard (Asus M2N4-SLI) unter Verdacht. Nun scheint es doch nicht verantwortlich zu sein. Zumindestens nicht alleine. Nach einem BIOS Update auf eine Beta-Version trat keine Besserung ein :( Aus irgendeinem Grund hatte ich die Eingebung mal was an den Speichertimings zu machen, weil beim Runtertakten auch immer der DRAM Takt mit runtergesetzt wurde, und vielleicht das Probleme macht. Auf dem Bild sieht man die möglichen Timings und der langsamere funktioniert. Leistungseinbussen sind marginal, aber dafür kann ich jetzt Cool'n'Quiet benutzen :) Vielleicht sind die (selbst) angegebenen Timings der A-Data Extrememory DDR2-6400 Module doch recht knapp bemessen. Dann haben wollten wir das beim Bruder mit seinem Core 2 Quad ausprobieren. Aber irgendwie hat nix geholfen. Weder unter XP noch Vista wollte sich was am Takt ändern. Treiber gibt´s auch nicht. Naja, nach mehreren Stunden suchen fand sich dann ein Forumsthread in dem stand dass der SpeedStep-Support ab der BIOS-Version 1.10 entfernt wurde, weil der PT880 von VIA wohl damit Probleme hat. Was für ein Schrott... Also kein SpeedStep für meinen Bruder. Mein Rechner läuft jetzt aber stabil auf "Maximale Energieeinsparung". Der extern gemessene Stromverbrauch (nur PC) hat sich im Leerlauf dadurch von ~100Watt auf ~85Watt reduziert. Also so die Einsparung war das jetzt nicht, aber immerhin! Die meiste Zeit läuft der Rechner ja eh fast im Leerlauf. Nur selten braucht man die volle Leistung.

ADS - Eine schlimme Krankheit

Der Advantage Database Server und seine bescheuerten Fehler

Unbeschränkte Abfragelänge bedeutet nicht wirklich unbeschränkt...

Laut den Help-Files kann der ADS beliebig lange Abfragen ausführen, doch bei bei skalaren IN-Listen ist schnell Schluss. Folgendes Beispiel zeigt das Problem: Ich hab eine menge Zeilen ausgelassen, aber insgesamt sind es ungefähr 80kb (Textgröße, Bytes!), die da fehlen. Leider steigt der ADS da mit

[Extended Systems][Advantage SQL][ASA] Error 7207: Unexpected error from Advantage Server Agent. Check Advantage error log for details.
Error 5005: The supplied buffer was insufficient for the information returned. The data may have been truncated.

aus. Kürz' ich eine signifikante Menge von Sucheinträgen aus, läuft die Abfrage. Und dabei steht in der Doku (Quelle)

*SQL Statement Limits*
Maximum character literal length
No Limit*

Maximum SQL statement length
No Limit*

* In versions 7.0 and earlier, the maximum character literal length was 1024 characters, and the total maximum length for an SQL statement was 65535 bytes. In versions 7.1 or greater, character literals and SQL statements can be arbitrarily long.

Und wir setzen definitiv kein 7.0 oder älter mehr ein (weder als Server noch als Client)

Auf meine Anfrage in der ADS/PHP-Newsgroup, wo sich auch Entwickler rumtreiben kam keine Antwort.
(PHP)

Ein Datensatz ist manchmal auch kein Datensatz

Das MoveFirst sollte doch kein Problem sein, oder? Ist es leider. Hatte jetzt leider das Problem, das er angeblich zwar einen Datensatz hatte, aber bei dem MoveFirst mit einen Error direkt ausstieg.
Und ich könnte schwören, ich hätte früher mal dieses (rs.recordcount > 0) eingeführt weil Not rs.eof() auch nicht so richtig wollte...
(Visual Basic & AdoDB)

Kein Datensatz ist manchmal auch ein Datensatz und manchmal sogar noch mehr..

Als ich vor über 4 Jahren mit PHP & ADS anfing hatte ich ein Problem mit der Funktion ads_num_rows(), die die Anzahl der zurückgegebenen Datensätze liefert. Tat sie nicht. Seit 7.0 steht in der Hilfe

Remarks
For SELECT statements or EXECUTE PROCEDURE statements with a result set, the number of rows will be –1 until the last row has been fetched. For INSERT, UPDATE, and DELETE statements, the number of rows affected by the statement is returned. In the event of an error, –1 will be returned.

Probieren wir das doch mal aus:

";
$ergebnis = $ads->query("SELECT code FROM qs_icd27");
echo "Anzahl Datensätze: " . ads_num_rows($ergebnis)."\n";
$anzahl = 0;
while (ads_fetch_array($ergebnis)) //Zieh alle Datensätze
	$anzahl++;
echo "Richtige Anzahl Datensätze: ". $anzahl ."\n";
echo "Neue Anzahl Datensätze: ". ads_num_rows($ergebnis) ."\n";
die();
?>
Ausgabe:

Hm, passt nicht so ganz. Selbst wenn die Funktion richtig funktionieren würde, ist sie doch recht überflüssig. 

Hat noch jemand ADS/PHP prä-7.0 Dokumentation? Ich könnte schwören da stand das nicht drin und die Funktion gab damals 0 zurück.
(PHP)