MODDING-FAQ FORUM

Alles rund ums Modden => Modding-Langzeitprojekte => Thema gestartet von: hackspider am Juni 21, 2009, 22:13:23



Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 21, 2009, 22:13:23
Hi,

da ich hier vermehrt den Wunsch gelesen habe, dass einige die CPU Auslastungsanzeige via USB unter Vista betreiben möchten und ich mich sowieso im Moment mit USB Programmierung auf AVRs auseinander setzte habe ich mir gedacht ich mache den Vista Benutzer eine Freude.

USB CPU Load Indicator WinXP x86/x64 und Vista x86/x64 Ready

Die Schaltung basiert auf einem Atmega48 von Atmel, der die USB mittels V-USB (früher AVR-USB) implementiert wurde (so wie das USB-LCD von Ast). Die Schaltung ist benötigt USB-Seitig nicht viel: vier Widerstände, 2 Z-Dioden und eine USB-Buchse. Dazu kommt noch die "Grundversorgung" für jeden AVR mit einem Quarz, Anschwingkondensatoren und Reset Pull-Up. Im Moment werden die LEDs direkt an den Ports des AVRs betrieben, das ist nicht gesund für den Mikrocontroller. Mann kann dazu den 74HC373 verwenden wie im Klassischen Tutorial oder wenns etwas stärker sein darf auch einen uln2801.
Mikrocontrollerseitig ist die Software so simple wie möglich gehalten worden. Außer USB-Messages empfangen und das Value-Word des USB-Requestes auf die Ports mappen, macht der AVR nichts weiter (alles kein Hexenwerk).

Das Programm PC seitig wurde in C# geschrieben (Hauptsächlich weil ich das letzte halbe Jahr C# programmieren musste). Das macht das Programm nicht unbedingt Resourcensparend (ca 10 - 15MB RAM ) dafür funktioniert alles so wie es soll. Ich kann das Programm ggf. nochmal in C++ neu schreiben. Es wird auch hier lediglich die CPU Load der Kerne ausgelesen via USB an den Mikrocontroller geschickt.

So und weil Text alleine langweilig ist hier mal ein Bild im Betrieb:

(http://hackspider.toxic-link.net/Bilder/USB%20Load/USBLoad.jpg)

Rechts sind die LEDs für den Kern0 meinen QuadCores und Links sind die LEDs für Kern1.

Für mehr als zwei Kerne reichen die IO-Pins des Mikrocontrollers nicht aus, allerdings würde ich auf Wunsch eine Quad-Variante mittels Schieberegister (74HC595) anbieten.

Soo und jetzt zum interesannten Teil: Der Treiber für die Betriebssysteme.

Der Mikrocontroller braucht auf dem PC die LibUSB, die es sowhol für Linux als auch Windows gibt. Unter WinXP (egal ob x86 oder x64) ist es relativ einfach, man nimmt den LibUSB Win32 Installer installiert den Treiber und tut.
Durch Recherche als ich mich mit V-USB beschäftigte, bin ich auf ein Youtube Video gestossen, indem erklärt wird wie man die LibUSB unter Vista zum laufen bringt:
Als erstest wird das mitgelieferte *.sys file mit dem "Add Hardware" Dialog installiert, die Geräte erscheinen jetzt mit einem Ausrufezeichen im Geräte-Manager, da die Treiber nicht signiert sind. Als nächstes installiert man wie unter WinXP LibUSB Win32, allerdings im WindowsXP SP2 Kompatibilitätsmodus. Das Gerät funktioniert nur dann wenn das tolle "Sicherheitsfeature" "Erzwungene Treibersignierung" abgeschaltet wird. Das "Feature" wird abgeschaltet, indem man während des Bootvorgangs F8 drückt und auswählt, dass man ohne "Treibersignierung" starten will. Wem das jedes mal zu stressig ist, kann auf Tools wie ReadyDriver zurückgreifen, die das dann automatisch machen.
Getestet wurde das ganze unter WinXP x64 und Vista x64.

Hier noch ein Video (für Leute die es Bilnken Seh wollen :D)
LibUSB Win32 (http://hackspider.toxic-link.net/Bilder/USB%20Load/USBLoad.MPG]Video[/url]

und noch ein Paar Links:
[url=http://www.obdev.at/products/vusb/index-de.html]V-USB[/url]
[url=http://www.youtube.com/watch?v=21wFxw1kwSo]YouTube Video[/url]
[url=http://libusb-win32.sourceforge.net/)

Bis jetzt war das alles eigentlich für mich nur so ein Einstig in die USB<->AVR Programmierung. Doch wenn Interesse besteht, dann würde ich anfangen für euch Schaltpläne, Layout und Beschreibung für Singel, Dual und Quad-Variante machen und den SourceCode (sowohl PC als auch AVR seitig) aufräumen und veröffentlichen.

So dann wär mal Zeit fürn bisschen Feedback, Verbesserungen und Kritik sind bei mir immer erwünscht.

Gruß hackspider


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: StarGoose am Juni 21, 2009, 22:31:15
Respekt nicht Schlecht

was mir nur Grundsätzlich hier auffällt ist die Win xp Kompatibilitätsmodus und unsignierte Treiber Geschichte
schließlich steht windows 7 vor der türe keine ahnung ob das dort immernoch so klappt
eine "echte" lösung des treiberprobems für die usb sachen unter vista/win7 wäre wohl mal der große wurf
mit dem "riesen" avr kann man sicherlich auchnoch andere sachen veranstalten... lüfter regeln, spannungen messen noch viel mehr leds rumblinken lassen, ein display ansteuern.. naja es klemmt wohl immernich grundsätzlich an der treibergeschichte


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: mak am Juni 21, 2009, 22:52:19
Zitat von: StarGoose $txt[176] Juni 21, 2009, 22:31:15
eine "echte" lösung des treiberprobems für die usb sachen unter vista/win7 wäre wohl mal der große wurf


Da ich Win7-RC1-User bin interessiert mich das auch brennend. Ich würde mich natürlich fürs Testen zur Verfügung stellen. Aber ein kleiner Tipp: Kleinerer AVR und standardmässig Schieberegister. Die Software sendet so viele Daten wies Kerne hat zum AVR, der AVR sendet dann alles was er erhält ans Register.

Vorteil dieser Methode wäre einerseits, dass man einen zeitlichen Verlauf sehr einfach darstellen könnte (Verkettung von Schieberegistern), andererseits könnte man eine Unabhängigkeit von den Anzahl Kernen und verwendeten Registern erzielen. Wenn man also von einem Dualcore-System auf ein Quadcore-System aufrüstet kann man die alte Anzeige weiterverwenden. Am besten die Kerne absteigend senden, dann bleiben z.B. bei 2 Registern nur die Kerne 0 und 1, was zumindest mir sinvoller erscheint, Stichwort Gamen. Möglich wäre auch noch eine Checkbox "Average", sodass nur der Durchschnitt aller Kerne übermittelt wird, dies macht natürlich nur bei einem Register Sinn.

Noch eine Frage: Wie hoch ist die Updatefrequenz? Eine Sekunde? Oder einstellbar?


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 21, 2009, 23:30:30
Hi nochmal,

@StarGoose
Hab das ganze auch schon aufm Win7 RC1 getestet, da funktioniert alles bis auf die Sache mit dem ReadyDriver, d.h. man muss bei jedem Start den Trick mit der F8 Taste machen.
Solange M$ keine Möglichkeit bietet, Treiber kostenlos zu signieren, bzw. keine Möglichkeit anbietet die Treibersignierungsprüfung abzuschalten, siehts ziehmlich schlecht aus für Bastel-USB.
Ich bin überhaupt kein Freund von Vista und von Windows 7 bin ich auch nicht wirklich überzeugt. Die Treiberproblematik hat mir fast schon wieder den Rest gegeben, hab für die Vista-User dann doch ne alte HDD ausm Schrank gekramt und meine msdnaa-Lizenz mal installiert. Da muss noch einiges passieren bis ich das produktiv einsetzten kann.

BTW:
Der AVR kann natürlich noch ne Menge mehr: (Von mir getestet)
- Lüfter regeln PWM -> gläten -> OP -> PFET (NoDrop2 Prinzip)
- Mittels NTC Temperatur messen
- Drezahlmesser -> ICP

Könnte man ne lustige digitale Lüftersteuerung machen, gibts aber ja schon einige

@mak
Der einzige Grund warum so ein "großer" AVR benuzt wurde ist, dass es die letzten waren die ich da hatte  ;).

Dein Vorschlag gefällt mir gut, super geeignet für die Multicore Unterstützung werde ich genau so weiterverfolgen. Allerdings fehlen mir im Moment die Schieberegister um einen Versuch aufzubauen. Elektronisch und Programmiertechnisch dürfte da nichts im Weg stehn.

PC seitig is dem Ganzen keine Grenzen gestezt: ob man das Ganze dann als Lauflicht, Blinklicht, RAM, HDD, VU, oder klassisch als CPU Auslastungsanzeige verwendet ist dann jedem selber überlassen.
Im Moment, kann ich mir aussuchen, ob ich einzelne Kerne, oder den "Total Load" (der angesprochene Average) anzeigen will.

Zu deiner Frage: Die Updatefrequenz is im Moment fix im Code mit 100ms drin, diese ist aber auf jeden Fall einstellbar geplant. Es wird 10 mal pro Sek neue Werte geholt und beim einer Veränderung an den AVR gesendet.

Gruß hackspider



Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: OlafSt am Juni 22, 2009, 08:50:48
Die Treibersignierung ist ein elementarer Bestandteil des Sicherheitskonzepts (und der umfangreichen Kopierschutzmaßnahmen) von Vista und Win7. Daran wird sich so schnell nichts ändern.

Ich selbst habe mich auch mal wieder etwas intensiver mit dieser Problematik auseinandergesetzt - nicht zuletzt, weil ich langsam aber sicher vorhabe, XP den Rücken zu kehren und auf Win7 umzusatteln. Die bisherigen Ergebnisse sehen nicht schlecht aus, erfordern aber deutlich mehr Bastelaufwand. Ich fürchte, daran wird sich auch nichts mehr ändern.

Vista- bzw. Win7-Treiber, die dann Ast's USB-Lösung sauber zum Funktionieren bringen, werden wir sicher nicht mehr erleben.


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: TzA am Juni 22, 2009, 09:10:25
Tante Google meint dass das hier (http://www.blogsdna.com/2775/install-unsigned-drivers-on-windows-7-vista-with-driver-signature-enforcement-overrider.htm) auch unter Win7 die Installation unsignierter Treiber erlauben sollte, funzt aber nur ohne UAC (vermutlich muss sich das Tool halt andauernd Dinge tun, die root-Rechte brauchen).

Ich bin mal optimistisch, dass mit der fortschreitenden Verbreitung von Win7 sich da noch was finden wird.

Ansonsten ist das schonmal sehr schön dass sich wer die Mühe macht und immerhin für Vista eine gute Lösung gefunden hat.
Sofern das alles sauber läuft und getestet ist, würde ich ja vorschlagen da ein Tutorial für die Hauptseite draus zu machen.

Abgesehen von einer Umstellung auf Schieberegister, die dann auch die CPU-Auslastung eines Core i7 mit seinen 8 Kernen problemlos anzeigen können sollte, wäre evtl noch ein Umbau des USB-Protokolls sinnvoll.
So wie ich das verstanden habe, "denkt" der AVR momentan nur in CPU-Auslastungen und legt einfach alles was er an Daten bekommt auf seine Ausgänge.
Wenn so eine fertige USB-Plattform mit passendem PC-Programm aber erstmal vorhanden ist, dürfte es durchaus Interessenten geben, die da noch selber was dazuprogrammieren möchten.
Deswegen sollte man die Übertragung nach Möglichkeit auf mehrere verschiedenen Nachrichtentypen auslegen, USB ist ja schnell genug dass der Overhead nicht stören sollte.


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 22, 2009, 23:30:49
Hi,

diese Tool hatte ich auch eine kurze Zeit ausprobiert, aber eine Abschaltung der UAC war mir doch zu riskant für den Dauereinsatz.
Ich seh das genauso wie du, dass sich da mit der Zeit noch eine richtige Lösung finden wird.

Der AVR denkt im Moment nicht einmal (und das würde ich gerne auch so belassen), er bekommt in der aktuellen Fassung zwei Bytes zugesendet, die er ohne Bearbeitung an die IO-Pins weitergibt. Das Abbilden der CPU Auslastung auf ein Byte übernimmt das Programm auf dem Computer also zwischen 0 und 12,5% ist das Byte=1, zwischen 12,5 und 25% ist das Byte=3  usw.
In der Version an der ich gerade arbeite, wird dem AVR ein Byte[] (Buffer) gesendet, der dann über die Schieberegister einfach rausgeschoben wird.
Damit entnehme ich dem AVR jede Logik, sodass man bei der Integration von neuen Features, keine neue Firmware flashen muss.

PC seitig wird es eine Pluginstruktur geben (die ich aus einem meiner aktuellen Projekte übernommen habe), diese erlaubt es dann zusätzlich Blinklicht,Lauflicht,RAM,HDD,VU-Meter Plugins zu schreiben.

Was mir heute Nachmittag noch so kam war, das man das ganze auch als Multi-CLCD Ansteuerung via USB nutzbar machen könnte. Ist halt nur die Frage, ob die Schieberegister/AVR Combi schnell genug ist.

Gruß hackspider


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: mak am Juni 23, 2009, 11:11:45
Da die LCDs "vorher" per LPT angesteuert wurden, sollte die Geschwindigkeit des USB-Ports ausreichen, der ist ja viel schneller.

Ich überlege mir gerade, ob es von Vorteil wäre, mehrere Kanäle (sprich Schieberegisterreihen) zu implementieren. Also jeweils einen Kanal für CPUs, einen für RAM, HDD, VU, usw, jeder mit einstellbarer Geschwindigkeit. Will man das Ganze nicht zu kompliziert machen, würde ich 2 Kanäle empfehlen. Einer mit hoher Aktualisierungsgeschwindigkeit für CPU & VU-Meter und einen mit tiefer Aktualisierungsgeschwindigkeit für RAM, HDD, Beleuchtung.

Für die Konfigurationsseite noch eine Idee:

(http://img7.imageshack.us/img7/8779/konfigurationsseite.png)

Am besten mit Drag-&-Drop-System, wenn das zu aufwändig ist wären Dropdownlisten in den Feldern gute Alernativen.


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: OlafSt am Juni 23, 2009, 12:46:23
Die Geschwindigkeit spielt bei Anzeigen wie diesen hier absolut keine Rolle...

Einzig der getaktete Betrieb des USB könnte ein Problem werden (USB kann nur in einem gewissen Takt Daten senden - IIRC sind das 10ms).


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 23, 2009, 20:30:33
Hi,

eigentlich hatte ich mir das so gedacht: ein Timer der alle 20 oder 50ms checkt ob sich Daten geändert haben, wenn ja wird eine USB-Message erzeugt und die neuen Daten an den AVR gesendet. Dieser Intervall soll vom Benutzer NICHT verändert werden können. Jetzt bekommt jedes Plugin einen einstellbaren Timer bei dem man einstellen kann, wie oft die Daten aktualisiert werden (Bissel verwirrend).

Timer USB (20ms) ---> Byte[] (aktuelle Daten) <--- Plugins (100ms bis 10sek)

Man kann sich das ganze wie ein SharedMemory Bereich vorstellen, bei dem die Plugins Daten ablegen, und der USB Timer bei änderungen der Daten diese losschickt.
Ob Leser/Schreiber Probleme auftreten und inwiefern das gehandhabt werden muss ist noch zu testen.

Vorteil dieser Lösung ist, man braucht nur eine Schieberegisterkanal und kann dennoch für jedes Element des Kanales eine "fast" belibig kleine oder große Aktualisierung erreichen.

GUI technisch hab ich mir noch nicht wirklich Gedanken gemacht, allerdings sollte Drag&Drop mit WindowsForms und C# eigetlich keine Probleme machen (unter Vorbehalt).

Gruß hackspider


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: mak am Juni 25, 2009, 13:59:48
Nicht schlecht die Idee, aber noch nicht hieb-und stichfest. Die Rate von 50 Hz scheint mir ein wenig zu hoch gegriffen, schliesslich haben Filme auch nur 25 Hz. Nimm 20 Hz, das reicht locker.

Ich würde an der Idee von einem High-Speed und einem Low-Speed Kanal festhalten. Ansonsten musst du immer alle Daten aktualisieren. Da sich die HDD und RAM-Auslastung allerhöchstens im Sekundentakt merklich verändert, wäre das nur ein Datenoverhead.

Eine Synchronisierung wäre unter Umständen auch gut, sodass Plugins mit gleicher Aktualisierungsrate auch zeitgleich aktualisiert werden und nicht 2 Aktualisierungen verursachen.



Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 25, 2009, 22:48:20
Hi,

find ich gut, dass sich hier noch andere darüber Gedanken machen  :bestens:.

Die Abschätzung von 20 bis 50ms war nur grob, da kann man ruhig auf die 50ms (20Hz) gehen. Mehr lohnt sich wirklich nicht. Eine Idee die mir heute Nachmittag noch gekommen ist: Man könnte den kleinsten eingestellten Plugintimer für die Aktualisierung des AVRs verwenden. Dass wäre dann wirklich die maximale Updaterate die man Verwenden kann und die am ressourcensparendste Lösung. Bis jetzt hab ich keine Messungen, wie ressourcenfressend Zugriffe auf USB sind, wäre interesannt zu wissen.

Der Lösungsansatz, mit 2 Kanälen ist eigentlich, keine falsche Idee, da CPU, HDD Zugriffe sich viel schneller ändern als z.B. der Füllstatus einer Partition, aber der Vorteil gegenüber einer Einkanallösung seh ich leider nicht wirklich. Wir reden beim Payload über 1 Byte pro Schieberegister, da ist es dann egal ob man 1 Byte oder 8 Bytes sendet, der Overhead der durch das USB-Protokoll auftritt dürfte um einiges größer sein.

Für die Synchronistation könnte man durchaus einen intelligenten Algorithmus schreiben, der Plugins mit gleicher Updaterate auf einen gemeinsamen Timer mappt.

Ich habe kommende Woche Abgabe zweier Projekte die im Moment meine Freizeit in Anspruch nehmen, werd aber schauen ob ich das ein oder andere schonmal Umsetzten kann. Hab erstmal heute bei meinem Elektroniker meines Vertrauens Schieberegister gekauft, leider nicht die 74HC595, die ich aufgrund ihres Ausgangsregister gerne eingesetzt hätte, sondern nur die 74HC164er. Zum testen sind auch die in Ordnung, in der finalen Lösung hätte ich aber doch gerne die 595er. Die ersten Test mit dem Schieberegister sehen ziehmlich gut aus, denke darauf kann man ausetzten.

Gruß hackspider


Titel: CPU Auslastungs-Anzeige über USB
Beitrag von: mak am Juni 26, 2009, 09:32:41
Ich hab mal ausgerechnet, wie lange eine Aktualisierung überhaupt dauert, gesetzt der Fall, dass der AVR die Bytes so schnell auf die Schieberegister schreibt wie sie ankommen. (Trifft dies überhaupt zu?)

Da das Schieberegister mit bis zu 55 MHz arbeiten kann, scheidet wohl USB 2.0 (480 Mbit/s) aus, doch werden bei USB 1.1 (12 MBit/s) für ein Byte nur 5.333 Mikrosekunden benötigt. Da das menschliche Auge viel zu langsam ist, frage ich mich, ob simple Schieberegister ohne Puffer nicht den gleichen Zweck erfüllen würden, zumindest bringen die anderen keinen Vorteil.

Deine Argumentation bezüglich dem Protokoll Overhead hat mich überzeugt, auch wenn ich nicht weiss, wie gross der Overhead tatsächlich ist. ;)


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juni 27, 2009, 14:20:23
Hi,

der relevante Takt, mit dem die Bits auf die Schieberegister geshoben werden, sind die 12MHz des AVRs. Das sind 3*83,3ns=250ns (3x : 1x Pin setzten 0/1 1x CLK auf High und wieder auf Low) pro Bit. Um ein ganzes Schieberegister (8bit) zu shiften sind das dann 8x250ns = 2000ns = 2µS. Da müssen schon ne ganze Menge Schieberegister dranhängen bis das Auge das sieht. D.h. Sorgen wegen der Geschwindigkeit, müssen wir uns an einer Anderen stelle machen :).
Der Grund für die Schieberegister mit Ausgangspuffer, war der Gedanke auch LCDs damit ansteuern zu können. Da kann man nicht mehr kontrollieren was mit dem LCD geschieht wenn andauernt etwas über den Enable Pin geshiftet wird.
Für eine reine LED Variante ist es egal, ob das Schieberegister einen Ausgangspuffer hat oder nicht.

Wie die Geschwindigkeit am USB Aussieht, konnte ich nicht wirklich in Erfahrung bringen, die Implementierung von VUSB ist jedenfalls ein USB 1.1 low speed device (1.5 Mbit/Sek). Allerdings schweigt sich die VUSB Homepage auch über jegliche Datentransferrate aus und für genaue Messungen hatte ich bis jetzt keine Zeit.

Was mich noch interessiert ist wie oft und wie schnell Daten an ein LCD gesendet werden müssen, damit man auch einen VU-Meter noch betreiben könnte, das wäre dann wirklich der absulute maximum Faktor was die Schaltung können müsste.

Gruß hackspider

EDIT: Reichelt Bestellung ist raus, bis dahin heißt es warten  :-\
EDIT2: Reichelt ist zwar da, aber im Moment häng ich hier grad in mitten der Klausuren, dannach gehts hier weiter



Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: nobody44 am Juli 20, 2009, 11:34:06
Hallo,
Da hier viele Bedenken haben wegen der Treibersignierung mal ein kleiner Vorschlag von mir:

Überlege dir eventuell auf die serielle Schnittstelle umzusteigen. Es gibt einen IC, der quasi als USB-RS232-Übersetzer (bzw. UART) fungiert. In Windows ist diese Schnittstelle entweder direkt ansprechbar oder über die serielle Schnittstelle, die bei der Installation der Treiber erstellt wird.

Ich hatte mal ein Testboard mit diesem IC und es lief sehr gut (ich hatte es auch für größere Geschwindigkeiten getestet und es lief gut). Allerdings kann ich mich nicht mehr an die Installation der Treiber erinnern und weiß also nicht, ob die Treiber signiert sind, aber auf der Homepage steht: "Microsoft WHQL certified."

Homepage des Herstellers des ICs: Link (http://www.ftdichip.com/)
Name des ICs: FT232R (ich weiß leider nicht mehr, welchen genau ich habe, da gibt es mehrere!)

Der größte Nachteil für Bastler: Die Chips sind nur in SMD-Bauweise vorhanden. Mir fiel der Umstieg schwer, aber ich würde jetzt bei SMD bleiben...


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juli 20, 2009, 15:06:57
Hi nobody44,

der FT232 ist mir bekannt, doch wollte ich ihn Aufgrund des Preises und der SMD Bauform nicht für das Projekt benutzen.

Der FT232 ist durchaus interessant, weil er züsätzlich noch den Takt für den AVR generieren könnte und die Uebertragungsgeschwindigkeit würde auch keine Rolle merh spielen. Selbst ausporbiert, ob die Treiber signiert sind hab ich noch nicht, aber wenn das so auf der Herstellerwebsite so steht wird das wohl stimmen.
Werde ich vielleicht nochmal austesten, wenn ich mal Lust dazu habe meine Win7/Vista Festplatte wieder einzubauen.

Der FT232RL ist nicht ganz ohne zu löten für mich als (mittlerweile schon jahrelanger) Löter war selbst das ein härterer Brocken. Weiß nicht wie man da einen Nachbau (ohne zusätzlicher Adapterplatine) für Anfänger hinbekommen könnte.

Da ich bei mir die Treibersignierungsgeschichte nie als sinnvoll und eigentlich nur als störend empfunden habe, bin ich (auch als Entwickler) auf den Zug "schalten wir die doch einfach ab und alles ist gut" aufgesprungen. Es soll einen Befehl für die Kommandozeile geben mit dem man ebenfalls die Signierung abschalten kann, allerdings von mir auch ungetestet. Werde ich bei Gelegenheit aber nachholen.

So am 23ten schreib ich meine letzte Klausur, dann gehts weiter.

Gruß hackspider


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Crawler am Juli 20, 2009, 17:53:27
Dem kann ich mich in diesem Fall anschließen. Bei der Verwendung eines FT232 gäbe es prinzipiell zwei Möglichkeiten:
a) wir befeuern dann ein Schieberegister, was keinen zusätzlichen µC voraussetzt
b) wir schließen an den FT232 einen µC, der dann die Anzeige übernimmt.
Wie man es dreht und wendet, wir haben wieder eine serielle Schnittstelle, quasi eine Altlast aus dem vergangenen Jahrhundert. ;)
Für den FT232 wären sicher auch wieder Treiber fällig, im PC-seitigen Programm muss die richtige Schnittstelle Com 0, Com 1 ... gewählt werden. Daher würde ich das den µC übernehmen lassen, auch wenn er erst einmal programmiert werden muss.
BTW: Eine kostengünstige FT232-Alternative sind die USB-Seriell-Wandler, die gibt es bspw. bei Reichelt für 'nen schmalen 5er, alternativ sind auch einige ältere Handy-Datenkabel geeignet, gibts bei eBay für 2€.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am Juli 20, 2009, 22:34:09
Das geht auch mit nem AVR: http://www.recursion.jp/avrcdc/

Ich habe es noch nicht ausprobiert, aber ich vermute stark, dass das Teil auch unter Vista oder Win7 keine zusätzlichen (unzertifizierten) Treiber benötigt.

Hack die Ausgabe mit RS232 ab und lass den AVR stattdessen die Bytes in Schieberegister schieben und du hast ziemlich genau das, was hier anscheinend viele wollen. ;)


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juli 20, 2009, 22:52:23
Hi,

ich zitier mal kurz aus der Readme zum Vista x64 Treiber

Code:
SUMMARY
=======
    Vista x64 does not accept unauthorized kernel-mode drivers. To use
    AVR-CDC on 64bit machine, you have to turn the "Driver Signature
    Enforcement" off by pressing the F8 function key during system boot up.

    "Driver Signature Enforcement Overrider" signs the driver as a
    testdriver and activates a testmode so you can load it without a real
    signature. You can find a more detailed description on the download
    page of the overrider
        http://www.ngohq.com/home.php?page=dseo

Für WinXP braucht man keine zusätzlichen Treiber, aber da besteht das Problem mit den signierten treibern ja nicht. Für Vista (+ Nachfolger) besteht das Problem immer noch.

Gruß hackspider


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am Juli 20, 2009, 23:05:28
Hmm, ok, dann nützt das wohl auch nix.

Die beste Lösung wäre natürlich, wenn einfach alle Menschen auf Linux oder freie Software allgemein umsteigen.
Da gibt es solche Probleme nicht. ;)

Man wird ja noch träumen dürfen...


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: TzA am Juli 20, 2009, 23:45:38
http://www.obdev.at/products/vusb/prjobdev.html
Man sollte sich mal deren Treiber ansehen, die haben das wohl seitdem Ast den Treiber für sein LCD-Interface benutzt hat noch etwas weiterentwickelt.
Wenn das Gerät wirklich nur ein HID (Human Interface Device) ist, braucht es keinen Windows-fremden Treiber, dementsprechen sollte das mit Vista/7 funktionieren.
Die Kommunikation ist da wohl durchaus bidirektional, man ist nicht nur auf Tastaturen und Mäuse beschränkt ;)


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am Juli 20, 2009, 23:50:40
Das ist es ja, was ich mir eigentlich auch von dem AVR-CDC versprochen habe.
Also dass es schlicht und ergreifend die Standardtreiber für einen virtuellen COM-Port benutzt.

Inwiefern das bei nem HID-Gerät besser funktionieren sollte, weiß ich nicht.

Außerdem meine ich mich zu erinnern, dass Olaf mal erwähnt hat, dass es eine ziemliche Qual ist, HID-Geräte anzusteuern.
Er hat damals glaube ich die LCD-Ansteuerung für den IO-Warrior gemacht.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: OlafSt am Juli 21, 2009, 09:03:24
Das ist richtig, Ast. Es ist eine Qual. Bereits der erste Schritt ist ein Prüfstein, denn:

- Tastatur ist ein HID
- Maus ist ein HID
- Mikro vom Headset ist ein HID (!)
- Die kleinen Lautsprecher ebenfalls (!)
- und und und

Tja... Und nun finde mal heraus, welches der ganzen HID's nun DEINES ist.
Ich würde eine Treiberlösung diesem Irrsinn jederzeit vorziehen.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am Juli 21, 2009, 12:44:56
Hi,

CDC LowSpeed wird in Vista/7 nicht mehr unterstützt. Man kann zwar mit einer 'lowbulk.sys' LowSpeed CDC reaktivieren, allerdings hat man dann wieder das Problem mit den Signierten Treibern --> CDC Lösung fällt also flach, bzw. hat keine Vorteile gegenüber einer Treiberlösung.

http://vusb.wikidot.com/usb-device-classes

Hier findet man alle Möglichkeiten welche USB-Klassen man implemenieren kann:

CDC Class Devices --> Schon erläutert^^
Custom Class Device --> Verwende ich im Moment (Problem: Treibersignierung)
Standard HID Class Device --> So wie ich verstanden habe unidirectional (bitter verbessern wenn falsch)
Custom HID Class Device --> Würde das Problem der Treibersignierung lösen, ist aufwändig

Am interessantesten finde ich die 'Vendor type requests sent to custom HID class device'-Idee. Man hat zwar noch das Problem der von Olaf genannten Gerätefindung, allerdings wenn man sein Gerät hat, kann man wieder ganz normal über die Endpoints Daten austauschen. Als Nachteil wird gelistet, dass man die libusb mit dem Code mitschleppen muss, allerdings ist das bei weitem besser als das gefrickel mit den Vistatreibern.

Nachdem ich die Layouts und einen Prototypen zum testen fertig habe, werde ich wohl erstmal eine Treiberlösung (geht am schnellsten/einfachsten) entwickeln.
Die 'Vendor type request over HID Class' stell ich mal hinten an.

So bin dann mal wieder für die Klausur lernen.

Gruß hackspider


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: nobody44 am Juli 21, 2009, 14:08:19
Zitat von: Crawler $txt[176] Juli 20, 2009, 17:53:27
Wie man es dreht und wendet, wir haben wieder eine serielle Schnittstelle, quasi eine Altlast aus dem vergangenen Jahrhundert. ;)
Für den FT232 wären sicher auch wieder Treiber fällig, im PC-seitigen Programm muss die richtige Schnittstelle Com 0, Com 1 ... gewählt werden. Daher würde ich das den µC übernehmen lassen, auch wenn er erst einmal programmiert werden muss.
BTW: Eine kostengünstige FT232-Alternative sind die USB-Seriell-Wandler, die gibt es bspw. bei Reichelt für 'nen schmalen 5er, alternativ sind auch einige ältere Handy-Datenkabel geeignet, gibts bei eBay für 2€.


Nichts für ungut, aber als Bastler muss man sich damit abfinden, "Altlast aus dem vergangenen Jahrhundert" zu benutzen:
- die parallele Schnittstelle ist alt
- THT ist alt (Through Hole Technology, Gegenstück von SMD)
- serielle Schnittstelle ist alt

Aber dennoch ist es für einen Bastler praktisch, diese Altlasten zu benutzen.
Kurz: Das "Argument" der Altlasten ist schwach ;)...


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: OlafSt am Juli 21, 2009, 14:28:31
Ist es nicht. Nämlich dann, wenn es für die potentiellen Nachbauer sinnlos wird.

Wie die parallele Schnittstelle, die de facto ausgestorben ist.
Wie die serielle Schnittstelle, die am Aussterben ist.
Wie THT, weil es für die Chiphersteller zu teuer in der Produktion ist und für große Produktionsreihen schlicht nicht mehr nachgefragt wird.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am Juli 31, 2009, 22:24:08
Ich habe gerade (im Zuge des Debuggens meines neuen USB-ISPs) einen Tiny mit AVR-CDC-Firmware ohne Probleme unter Vista zum laufen bekommen.

Ich hatte mich schon geärgert, dass ich beim Hochfahren vergessen habe diesen Testmodus zu aktivieren, aber es ging dann auch ohne.
Ich habe bei der automatischen Treiberinstallation einfach die der Firmware beiliegenden Dateien angegeben und das war's.

Der virtuelle COM-Port wurde installiert und ich konnte mit Putty mit dem AVR sprechen.

Anscheinend hat sich seit der Zeit mit dem Treibergewurschtel einiges bei dem Projekt getan: http://www.recursion.jp/avrcdc/driver.html#windows

P.S.: Jetzt muss ich das Dingen nur noch unter Linux zum laufen bringen.
Soviel dazu, dass es doch toll wäre, wenn alle einfach Linux benutzen würden...  ::)


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am August 1, 2009, 09:58:25
Moin Ast,

ich hab die letzten paar Tage mich ums Layout gekümmert. Ich werde mir jetzt erstmal einen Prototypen aufbauen, und dann beginne ich mit der konkreten Umsetzung der Firmware.

Das die CDC Lösung unter Vista/7 läuft überrascht mich ein bisschen, so wie ich das verstanden habe wird Bulktransfer bei LowSpeed devices nicht mehr unterstützt und ob das noch für die 7 Nachfolger gilt ist fraglich. Wenn man Bulktransfer + LowSpeed unter Linux betreiben will, so kommt man auch da nicht um den Kernelpatch drum rum.

Ich weiß noch nicht wirklich, welche USB-Class ich verwenden möchte, hängt dann davon ab welche Klasse (unter XP/Vista/7/Linux) am praktikabelsten ist.

Gruß hackspider


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am August 1, 2009, 22:50:18
Wenn ich die Infos auf der Homepage richtig interpretiere, wird die Sache mit dem Bulktransfer dadurch umgangen, dass zwischen den windows-eigenen CDC-Treiber und den USB-Treiber eine Zwischenschicht geschaltet wird, die die Bulk- in Interrupttransfers übersetzt.

Da stellt sich natürlich die Frage, wieso das noch niemand für Linux gemacht hat.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am August 1, 2009, 23:07:25
Hi,

Für Linux gibts das. Der Kernelpatch (http://spiffie.org/kits/usb7/driver_linux.shtml) ist auf der recursion Hompage unten verlinkt. Aber wie gesagt um einen Kernelpatch wird man nicht drum rum kommen.

So wie du das geschildert hast hab ich das auch verstanden. Allerdings verstehe ich nicht, wie du diese 'Zwischenschicht' (ist ja auch ein treiber 'lowcdc.sys') installieren konntest, ohne Abschaltung der Treibersignierung, da der lowcdc.sys kein Zertifikat dabei hat.

In diesem Zusammenhang würde mich noch stark interessieren ob du mit einem 32-oder 64bittigen Vista arbeitest ?

Gruß hackspider


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: Ast am August 2, 2009, 22:31:02
Der hat davor gewarnt, dass das Ding kein Zertifikat hat, ich hab auf "ist mir egal" geklickt und gut war.

Es handelt sich um ein 32-bit Vista.
Allerdings ist es nicht 100%ig original, weil ich, um es mit der Seriennummer meines Laptops aktivieren zu können, erst noch irgendwelche OEM Zertifikate von Acer installieren musste.

Aber ich bezweifle stark, dass das das so einfach das ganze Zertifizierungssystem ausgehebelt hat.


Titel: Re: CPU Auslastungs-Anzeige über USB
Beitrag von: hackspider am August 3, 2009, 17:53:41
Hi Ast,

das 32bittige Vista verhält sich wie XP wenn es um die Treibersignierung geht, da gibt es den 'mir egal'-Button noch. Bei der 64bit Version ist man auf die Zertifiakte angewiesen.

TzA hatte hier mal ein Link zu einem Programm geposted, auf dessen Basis es wohl eine Lösung geben soll die auch mit UAC funktionieren soll (alles erstmal wage). Es geht darum seinen Treiber selber zu signieren. Dafür muss man 'Testsigning' aktivieren. Wenn das funktioniert, würde ich den Treiber signieren und die Benutzer müssten lediglich den Testsigning Mode aktivieren (Einzeiler in der cmd).

Alles noch nicht nicht hieb und stichfest, aber ich versuche da mal bisschen Licht ins dunkle zu bringen wenn ich meinen Prototypen gebaut habe. Dafür war ich heute bei meinem Elektronik-Dealer um noch ein paar Kleinteile zu besorgen. Dann werde ich morgen mal mit dem Aufbau beginnen.

EDIT:

Wie versprochen hatte ich gestern den Prototypen aufgebaut. Und heute Morgen meine, noch unangepasste, Firmware programmiert. Was nach kleineren Problemen (ISP spieglverkehrt belegt, Fuse, ...) dann auch als USB Device erkannt wurde  :).
Jetzt werd ich mich dann an die Firmware setzten und mal schaun das ich meine Vista HD mal wieder an den PC anschließe.

Hier noch ein paar Pics vom Prototyp:

(http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-320x240/DSCF4799.jpg) (http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-1024x768/DSCF4797.jpg](http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-320x240/DSCF4797.jpg)[/url]

[url=http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-1024x768/DSCF4798.jpg](http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-320x240/DSCF4798.jpg)[/url]

[url=http://hackspider.toxic-link.net/Bilder/USB%20Load/5.8.2009-1024x768/DSCF4799.jpg)


Gruß hackspider


© 2001-2009 MODDING-FAQ FORUM | SMF
Alle Rechte vorbehalten.