[GELÖST] Verständnisfrage bei Quelltext vom LedBorg Modul

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
killerbees19
Beiträge: 103
Registriert: 14.12.2010 21:56:45
Wohnort: Wien (Österreich)

[GELÖST] Verständnisfrage bei Quelltext vom LedBorg Modul

Beitrag von killerbees19 » 20.04.2013 01:01:34

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 :mrgreen:

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
Zuletzt geändert von killerbees19 am 27.04.2013 00:41:26, insgesamt 1-mal geändert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Verständnisfrage bei Quelltext vom LedBorg Modul

Beitrag von rendegast » 20.04.2013 08:36:49

Hier werden die Stufen vorgegeben?

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,
};
Werte wären dann 0, 1 und 2.
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")

Benutzeravatar
killerbees19
Beiträge: 103
Registriert: 14.12.2010 21:56:45
Wohnort: Wien (Österreich)

Re: Verständnisfrage bei Quelltext vom LedBorg Modul

Beitrag von killerbees19 » 26.04.2013 12:10:17

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

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Verständnisfrage bei Quelltext vom LedBorg Modul

Beitrag von Cae » 26.04.2013 16:21:38

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:

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)
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
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

Benutzeravatar
killerbees19
Beiträge: 103
Registriert: 14.12.2010 21:56:45
Wohnort: Wien (Österreich)

Re: Verständnisfrage bei Quelltext vom LedBorg Modul

Beitrag von killerbees19 » 27.04.2013 00:40:09

Beim Stichwort PWM hat es jetzt endlich Klick gemacht :D

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? :lol:

Danke für die perfekte Aufklärung, Cae. Mein Hirnkastl bedankt sich für das neue Wissen :THX:


MfG Christian

Antworten