Forum: Mikrocontroller und Digitale Elektronik Projekt: Digitale Steuerung der Gehäuseelektronik im PC


von Marlon S. (raspberrypi-mp)


Lesenswert?

Hallo liebe µC-Gemeinde!

Ich arbeite zur Zeit an einem (für mich) extrem umfangreichen Projekt. 
Ich möchte mit einem Raspberry Pi sämtliche Elektronik (abgesehen von 
der eigentlichen PC-Hardware) in einem (noch zu bauenden) PC-Gehäuse 
steuern. In den vergangenen Monaten habe ich fast ausschließlich 
Recherchearbeit betrieben und möchte jetzt so langsam mit der Praxis 
beginnen.
Da hier manche Leute, wie ich gesehen habe, extrem allergisch auf 
Unklarheiten, bestimmte Fragestellungen, Formulierungen uvm. reagieren, 
möchte ich gleich Folgendes anmerken:

- Bitte KONSTRUKTIVE Beiträge/Kritik
- Ich bin noch NEU hier, daher bitte nicht gleich hauen
- Ich bin mir noch NICHT über alle Punkte des Projekts im Klaren
- Ich habe KEIN Elektronik-Studium abgeschlossen
- Ich habe NICHT jeden Beitrag des Forum gelesen
- Ich lasse mich jederzeit gerne FREUNDLICH eines Besseren belehren

Tut mir Leid, dass ich das jetzt so schreiben musste, aber manche Leute 
hier werden bereits bei den kleinsten Dingen sehr ungemütlich und dem 
möchte ich vorbeugen. Wir sind doch alle Menschen und machen Fehler. 
Deswegen lasst uns freundlich bleiben und die Dinge sachlich klären :)

Hinweis:
Möglicherweise ist dieser Post zu Anfang noch etwas unstrukturiert, da 
ich in diesem Moment noch nicht genau weiß, was ich alles schreiben 
werde. Nach und nach wird dieser Beitrag durchstrukturiert mit Kapiteln 
wie Vorwort, Einleitung, Anforderungen, To-Do-Liste usw. aber erstmal 
möchte ich das Wesentliche festhalten.

So, und nun zum eigentlichen Thema:

Ich möchte wie bereits geschrieben alles in meinem Gehäuse digital 
steuern können. Das fängt bei dem Schalten der Netzspannung an und geht 
über das Auslesen von Temperaturen, Flussraten und Drehzahlen bis hin 
zur Steuerung eines komplexen RGB-Beleuchtungssystems basierend auf 
Messgrößen, Audiosignalen oder bestimmten Vorgaben.
Der Mehrwert einiger Vorhaben darf zu Recht bezweifelt werden, aber das 
ganze Projekt läuft sowieso eher unter dem Motto "Weil's halt geil ist!" 
;)

Ich bin Student (Biotechnologie) und verfüge daher bei Bedarf über gute 
Messinstrumente, eine Vielzahl von Bauteilen sowie eine Werkstatt mit 
CNC-Fräsen und allem was dazu gehört. Preislich sollte einiges drin 
sein, da ich das Ganze als Studienprojekt angemeldet habe und deswegen 
ein Teil übernommen wird und ich ein Budget von ca. 2000€ eingeplant 
habe.

Das soll hinterher dabei rauskommen:

+ Features:
 - Selbst designtes und gefertigtes PC-Gehäuse
 - Mastersteuerung durch Raspberry Pi
 - 7" (10") Touchscreen über HDMI
 - 4 LCD-Displays mit RGB-Hintergrundbeleuchtung
 - Einfache Überwachung/Steuerung über grafische Oberfläche
 - Wasserkühlung mit 2 Kreisläufen und einigen Ventilen
 - Zwei unabhängige Stromversorgungen
 - Leichter Austausch von PC-Komponenten auch mit WaKü
 - Flexibles und unsichtbares Kabelsystem
 - Umfangreiche und variable Beleuchtung
 - Kommunikation mit der Außenwelt über individuelles Backpanel
 - Integrierter Gigabit-Switch


+ Das Gehäuse:
 - Vollständger Selbstbau
 - Maße: ca. 28x70x80 cm (BxTxH)
 - Material: Aluminium, eloxiert, 2mm stark
 - Gewicht: hoffentlich nicht über 50 kg
 - Ansteckbare Rollen für den Transport
 - Design noch offen
 - Grundprinzip steht fest: 3 Etagen mit Kabeln und Rohren dazwischen
 - Motorisierte Elemente (Servo oder Schrittmotor)
   -> Öffnung/Schließung von Lüftungsklappen im Gehäusedeckel
   -> Touchscreen ausfahrbar, um Raspberry Pi entnemhen zu können


+ Das Interface:
 - Webinterface mit HTML, CSS und Javascript
   -> Auch Steuerung über (W-)Lan/Internet möglich
 - Mehrere Menüs: Übersicht, Details, Konfiguration
 - Aufbereitung und grafische Darstellung von Datenbank-Inhalten


+ Die Wasserkühlung:
 - Leistungsfähige Doppelkreislauf-Wasserkühlung
 - Je Kreislauf ein 480er Radiator (Vier 120mm-Lüfter pro Radiator)
 - Pumpe PWM-gesteuert (Eheim-Mod von Aqua Computer)
 - Ventile, um verschiedene Programme fahren zu können:
   -> Arbeitsbetrieb
   -> Kühlflüssigkeit ablassen
   -> Spülgang
   -> Neubefüllung
 - Oben zwei Anschlüsse zum Einfüllen
 - Unten zwei Anschlüsse zum Ablassen
 - Möglicher Anschluss weiterer (externer) Radiatoren

+ Beleuchtungssystem:
 - Pro Lüfter (ca. 16-20 Stück, warum? Darum! :D) vier RGB-LEDs
   -> ca 64-80 LEDs = bis zu 240 PWM-Kanäle
 - Mehrere beleuchtete Regionen wie Front, Deckel, Netzteil, Pumpen etc.
 - Jede LED einzeln ansteuerbar, um grenzenlose Möglichkeiten zu haben
 - Beleuchtung von vielen Faktoren steuerbar:
   -> Sensor-Messwerte (Temperaturen, Drehzahlen, Erschütterung...)
   -> System-LEDs (Mainboard)
   -> Audiosignale
   -> Programm-Ereignisse
   -> Uhrzeit/Datum
   -> Vordefinierte Szenarien
   -> Und alles kombiniert! (Yeah, 3 Jahre programmieren! xD)
 - Über 10 externe High-Power RGB-Ausgänge auch Zimmerbeleuchtung uvm. 
steuerbar

+ LCD-Displays:
 - RGB-Beleuchtung
 - Ansteuerung über I²C
 - Darstellung von Messdaten, Ereignissen, Nachrichten, Datum/Uhrzeit...
 - Im Seitenteil angebracht, vorne wäre ja Schwachsinn ;)

+ Weitere Ideen (noch nicht fest eingeplant):
 - RFID
 - Fingerabdruckscanner
 - Gehäuseverriegelung
 - Detektion von Undichtigkeiten, daraufhin Notabschaltung (Tipps dazu?)
 - Weiterleitung von Ereignissen unter Windows via SSH
 - Getränkekühler (schonmal gesehen^^) aber wahrscheinlich kein Platz
 - Verdunklung der Fenster mit elektrischer Verdunklungsfolie


Naja, das ist (erstmal) alles, was mir gerade so einfällt. Zu den 
meisten der Dinge habe ich mich auch schon informiert, aber in der 
Praxis hakt es dann ja doch wieder an allen Ecken und Enden ;)
Auf die eigentlichen elektronischen Hintergründe bin ich bisher noch 
nicht eingegangen, das weiß ich. Das wird alles in ein eigenes Kapitel 
kommen, wo ich dann auch ausführlicher als in Stichpunkten drauf 
eingehen werde und auch noch einige Fragen habe. Diese werden sich dann 
wahrscheinlich meistens auf Aspekte der konkreten Umsetzung richten.
Ich werde auch noch eine Kategorie mit Fragen, Vorschlägen und Ideen 
erstellen, eine To-Do-Liste und eine mit den erreichten Zielen erstellen 
und Aktuelles hervorheben.


Zuerst hoffe ich jedoch auf ein bisschen Feedback und Fragen eurerseits, 
bevor ich hier alles mit Fragen vollkleistere ;)

: Bearbeitet durch User
von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

Klingt garnicht mal so interssant.

von ??? (Gast)


Lesenswert?

...und die Frage lautet?

von Kom (Gast)


Lesenswert?

ist doch klar: "Tipps dazu?" :P

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> ...und die Frage lautet?

Ein Problem, mit dem ich mich schon länger rumschlage, sind die LCDs.
Ich steuere mit dem Raspberry Pi über den I²C-Bus ein LCD-Backpack an, 
das dann wiederum die Pins des Displays ansteuert. Aus irgendeinem Grund 
wird mir der Inhalt extrem langsam angezeigt. Es funktioniert zwar 
prinzipiell, aber bis alle vier Zeilen neu geschrieben wurden, vergeht 
ca. eine halbe Sekunde. Normalerweise sollte das ja in wenigen 
Sekundenbruchteilen erledigt sein. Die Software ist im Moment in Python 
geschrieben.
Ich verwende folgende Library:
1
'''
2
Copyright (C) 2012 Matthew Skolaut
3
 
4
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
5
associated documentation files (the "Software"), to deal in the Software without restriction,
6
including without limitation the rights to use, copy, modify, merge, publish, distribute,
7
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
8
furnished to do so, subject to the following conditions:
9
 
10
The above copyright notice and this permission notice shall be included in all copies or substantial
11
portions of the Software.
12
 
13
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
14
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
15
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
16
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
17
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18
'''
19
 
20
import smbus
21
from time import *
22
 
23
# General i2c device class so that other devices can be added easily
24
class i2c_device:
25
def __init__(self, addr, port):
26
self.addr = addr
27
self.bus = smbus.SMBus(port)
28
 
29
def write(self, byte):
30
self.bus.write_byte(self.addr, byte)
31
 
32
def read(self):
33
return self.bus.read_byte(self.addr)
34
 
35
def read_nbytes_data(self, data, n): # For sequential reads > 1 byte
36
return self.bus.read_i2c_block_data(self.addr, data, n)
37
 
38
 
39
class lcd:
40
#initializes objects and lcd
41
'''
42
Reverse Codes:
43
0: lower 4 bits of expander are commands bits
44
1: top 4 bits of expander are commands bits AND P0-4 P1-5 P2-6
45
2: top 4 bits of expander are commands bits AND P0-6 P1-5 P2-4
46
'''
47
def __init__(self, addr, port, reverse=0):
48
self.reverse = reverse
49
self.lcd_device = i2c_device(addr, port)
50
if self.reverse:
51
self.lcd_device.write(0x30)
52
self.lcd_strobe()
53
sleep(0.0005)
54
self.lcd_strobe()
55
sleep(0.0005)
56
self.lcd_strobe()
57
sleep(0.0005)
58
self.lcd_device.write(0x20)
59
self.lcd_strobe()
60
sleep(0.0005)
61
else:
62
self.lcd_device.write(0x03)
63
self.lcd_strobe()
64
sleep(0.0005)
65
self.lcd_strobe()
66
sleep(0.0005)
67
self.lcd_strobe()
68
sleep(0.0005)
69
self.lcd_device.write(0x02)
70
self.lcd_strobe()
71
sleep(0.0005)
72
 
73
self.lcd_write(0x28)
74
self.lcd_write(0x08)
75
self.lcd_write(0x01)
76
self.lcd_write(0x06)
77
self.lcd_write(0x0C)
78
self.lcd_write(0x0F)
79
 
80
# clocks EN to latch command
81
def lcd_strobe(self):
82
if self.reverse == 1:
83
self.lcd_device.write((self.lcd_device.read() | 0x04))
84
self.lcd_device.write((self.lcd_device.read() & 0xFB))
85
elif self.reverse == 2:
86
self.lcd_device.write((self.lcd_device.read() | 0x01))
87
self.lcd_device.write((self.lcd_device.read() & 0xFE))
88
else:
89
self.lcd_device.write((self.lcd_device.read() | 0x10))
90
self.lcd_device.write((self.lcd_device.read() & 0xEF))
91
 
92
# write a command to lcd
93
def lcd_write(self, cmd):
94
if self.reverse:
95
self.lcd_device.write((cmd >> 4)<<4)
96
self.lcd_strobe()
97
self.lcd_device.write((cmd & 0x0F)<<4)
98
self.lcd_strobe()
99
self.lcd_device.write(0x0)
100
else:
101
self.lcd_device.write((cmd >> 4))
102
self.lcd_strobe()
103
self.lcd_device.write((cmd & 0x0F))
104
self.lcd_strobe()
105
self.lcd_device.write(0x0)
106
 
107
# write a character to lcd (or character rom)
108
def lcd_write_char(self, charvalue):
109
if self.reverse == 1:
110
self.lcd_device.write((0x01 | (charvalue >> 4)<<4))
111
self.lcd_strobe()
112
self.lcd_device.write((0x01 | (charvalue & 0x0F)<<4))
113
self.lcd_strobe()
114
self.lcd_device.write(0x0)
115
elif self.reverse == 2:
116
self.lcd_device.write((0x04 | (charvalue >> 4)<<4))
117
self.lcd_strobe()
118
self.lcd_device.write((0x04 | (charvalue & 0x0F)<<4))
119
self.lcd_strobe()
120
self.lcd_device.write(0x0)
121
else:
122
self.lcd_device.write((0x40 | (charvalue >> 4)))
123
self.lcd_strobe()
124
self.lcd_device.write((0x40 | (charvalue & 0x0F)))
125
self.lcd_strobe()
126
self.lcd_device.write(0x0)
127
 
128
# put char function
129
def lcd_putc(self, char):
130
self.lcd_write_char(ord(char))
131
 
132
# put string function
133
def lcd_puts(self, string, line):
134
if line == 1:
135
self.lcd_write(0x80)
136
if line == 2:
137
self.lcd_write(0xC0)
138
if line == 3:
139
self.lcd_write(0x94)
140
if line == 4:
141
self.lcd_write(0xD4)
142
 
143
for char in string:
144
self.lcd_putc(char)
145
 
146
# clear lcd and set to home
147
def lcd_clear(self):
148
self.lcd_write(0x1)
149
self.lcd_write(0x2)
150
 
151
# add custom characters (0 - 7)
152
def lcd_load_custon_chars(self, fontdata):
153
self.lcd_device.bus.write(0x40);
154
for char in fontdata:
155
for line in char:
156
self.lcd_write_char(line)
157
 
158
class tmp102:
159
def __init__(self, addr, port):
160
self.sensor = i2c_device(addr, port)
161
 
162
# read a register
163
def read_reg(self, reg):
164
return self.sensor.read_nbytes_data(reg, 2)
165
 
166
# read the current temp in celsius
167
def read_temp(self):
168
tempraw = self.read_reg(0)
169
return tempraw[0] + (tempraw[1] >> 4) * 0.0625

von Floh (Gast)


Lesenswert?

Warum eine Wasserkühlung, wenn du sowieso 16-20 Lüfter verwenden willst? 
Sie bringt dann nicht mehr den Vorteil eines leisen Betriebs. 
Kühlungswirkung ist meist schlechter, da sie nur dort kühlt, wo der 
Kühler montiert ist und nicht auch die Umgebung.

Außerdem ist mir noch schleierhaft, wie du alles in ein PC-Gehäuse 
unterbringen willst. Hast du für die räumliche Aufteilung schon mal 
Skizzen gemacht?

von Marlon S. (raspberrypi-mp)


Lesenswert?

Ja, da habe ich schon ganz viel rumskizziert ^^
Grundsätzlich sollen es 3 Etagen werden. Oben die Elektronik (15cm 
Höhe), in der Mitte Mainboard & Co. und unten die beiden Netzteile und 
die Pumpen. Da die Breite 28cm beträgt, sollte der Platz nicht so das 
Problem werden.
Und die Lüfter... Naja, ist auch irgendwie was optisches :D
Aber wie du schon sagtest, kühlt die WaKü nur lokal, da schadet ein 
bisschen Wind ja nicht :P

EDIT: Weitere Frage! Kann man hier irgendwie elegant Spoiler oder Links 
einfügen? Habe diese Funktionen nicht unter den Formatierungsoptionen 
gefunden.

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

Kom schrieb:
> ist doch klar: "Tipps dazu?" :P

für was? ;-)


Marlon S. schrieb:
> Zuerst hoffe ich jedoch auf ein bisschen Feedback und Fragen eurerseits,
> bevor ich hier alles mit Fragen vollkleistere ;)

was möchtest du gern von uns? Willst du als "toller Hecht" bezeichnet 
werden, weil du so tolle Sachen machen möchtest?

Jetzt mal im Ernst: hier interessiert keinen was du vor hast! Entweder 
stellst du eine Lösung zu einem Problem vor, oder du stellst eine Frage 
zu deinem Problem!

Gute Nacht!

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Kom schrieb:
>
> was möchtest du gern von uns? Willst du als "toller Hecht" bezeichnet
> werden, weil du so tolle Sachen machen möchtest?
>
> Jetzt mal im Ernst: hier interessiert keinen was du vor hast! Entweder
> stellst du eine Lösung zu einem Problem vor, oder du stellst eine Frage
> zu deinem Problem!

Nein, ich wollte eher eine Art Projektseite einrichten, wo ich die ganze 
Sache nach und nach entstehen lassen kann, wo andere Leute sich 
Anregungen holen können und alles dokumentiert ist. Aber mir scheint 
irgendwie, dass µC.net kein geeigneter Ort dafür ist, da die 
Bearbeitungsmöglichkeiten auf ein Minimum beschränkt sind :/

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> ...LCD-Backpack...

ähmm, was ist das?

Marlon S. schrieb:
> Normalerweise sollte das ja in wenigen
> Sekundenbruchteilen erledigt sein.

wer sagt das?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> ...LCD-Backpack...
>
> ähmm, was ist das?

Ine kleine Platine, die ein I²C-Signal auf den 16-Pin-Anschluss des LCDs 
übersetzt. Im Prinzip ein angepasster I/O-Expander. Google liefert 
nähere Infos.

> Marlon S. schrieb:
>> Normalerweise sollte das ja in wenigen
>> Sekundenbruchteilen erledigt sein.
>
> wer sagt das?

Hast du schon mal ein (brauchbares) Display gesehen, das für den 
Bildaufbau derart lange braucht? Es ist ja sogar nur ein 4x20 character 
Display, da sollte das (wie in vielen Videos auf YT auch zu sehen) 
einigermaßen schnell gehen.

von spess53 (Gast)


Lesenswert?

HI

>Aber mir scheint
>irgendwie, dass µC.net kein geeigneter Ort dafür ist, da die
>Bearbeitungsmöglichkeiten auf ein Minimum beschränkt sind :/

>Ich möchte wie bereits geschrieben alles in meinem Gehäuse digital
>steuern können. Das fängt bei dem Schalten der Netzspannung an und geht
>über das Auslesen von Temperaturen, Flussraten und Drehzahlen bis hin
>zur Steuerung eines komplexen RGB-Beleuchtungssystems basierend auf
<Messgrößen, Audiosignalen oder bestimmten Vorgaben.

Interessiert eigentlich den Gasmann. Es sei denn, du bist in deinen PC 
verliebt.

MfG Spess

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Aber mir scheint
> irgendwie, dass µC.net kein geeigneter Ort dafür ist, da die
> Bearbeitungsmöglichkeiten auf ein Minimum beschränkt sind :/

...also ich finde hier eine ganze Reihe von Projektseiten, die von 
vielen Leuten bearbeitet und genutzt werden. Du nicht? Was vermisst du?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> ...also ich finde hier eine ganze Reihe von Projektseiten, die von
> vielen Leuten bearbeitet und genutzt werden. Du nicht? Was vermisst du?

Ich vermisse die Funktion, meinen ersten Beitrag zu bearbeiten. Gibt es 
da einen geheimen Trick für? Ich bekomme nämlich immer eine Meldung, 
dass ich ihn nicht ändern könne, weil danach neue Beiträge erschienen 
sind.

von Frank K. (fchk)


Lesenswert?

Ich hätte dafür keinen PI genommen. Warum?

Du brauchst IOs. Viele IOs, so wie ich das sehe. Die hat der PI nicht, 
d.h. das wird extra Aufwand, und das zeigt, dass der PI nicht die ideale 
Plattform dafür ist. Ja, er ist billig. Ja, er ist dick in den Medien 
drin. Aber es gibt anderes, besseres, was nicht so viel Publicity hat.

Der PI hat relativ viel Rechenleistung, aber die brauchst Du hier nicht. 
Was Du eher brauchen könntest, ist Echtzeitfähigkeit. Das heißt, dass 
der Controller in einer definierten Zeit reagiert, und zwar immer und 
unter alles Umständen. Beispielsweise Notaus bei Leckagen. Linux ist für 
Echtzeitgeschichten nicht ideal, man hat ihm zwar einiges beigebracht, 
aber es wurde nicht dafür entwickelt.

Ich hätte mich gegen Linux und für einen kleinen Echtzeitkernel auf 
einer Mikrocontrollerplattform wie ARM Cortex M3 oder PIC32MX 
entschieden. Für die effiziente Steuerung von Hardware ist das die 
bessere Wahl. Das beginnst Du ja auch langsam bei Deinem I2C-Display zu 
merken.

Webserver ... ja, kann man machen. Ist ja auch schick. Ich hätte die 
Steuerung vielleicht erstmal einfach als USB-HID an den Rechner gehängt. 
Die ganzen gängigen Mikrocontroller haben ja alle USB eingebaut. 
Und/oder an den SMBUS auf dem Mainboard, an dem ja auch die ganzen 
internen Sensoren hängen. Das wäre auch eine nette Sache. Auf 
Server-Mainboards gibt es IPMI-Module, die darüber den Server 
überwachen.

fchk

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Ine kleine Platine, die ein I²C-Signal auf den 16-Pin-Anschluss des LCDs
> übersetzt. Im Prinzip ein angepasster I/O-Expander.

ahh, dann schreibe es auch so hin!

Marlon S. schrieb:
> Google liefert nähere Infos.

na dann gebe mal das Wort LCD-Rucksack (...natürlich in Engl....) dort 
ein und wundere dich über die Ergebnisse!

Marlon S. schrieb:
> Hast du schon mal ein (brauchbares) Display gesehen, das für den
> Bildaufbau derart lange braucht? Es ist ja sogar nur ein 4x20 character
> Display, da sollte das (wie in vielen Videos auf YT auch zu sehen)
> einigermaßen schnell gehen.

vielleicht sind ja die Leitungslängen bis zum Rucksack auf dem Rücken zu 
lang?

Jetzt mal im Ernst: keiner kennt die Schaltung/Datenblatt deines 
"LCD-Rucksacks" etc.! Wie sieht es denn aus, wenn du mal mit generischen 
Kommandozeilen-Tools (i2cdetect, i2cset, i2cget) die Sache probierst?

von Marlon S. (raspberrypi-mp)


Lesenswert?

Wenn ich das alles über nen internen USB-Port realisieren könnte, wäre 
das natürlich richtig cool ^^
Nach wie vor würde ich allerdings gern einen Touchscreen einbauen und 
völlig unabhängig vom Hauptsystem sein. Für die Echtzeitanwendungen 
hatte ich mir auch schon nen kleinen Arduino oder einfach nur einen PIC 
gedacht. ICh brauche auf jeden Fall etwas für die LED-Beleuchtung. Bei 
30 "Frames" pro Sekunde komme ich auf einen Traffic von 80-100 kbps, 
wenn cih das richtig berechnet habe.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> weil danach neue Beiträge erschienen
> sind.

dann wird es wohl auch so sein! Spätestens, wenn du eine Antwort auf 
einen Beitrag bekommen hast, ist selbiger nicht mehr editierbar.

von Eumel (Gast)


Lesenswert?

Was hast du denn so elektronikmäßig oder mit Mikrocontrollern schon 
gemacht?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> Ine kleine Platine, die ein I²C-Signal auf den 16-Pin-Anschluss des LCDs
>> übersetzt. Im Prinzip ein angepasster I/O-Expander.
>
> ahh, dann schreibe es auch so hin!
>
> Marlon S. schrieb:
>> Google liefert nähere Infos.
>
> na dann gebe mal das Wort LCD-Rucksack (...natürlich in Engl....) dort
> ein und wundere dich über die Ergebnisse!

Okay, das hätte ich jetzt nicht vermutet :D
Ich achte beim nächsten mal drauf ;)

> vielleicht sind ja die Leitungslängen bis zum Rucksack auf dem Rücken zu
> lang?

Nein, das sind gerade mal 20-30cm...

> Jetzt mal im Ernst: keiner kennt die Schaltung/Datenblatt deines
> "LCD-Rucksacks" etc.! Wie sieht es denn aus, wenn du mal mit generischen
> Kommandozeilen-Tools (i2cdetect, i2cset, i2cget) die Sache probierst?

Ich finde auf die Schnelle grad nicht den Chip, der darin verbaut ist... 
Per i2cdetect lässt sich das Ding finden und hat auch die eingestellte 
Adresse. Die Ausgabe funktioniert ja auch,m nur halt viel zu langsam :/

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> ICh brauche auf jeden Fall etwas für die LED-Beleuchtung. Bei
> 30 "Frames" pro Sekunde komme ich auf einen Traffic von 80-100 kbps,
> wenn cih das richtig berechnet habe.

"Beleuchtung" und "Frames" passen für mich nicht zusammen. Was willst du 
mit 30 Frames in der Sekunde beleuchten?

Achso, bevor ich es vergesse zu fragen: wozu brauchst du 240 PWM-Kanäle?

von Marlon S. (raspberrypi-mp)


Lesenswert?

Eumel schrieb:
> Was hast du denn so elektronikmäßig oder mit Mikrocontrollern schon
> gemacht?

Elektronikmäßig an sich schon relativ viel herumgebastelt. Hab mir mal 
einen Näherungssensor gebaut. (Okay, das ist nicht relativ viel xD)
Mit µCs noch nicht soo viel, aber mit den grundlegenden Prinzipien bin 
ich vertraut, denke ich. Möchte jetzt aber auch nicht noch monatelang 
Dinge mit Mikrocontrollern bauen, nur um dann das eigentliche Projekt 
anzupacken...

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Die Ausgabe funktioniert ja auch,m nur halt viel zu langsam :/

schon mal daran gedacht, dass eine Interpretersprache nicht ganz so 
schnell ist, wie ein natives Binary? Ohne jetzt das Programm im Detail 
zu kennen, bist du uns ja auch schuldig geblieben, finde ich eine 1/2 
Sekunde für irgendetwas ermitteln und über TWI auszugeben, gar nicht 
soooo langsam!

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> "Beleuchtung" und "Frames" passen für mich nicht zusammen. Was willst du
> mit 30 Frames in der Sekunde beleuchten?
>
> Achso, bevor ich es vergesse zu fragen: wozu brauchst du 240 PWM-Kanäle?

30 mal pro Sekunde sollen die Farben ALLER LEDs aktualisiert werden und 
dabei entweder den vorigen Wert oder eben einen neuen erhalten. Dazu 
schicke ich ein Bitmuster durch viele hintereinander geschaltete WS2811 
PWM-Controller, die scheinen mir da die effektivste und günstigste 
Lösung zu sein. Ich möchte eben 80 (insgesamt eher 100) RGB-Kanäle 
einzeln ansteuern können, um nette Beleuchtungseffekte zu kreieren. Dass 
das nicht notwendig ist, weiß ich auch, aber was ist schon notwendig?

von Eumel (Gast)


Lesenswert?

Marlon S. schrieb:
> Möchte jetzt aber auch nicht noch monatelang
> Dinge mit Mikrocontrollern bauen, nur um dann das eigentliche Projekt
> anzupacken...

Wäre aber wohl das beste um das ganze sinvoll abschätzen zu können bzw. 
richtig anzugehen. Mit dem RPI hast du ja z.b. schon schön ins Klo 
gegriffen.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Möchte jetzt aber auch nicht noch monatelang
> Dinge mit Mikrocontrollern bauen, nur um dann das eigentliche Projekt
> anzupacken...

aber genau das solltest du vielleicht doch machen, wenn in einer 
endlichen Zeit dein "Projekt" vollständig(!) fertig werden soll. Du 
wirst nicht daran vorbei kommen, ein paar Grundlagen zu Messen, Steuern, 
Regeln zu kennen (und wie man das mit geeigneter Hardware auch 
tatsächlich umsetzt).

Achso, Raspberry Pi...: mit den Linux-Basics kennst du dich aus?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> Die Ausgabe funktioniert ja auch,m nur halt viel zu langsam :/
>
> schon mal daran gedacht, dass eine Interpretersprache nicht ganz so
> schnell ist, wie ein natives Binary? Ohne jetzt das Programm im Detail
> zu kennen, bist du uns ja auch schuldig geblieben, finde ich eine 1/2
> Sekunde für irgendetwas ermitteln und über TWI auszugeben, gar nicht
> soooo langsam!

Dass Python etwas langsamer ist, weiß ich. Aber wenn man sich überlegt, 
dass ein String von 80 Zeichen plus ein paar wenige Commands eine halbe 
Sekunde über einen 2 MHz Bus benötigt, kann doch irgendwas nicht 
stimmen...
Das Display besitzt ja noch einen Controller (HD44780), der die 
ankommenden Daten auf den Bildschirm ausgibt. Es handelt sich 
wohlgemerkt um ein 4x20 Zeichen Display!

von Eumel (Gast)


Lesenswert?

Marlon S. schrieb:
> Dass Python etwas langsamer ist, weiß ich. Aber wenn man sich überlegt,
> dass ein String von 80 Zeichen plus ein paar wenige Commands eine halbe
> Sekunde über einen 2 MHz Bus benötigt, kann doch irgendwas nicht
> stimmen...

Der läuft ja nicht die ganze Zeit weil das RPI zwischendrin noch einen 
ganze Ecke andere Sachen zu tun hat. Und wenn das I2C Interface des RPI 
dann keinen Sendebuffer hat wirds halt lahm.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> 30 mal pro Sekunde sollen die Farben ALLER LEDs aktualisiert werden und
> dabei entweder den vorigen Wert oder eben einen neuen erhalten. Dazu
> schicke ich ein Bitmuster durch viele hintereinander geschaltete WS2811
> PWM-Controller, die scheinen mir da die effektivste und günstigste
> Lösung zu sein.

ohoh, du hast wirklich keine Ahnung! Du bringst recht viele Dinge 
durcheinander! PWM machen deine WS2811 ganz alleine, du musst den 
Dingern nur sagen, welchen Wert sie "darstellen" sollen... 240 (oder wie 
viel auch immer, deine Angaben schwanken ja sehr stark!) PWM-Kanäle 
parallel zu generieren würde schon einiges bedeuten...

von Lernunwilliger (Gast)


Lesenswert?

Ja, da hast du doch schon den Salat.
Wenn man keine Lust hat sich ernsthaft mit der Technik auseinander zu 
setzen, dann kommen eben genau solche Fragen dabei raus.

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
> aber genau das solltest du vielleicht doch machen, wenn in einer
> endlichen Zeit dein "Projekt" vollständig(!) fertig werden soll. Du
> wirst nicht daran vorbei kommen, ein paar Grundlagen zu Messen, Steuern,
> Regeln zu kennen (und wie man das mit geeigneter Hardware auch
> tatsächlich umsetzt).

Letztendlich muss ja hauptsächlich die Interaktion mit der Hardware 
glatt laufen. Der Rest ist dann ja eher Softwaresache...
Nächstes Semster habe ich Mess- und Regelungstechnik, da ist ja 
vielleicht auch was dabei ;)

> Achso, Raspberry Pi...: mit den Linux-Basics kennst du dich aus?

Ich denke schon... Bin definitiv kein Profi, aber das, was ich brauche, 
klappt.

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> ohoh, du hast wirklich keine Ahnung! Du bringst recht viele Dinge
> durcheinander! PWM machen deine WS2811 ganz alleine, du musst den
> Dingern nur sagen, welchen Wert sie "darstellen" sollen... 240 (oder wie
> viel auch immer, deine Angaben schwanken ja sehr stark!) PWM-Kanäle
> parallel zu generieren würde schon einiges bedeuten...

Das habe ich gar nicht geschrieben. Welchen Sinn hätten die Controller, 
wenn ich das PWM-Singal selbst generieren müsste? Multiplexen ist bei so 
vielen Kanälen auch Schwachsinn. Ich schicke einen Bitstream rein. Der 
erste WS2811 nimmt sich 24 Bits (8 pro PWM-Kanal) raus und schickt den 
Rest weiter. Der zweite nimmt sich wieder 24 Bit raus usw. Die Chips 
setzen dann dem Bitmuster entsprechend ihr PWM-Signal. Und 30 mal pro 
Sekunde soll ein neues PWM-Signal gesetzt werden können, um eine für das 
Auge flüssige Animation entstehen zu lassen.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> über einen 2 MHz Bus benötigt

...langsam wird es lustig! Du triffst mich gerade auf meiner 
"Spezialstrecke"! Wo hast du diese 2MHz her? Schon mal die 
I2C-Spezifikation im allgemeinen und zu deinen (unbekannten) 
I2C-Expander im speziellen gelesen? ...und ein Interpreter arbeitet 
wirklich unendlich schnell? Welcher? Würde mich auch interessieren...!

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> über einen 2 MHz Bus benötigt
>
> ...langsam wird es lustig! Du triffst mich gerade auf meiner
> "Spezialstrecke"! Wo hast du diese 2MHz her? Schon mal die
> I2C-Spezifikation im allgemeinen und zu deinen (unbekannten)
> I2C-Expander im speziellen gelesen? ...und ein Interpreter arbeitet
> wirklich unendlich schnell? Welcher? Würde mich auch interessieren...!

Autsch! Da habe ich ganz grob was durcheinander geworfen! 400 kHz sind 
es im Fast-Mode beim RPI >.<
Aber auch bei der Geschwindigkeit sollte das noch kein Problem sein.

von Eumel (Gast)


Lesenswert?

Marlon S. schrieb:
> Das habe ich gar nicht geschrieben. Welchen Sinn hätten die Controller,
> wenn ich das PWM-Singal selbst generieren müsste? Multiplexen ist bei so
> vielen Kanälen auch Schwachsinn. Ich schicke einen Bitstream rein. Der
> erste WS2811 nimmt sich 24 Bits (8 pro PWM-Kanal) raus und schickt den
> Rest weiter. Der zweite nimmt sich wieder 24 Bit raus usw. Die Chips
> setzen dann dem Bitmuster entsprechend ihr PWM-Signal. Und 30 mal pro
> Sekunde soll ein neues PWM-Signal gesetzt werden können, um eine für das
> Auge flüssige Animation entstehen zu lassen.

Ist alles richtig so, du brauchst halt noch Hardware die die WS2811 
ansteuert.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Das habe ich gar nicht geschrieben.

doch, im Eingangspost:

Marlon S. schrieb:
> + Beleuchtungssystem:
>  - Pro Lüfter (ca. 16-20 Stück, warum? Darum! :D) vier RGB-LEDs
>    -> ca 64-80 LEDs = bis zu 240 PWM-Kanäle

bringst nun du oder ich Dinge durcheinander?

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> 400 kHz sind
> es im Fast-Mode beim RPI

...und der Chip in deinem LCD-Rucksack kann was?
...und dein LCD ist wie schnell?
...
...achso, ie schnell ermittelst du die anzuzeigenden Daten?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> Das habe ich gar nicht geschrieben.
>
> doch, im Eingangspost:
>
> Marlon S. schrieb:
>> + Beleuchtungssystem:
>>  - Pro Lüfter (ca. 16-20 Stück, warum? Darum! :D) vier RGB-LEDs
>>    -> ca 64-80 LEDs = bis zu 240 PWM-Kanäle
>
> bringst nun du oder ich Dinge durcheinander?

Ich hatte nur nicht näher spezifiziert, wie die PWM-Kanläe gesteuert 
werden. Wie auch im Eingangspost beschrieben, wollte ich auf die 
konkreten elektronischen Details später eingehen und musste dann 
feststellen, dass ich den Post nicht mehr edititeren kann :/

von ??? (Gast)


Lesenswert?

...an deiner Stelle würde ich mir, glaube ich, keine Gedanken darüber 
machen, warum es eine 1/2 Sekunde dauert, 80 Zeichen auf einem LCD 
anzuzeigen (wie hast du eigentlich die 0.5s ermittelt?). Versuche erst 
mal diverse Grundlagen zu verstehen, lerne Datenblätter zu lesen.

Vielleicht gelingt es dann auch deine Ideen mit den entsprechenden 
Grundlagen in Zusammenhang zu bringen.

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> 400 kHz sind
>> es im Fast-Mode beim RPI
>
> ...und der Chip in deinem LCD-Rucksack kann was?
> ...und dein LCD ist wie schnell?
> ...
> ...achso, ie schnell ermittelst du die anzuzeigenden Daten?

Daten werden im Moment noch gar nicht ermittelt. Im Test habe ich einen 
simplen Befehl gegeben, Text auszugeben. Viel mehr kann der Controller 
ja auch nicht. Im Python-Programm wird der String für jede Zeile mit 
rjust, ljust und (cjust? gerade vergessen...) auf eine Länge von 20 
Zeichen angepasst. Da das Display die Zeilen in der Reihenfolge 1-3-2-4 
beschreibt, werden die vier Einzelstrings entsprechend umsortiert und 
dann char für char über die lcd_putc Funktion (siehe Lib oben) 
ausgegeben.
Bei allen, die ein solches Backpack verwenden, hat es bisher in 
ausreichender Geschwindigkeit geklappt. Ich möchte später das Display 2 
mal pro Sekunde aktualisieren, aber man sollte natürlich nicht sehen 
können, wie sich das "Bild" Zeile für Zeile aufbaut.
Die halbe Sekunde war gefühlt. Kommt auch nicht auf den genauen Zeitwert 
an.

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> Ich möchte später das Display 2
> mal pro Sekunde aktualisieren,

ungeachtet der fehlenden Antworten zu meinen Fragen..., so schnell 
kannst du lesen? 160 Zeichen (in 4 Zeilen) pro Sekunde? Nicht schlecht!

Obwohl, da reicht ja glatt die 0.5s Bildaufbau, wo war nochmal das 
Problem mit dem LCD-Rucksack?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> Ich möchte später das Display 2
>> mal pro Sekunde aktualisieren,
>
> ungeachtet der fehlenden Antworten zu meinen Fragen..., so schnell
> kannst du lesen? 160 Zeichen (in 4 Zeilen) pro Sekunde? Nicht schlecht!
>
> Obwohl, da reicht ja glatt die 0.5s Bildaufbau, wo war nochmal das
> Problem mit dem LCD-Rucksack?

1. Es sind 80 Zeichen. Vielleicht solltest du ein bisschen am 
Kopfrechnen arbeiten, anstatt dich über andere Leute lustig zu machen.
EDIT: Okay, Fehler meinerseits. SORRY! Du hast 160 pro Sekunde 
geschrieben.

2. Musst du jedes Mal den gesamten Inhalt deines Bildschirms neu lesen, 
wenn er sich aktualisiert? 60 Mal pro Sekunde ne ganze Internetseite 
durchlesen? Nicht schlecht!

3. Der Bildaufbau sollte normalerweise aber (augenscheinlich!) instant 
erfolgen. Sonst kann man nämlich tatsächlich kaum noch was lesen.

Willst du mir eigentlich helfen, oder bist du nur hier um... Ja, warum 
eigentlich?

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> simplen Befehl gegeben

wo und wie?

Marlon S. schrieb:
> Viel mehr kann der Controller
> ja auch nicht.

welcher?

Ist Biotechnologie auch so eine diffuse Wissenschaft, wie deine 
Ausdrucksweise?

von Marlon S. (raspberrypi-mp)


Lesenswert?

??? schrieb:
> Marlon S. schrieb:
>> simplen Befehl gegeben
>
> wo und wie?
>
> Marlon S. schrieb:
>> Viel mehr kann der Controller
>> ja auch nicht.
>
> welcher?

Ich komme vor lauter Schreiben überhaupt nicht dazu, den Controller 
rauszusuchen... Als ich den ersten Post hier verfasst hatte, war mir 
noch nicht ganz klar, dass µC eher ein Frage-Antwort-Spiel ist. Das mit 
dem Display ist mir dann auf die Nachfrage spontan eingefallen, deswegen 
habe ich es erwähnt.
Ich werde jetzt erstmal schlafen gehen, dann morgen in Ruhe alles zu dem 
Thema raussuchen und das in einer konkreten Frage und besser vorbereitet 
formulieren.

Gute Nacht.

von ??? (Gast)


Lesenswert?

Marlon S. schrieb:
> SORRY! Du hast 160 pro Sekunde
> geschrieben.

aha!

Marlon S. schrieb:
> 2. Musst du jedes Mal den gesamten Inhalt deines Bildschirms neu lesen,
> wenn er sich aktualisiert? 60 Mal pro Sekunde ne ganze Internetseite
> durchlesen? Nicht schlecht!

ahhh, und warum muss man dann 2 mal in der Sekunde (oder 60 mal...) der 
Bildschirminhalt aktualisiert werden?

Marlon S. schrieb:
> 3. Der Bildaufbau sollte normalerweise aber (augenscheinlich!) instant
> erfolgen. Sonst kann man nämlich tatsächlich kaum noch was lesen.

1. man schreibt nur dann was aufs Display raus, wenn es auch etwas neu 
anzuzeigen gibt!

2. man überschreibt (und löscht nicht vorher) das Display. Im Idealfall 
überschreibt man sogar nur die Stellen, die sich ändern...

3. ...und dann wird es auch augenscheinlich sofort (instant :-)) 
erfolgen

Marlon S. schrieb:
> Willst du mir eigentlich helfen, oder bist du nur hier um... Ja, warum
> eigentlich?

Um dich mit der Nase darauf zu stossen, wo deine Defizite bei dem 
Projekt sind! Viel Text ist Schall und Rauch, wenn Grundlagen fehlen!

von Marlon S. (raspberrypi-mp)


Lesenswert?

An einen Moderator, der eventuell mal reinschaut:
Bitte meinen Beitrag mit dem ewig langen Code (2. Post) editieren und 
den Code rausnehmen. Wollte damit nicht den halben Thread zuspammen.
Danke!

von Marlon S. (raspberrypi-mp)


Lesenswert?

Okay, es hat jetzt doch etwas länger gedauert als eine Nacht, aber 
vielleicht war das auch ganz gut so...

Der Controller ist ein PCF8574, der nach Aussagen einiger Leute ziemlich 
langsam sein soll. Daher habe ich mir kurzerhand vier MCP23008 bestellt 
und werde hoffentlich noch diese Woche das Platinenlayout (alle 4 
Displays auf eine Platine) ätzen. Da ich auch neue und hochwertig 
wirkendere Displays verwende (wobei der Hitachi-Controller ja eigentlich 
der gleiche ist) habe ich ein ganz gutes Gefühl. Habe auch schon ne 
hübsche C++ Library mit praktischen Scroll-Funktionen und allem, was das 
Herz begehrt, gefunden.

Allerdings habe ich auch gleich schon eine weitere Frage ;)
Ich werde einen Haufen Lüfter einbauen und möchte diese alle mit PWM 
steuern. Meine Wahl fiel dabei auf die Everest-Serie von Enermax, weil 
ich bereits sehr gute Erfahrungen mit denen gemacht habe bzw. immer noch 
mache. Sie sind schön leise, haben einen ordentlichen Luftdurchsatz 
(besonders die 140er) und sind vor allem transparent. Was diese 
Eigenschaften angeht, habe ich absolut nichts besseres finden können.
Einen Nachteil gibt es jedoch:
Die Lüfter haben einen 3-poligen Anschluss, also kein (externes) PWM, 
sondern regeln sich selbst über einen Temperatursensor. An sich ja ne 
gute Sache, aber ich möchte nunmal alles zentral steuern können.

Meine Überlegung war jetzt, den Temperatursensor ganz einfach 
abzuknipsen und die Kontakte kurzzuschließen bzw. einen geringen 
Widerstand einzubauen, damit der Lüfter erstmal auf voller 
Geschwindigkeit läuft. Dann wollte ich in die GND-Leitung nen Transistor 
reinhängen und mit einem PWM-Signal ansteuern. Jetzt handelt es sich bei 
dem Everest aber um einen Brushless-Lüfter, den man ja soweit ich weiß 
nicht so wirklich (auf diese Weise) per PWM steuern kann. Wie könnte ich 
das realisieren? Hatte schon über ein digitales Potentiometer 
nachgedacht, aber das scheint mir auch nicht das Wahre zu sein :/

von Marlon S. (raspberrypi-mp)


Lesenswert?

>1. man schreibt nur dann was aufs Display raus, wenn es auch etwas neu
>anzuzeigen gibt!
>
>2. man überschreibt (und löscht nicht vorher) das Display. Im Idealfall
>überschreibt man sogar nur die Stellen, die sich ändern...

An sich schon, aber wenn man Text scrollen lassen will (vor allem 
vertikal), muss man zwangsweise das gesamte Display aktualisieren. Ich 
möchte das Ganze ja etwas flexibler haben. Wird mit der neuen Lib aber 
wahrscheinlich eh kein Thema mehr sein, hoffe ich. Seit kurzem ist die 
nämlich auch mit dem MCP23008 kompatibel.

Aber das mit der PWM-Steuerung würde mich mal wirklich interessieren, da 
steh ich ein bisschen auf dem Schlauch. Falls das mit dem Transistor 
doch gehen sollte, wär das natürlich super, aber nach dem, was ich 
gelesen hab, funzt das nicht richtig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.