Projektbericht: Computer-LCD
(Bitte auf Bilder klicken, um sie zu vergrößern)
Als ich meinen neuen Computer bekommen habe, war ich natürlich erstmal stolz auf die geballte Rechenpower, die mir, einem total an den langsamen Discounter Schlepptop gewöhnten, ungeahnte Grafikerlebnisse eröffneten. Den lauten Lüfter meines Schrottbooks war ich zwar gewohnt, dessen Abgase lagen aber auch bei +70°C, sodass ich diese in Kauf nehmen musste. Nun habe ich aber unter Normallast weniger als die Hälfte an Temperatur, sodass die Lüfter dann schon das Gefühl von unnötigem Lärm vermitteln.
Dachte ich mir halt, lade ich mir SpeedFan runter, damit soll man angeblich die Lüfterdrehzahlen regeln können. Also runtergeladen - installiert - rumprobiert - geht nicht. Nur die Drehzahl des CPU-Lüfter konnte geregelt werden. Kurzerhand das Gehäuse geöffnet - Mainboard inspiziert - geärgert. Mein Mainboard hatte zwar Lüfteranschlüsse, diese hatten aber keinen PWM Ausgang. Hätte ich für 20€ mehr haben können, habe ich aber beim konfigurieren nicht drauf geachtet.
Aber so dolle geärgert habe ich mich dann auch nicht. Ich wollte ja schon immer mal ein Display ansteuern, und wieso dann nicht gleich daraus eine Lüftersteuerung bauen? Außerdem wollt ich ja auch mit USB rumspielen, darüber kann man ja sicherlich die Temperaturen und auch andere Daten abrufen.
Und so begann dann alles. Weil ich das ganze nicht wie bei der Leduhr von Anfang an schreibe, sondern jetzt kurz vor Schluss alles aufschreibe werde ich das ganze einfach mal in "Bauphasen" einteilen. Also fangen wir doch mal an:
Phase 1: Planung, erste Bestellung und der Kampf mit dem Display
Das allererste, was gemacht wurde, war ein Display rauszusuchen. Weil ich da nicht viel Erfahrung hatte habe ich einfach nach dem Format entschieden. Weil es von den Maßen ganz gut in eine Frontblende passte habe ich mir das EA-DIP122 in Blau/Weiss bei Reichelt bestellt. Dann wurde auch gleich mit dem Programmieren angefangen. Einfach ein AtMega8 ans Display, Programmer ran und los gings. Vorerst musste erstmal die Pinbelegung verstanden werden, aber das ging recht schnell.
Beim Programmieren gings dann schon los. Ich hab ein Display, ein paar komische Diagramme im Datenblatt und jetzt wusste ich nicht weiter. Also habe ich mir viele Tutorials im Internet durchgelesen, war aber immernochnicht schlauer. Das einfachste, was ich dann machen konnte war, mir einige fertige LCD-Librarys runterzuladen. Allerdings halte ich von so Dingen wie "einfach Kopieren" und dann gehts nicht viel (USB ist da eine Ausnahme ;) ). Deswegen habe ich die Librarys nicht eingefügt, sondern habe mich in jeden der Codes "eingearbeitet", bis ich letztendlich verstanden habe, wie es geht. Danach war es auch kinderleicht die ersten Striche und Punkte auf das Display zu bekommen. Klar habe ich einige Funktionen zu 99% einfach übernommen, das lag aber meist daran, dass ich nicht sehr lange in C programmiere und mich mit sowas wie Strings (ich meine natürlich die in der Programmiersprache (o: ) überhaupt nicht kannte. Am Ende hatte ich dann also eine nicht ganz ausgereifte LCD-Library, die ich auch vollkommen verstand.
Etwas, das mich jetzt noch ärgert ist, dass das Display eine Kontrastspannung von ca. -4V benötigt. Zuerst habe ich hierfür einfach eine Batterie genommen und den Pluspol an Masse geklemmt. an dem Minuspol lagen dann also ca. -6V an. Diese wurden noch mit einem Poti eingestellt. Um das ganze aber unabhängig zu machen musste ich die Spannung noch extra mit einem NE555 erzeugen, was die Schaltung noch etwas größer machte (aber im PC-Gehäuse ist ja viel Platz).
Phase 2: Leistungstuning, USB und meine Lieblingsmeldung
Ja, der Einleitungsteil hat es eigentlich schon gesagt, der von mir anfangs benutze Mega8 hatte einfach zu wenig Portpins und Porterweiterungen über IIC wollte ich vermeiden, weil ich sowas auch noch nie hatte. Außerdem habe ich so ein wenig mehr Speicherplatz für meinen Code, welcher bestimmt bei der Fülle an geplanten Funktionen noch riesig wird. Mit dem neuen Controller wurde auch gleich vom internen Oszillator auf einen externen 12Mhz Quarz umgestellt.
Es war jetzt aber soeine Sache mit dem USB. Benutzen will ich V-USB, weil dann kein extra Controller oder ähnliches notwendig ist. Außerdem wird das von der Firmware meines USBISP Programmers auch verwendet, deswegen dachte ich, das kann nicht allzuschwer sein. Aber die Fülle an Optionen in der Konfiguration von V-USB hat vorerst über mich gesiegt, was wohl auch an der nervigen Fehlermeldung von Windows "USB-Gerät wurde nicht richtig erkannt" liegt. Nach ein paar Versuchen habe ich die USB Anbindung erstmal zu Seite geschoben und mich der Hauptfunktion gewidmet.
Eine PWM-Routine war schnell dahingezaubert und ließ schnell die erste LED (als Lüfterersatz) dimmen. Die Steuerung wurde erstmal durch 2 Taster für größer und kleiner übernommen.
Phase 3: Eine Benutzeroberfläche entsteht
Und nun sind wir auch schon beim aktuellen Stand: Vorgestern kam mein Drehencoder mit Aluminiumknopf von Reichelt an. Promt habe ich die Taster durch den Encoder ersetzt und es ging auch alles nach ein paar Minuten. Als nächstes wurde schonmal ein zweiter Ausgang mit einer weiteren Led simuliert, damit ich die Benutzeroberfläche anfangen konnte. Immoment ist sie noch recht simpel aber trotzdem sehr intuitiv bedienbar. Nun ließen sich 2 Kanäle unabhängig durch mein Softwarepwm einstellen.
Sobald dies einwandfrei lief wurde die erste Led durch einen Transistor ersetzt und man konnte den PWM-Eingang eines PWM Lüfters ansteuern. Nur die Frequenz musste ein wenig runtergesetzt werden, weil sonst der Lüfter bei 0% wieder schneller wurde.
Am nächsten morgen ging es dann nach intensivem Kopfzerbrechen weiter mit der Ansteuerung von nicht-PWM Lüftern. Ursprünglich wollte ich für diese eine Umschaltung zwischen 5V und 12V realisieren, mir kam aber nur Ideen in den Sinn, die Schaltungstechnisch Nachteile hatten oder nicht funktionierten. Also habe ich für diese einen DAC entwickelt, der für mein PWM-Signal passte. Dabei musste ja auch das 5V PWM-Signal in 0-12V Gleichspannung umgewandelt werden. Wie das dann aussah habe ich mal angehängt.
Der letzte Stand ist also, dass die Lüfteransteuerung wunderbar funktioniert und auch die Menüführung nimmt Gestalt an. Das größte Problem wird wohl die Kommunikation über USB.
Die weitere Entwicklung sollte bald folgen, aber dafür muss jetzt erstmal gebastelt werden - Fortsetzung folgt...
Kommentarbox