Es handelt sich dabei um eine RGB-Led-Platine für die GPIO-Pins des Raspberry Pi, wobei jede LED 0/50/100% sein kann.
Und es geht um folgendes Kernel Modul - ganz unten sind die Quelldateien als ZIP: http://piborg.org/node/99
Mein Interesse gilt der Datei driver/ledborg.c, die ich bei genauer Betrachtung nicht ganz verstehe. Vielleicht liegt es an meinem veralteten C Wissen oder auch daran, dass ich von Hardware naher Programmierung so gut wie keine Ahnung habe
Kann mir irgendjemand erklären oder einen Stoß in die richtige Richtung geben, wo und wie die Unterscheidung zwischen Led auf 100% (Wert 2) und Led auf 50% (Wert 1) liegt? Wo wird da etwas anderes oder in einen anderen Bereich geschrieben? Ich sehe zwischen den beiden Betriebsarten keinen Unterschied bei den diversen WriteWord() Aufrufen, egal wie oft ich mir den Code durchlesen. Vielleicht kann mir da irgendjemand auf die Sprünge helfen, ich würde das wirklich gerne verstehen. Vielleicht überlese ich auch nur eine Kleinigkeit immer und immer wieder
MfG Christian
[GELÖST] Verständnisfrage bei Quelltext vom LedBorg Modul
- killerbees19
- Beiträge: 103
- Registriert: 14.12.2010 21:56:45
- Wohnort: Wien (Österreich)
[GELÖST] Verständnisfrage bei Quelltext vom LedBorg Modul
Zuletzt geändert von killerbees19 am 27.04.2013 00:41:26, insgesamt 1-mal geändert.
Re: Verständnisfrage bei Quelltext vom LedBorg Modul
Hier werden die Stufen vorgegeben?
Werte wären dann 0, 1 und 2.
Gesetzt/Ausgewertet dann in led_read / led_write?
Code: Alles auswählen
global_data led = {
// Internal
.max = 2,
.step = -1,
// Control
.red = 0,
.green = 0,
.blue = 0,
.new_red = 0,
.new_green = 0,
.new_blue = 0,
};
Gesetzt/Ausgewertet dann in led_read / led_write?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
- killerbees19
- Beiträge: 103
- Registriert: 14.12.2010 21:56:45
- Wohnort: Wien (Österreich)
Re: Verständnisfrage bei Quelltext vom LedBorg Modul
Sorry für die späte Antwort.
Das habe auch noch verstanden. Mittels Timer werden die Werte dann scheinbar alle 10ms abgefragt und bei Bedarf neu gesetzt. Nur sehe ich dort dann keinen Unterschied. Da gibt es doch nur AN/AUS, auch wenn es mehrfach aufgerufen wird? Oder findet da bei mehrfachem Aufruf irgendeine Verschiebung statt, die ich nicht kenne? Wie gesagt, ich hab von den Kernelfunktionen keine Ahnung, also vielleicht verstehe ich da irgendeinen API Aufruf nicht und jemand kann Licht ins Dunkel bringen.
MfG Christian
Das habe auch noch verstanden. Mittels Timer werden die Werte dann scheinbar alle 10ms abgefragt und bei Bedarf neu gesetzt. Nur sehe ich dort dann keinen Unterschied. Da gibt es doch nur AN/AUS, auch wenn es mehrfach aufgerufen wird? Oder findet da bei mehrfachem Aufruf irgendeine Verschiebung statt, die ich nicht kenne? Wie gesagt, ich hab von den Kernelfunktionen keine Ahnung, also vielleicht verstehe ich da irgendeinen API Aufruf nicht und jemand kann Licht ins Dunkel bringen.
MfG Christian
Re: Verständnisfrage bei Quelltext vom LedBorg Modul
Das ist so eine Art Puls-Weiten-Modulation. led.max ist die Phase, nachdem alle LEDs wieder eingeschaltet werden. Zu welchem Interval sie abgeschaltet werden, entscheidet der jeweilige led.{red,green,blude}-Wert (Logik dazu in driver/ledborg.c:360ff, in led_perform_step()).
Mein Versuch, das grafisch erkennbar zu machen:led.step wird immer inkrementiert und bei 2 zurueck gesetzt. Sofern eine LED-Schiene zu diesem Zeitpunkt ungleich null ist, wird die entsprechende LED eingeschaltet. Falls nach dem Inkrementieren (10 ms spaeter) led.step == led.{farbe} gilt, wird die LED-Schiene abgeschaltet. Durch die relative Traegheit von Hardware (bei 'ner LED eher weniger) und Auge, wird dadurch ein unterschiedlicher Lichtintensivitaetseindruck erzeugt. Oder es sitzt noch eine kleine Kapazitaet an jeder Schiene, dann ist das sogar "echt".
Gruss Cae
Mein Versuch, das grafisch erkennbar zu machen:
Code: Alles auswählen
0 0 0 # (0 == 2)
012121 # ++led.step;
r ------ # 2/2 Leistung, .red = 2
g - - - # 1/2 Leistung, .green = 1
b # 0/2 Leistung, .blue = 0
^ ^ ^ # "Zuendung" bei .step == 0
012121 #
0 0 0 # (0 == 2)
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
- killerbees19
- Beiträge: 103
- Registriert: 14.12.2010 21:56:45
- Wohnort: Wien (Österreich)
Re: Verständnisfrage bei Quelltext vom LedBorg Modul
Beim Stichwort PWM hat es jetzt endlich Klick gemacht
Ich habe dabei einfach zu direkt gedacht und vergessen, dass man den Effekt auch anders erreichen kann. Vor allem, da ich den Timer immer nur als einmaligen (0-2) Durchlauf bei einer Änderung ansah, was es ja nicht ist. Das erscheint mir jetzt auch logisch. Wusste ich bisher ehrlich gesagt nicht, dass das bei Leds ein oft benutztes Standardverfahren ist. Wieder etwas gelernt und der Quellcode hat damit endlich eine Logik, die ich verstehe. Wieso bin ich da nicht selbst drauf gekommen?
Danke für die perfekte Aufklärung, Cae. Mein Hirnkastl bedankt sich für das neue Wissen
MfG Christian
Ich habe dabei einfach zu direkt gedacht und vergessen, dass man den Effekt auch anders erreichen kann. Vor allem, da ich den Timer immer nur als einmaligen (0-2) Durchlauf bei einer Änderung ansah, was es ja nicht ist. Das erscheint mir jetzt auch logisch. Wusste ich bisher ehrlich gesagt nicht, dass das bei Leds ein oft benutztes Standardverfahren ist. Wieder etwas gelernt und der Quellcode hat damit endlich eine Logik, die ich verstehe. Wieso bin ich da nicht selbst drauf gekommen?
Danke für die perfekte Aufklärung, Cae. Mein Hirnkastl bedankt sich für das neue Wissen
MfG Christian