Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 19:20

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C#] RPI LEds Farblich ansteuern über GPIO Pins

Discussion on [C#] RPI LEds Farblich ansteuern über GPIO Pins within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
[uLow]NTX?!'s Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
[C#] RPI LEds Farblich ansteuern über GPIO Pins

Guten Tag,

Gestern sind meine Programmierbaren LED's aus China angekommen, welche ich für mein Ambilight projekt benötige.

Auf der Rolle sind allerdings noch cirka 80 cm, welche ch dafür nicht brauchen werde. Diese LED's sollen natürlich nicht in der ecke verranzen und ich möchte mit denen etwas Spielen.

Soweit so gut zur Vorgeschichte,nun zur eigentlichen frage bzw des Problemes, für welche ich noch keine Lösung gefunden habe.

Grundlegend ist es so, dass ich ein Programm schreiben möchte, über welches ich diese 80 CM LED Streifen ansteuern möchte, und zwar über die restlichen GPIO Pins des RPi, welchen ich für das Ambilight Projekt nicht nutze.


Die Ansteuerung der LED's im gesamten wird wohl kein Problem sein, nur die Realisierung, wie ich diese Kunterbunt leuchten lassen kann, beziehungsweise wie ich die einzelnen ansteuern kann (Danach habe ich noch nicht explizit geforscht, nur um das allgemeine Ansteuern mit Farbwerten).

In welcher Programmiersprache ich das Letztendlich realisiere, steht noch aus.

Es wäre echt geil, wenn jemand seine Erfahrungen und sein wissen im bezug auf GPIO und LEDs einbringen könnte.
[uLow]NTX?! is offline  
Old 11/28/2015, 21:33   #2
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Welcher Controller wird den bei deinem addressierbaren LED Streifen verwendet?

Als Programmiersprache würde ich dir hier gleich mal zu Python raten.
C# läuft nur über mono auf dem Raspberry Pi, was unnötig viel Ressourcen verschwendet.
.SkyneT. is offline  
Thanks
1 User
Old 11/28/2015, 21:36   #3
 
[uLow]NTX?!'s Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
APA102 ist der Controller.

Und wie schaut es mit C++ aus? Ich hatte C# dazu geschrieben, weil das mitunter eine der meist genutzten Methoden war, welche ich bei meiner suche gefunden hatte.
[uLow]NTX?! is offline  
Old 11/28/2015, 21:52   #4
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
C++ kannst du auch verwenden, wiringPi sollte auch hier verfügbar sein. Ob es jedoch auch schon eine Bibliothek für den Controller gibt weiß ich nicht.

Falls du Python verwendest müsstest du nur diese Bibliothek verwenden und dir keine Gedanken über die Ansteuerung des Controllers machen.

Falls du noch immer C++ verwenden willst, hier das Datenblatt , "function description" zeigt welche Daten der Controller erwartet.
.SkyneT. is offline  
Thanks
1 User
Old 11/28/2015, 23:10   #5
 
[uLow]NTX?!'s Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
Die PYthon API schaut sehr interessant aus.

Ich bin zwar nicht so der Py könner, aber zunot gibts ja noch uLow beni, der kann das locker


Interssant zu wissen, wäre jetzt natürlich, ob bzw wo man festlegen kann, welche PINS auf dem RIp als GND, SPI SCLK und SPI MOSI genutzt werden.

Diese zweite Stripe soll beim Testen (bzw. Später, wenn es fertig ist) ja Parallel zum Ambilight laufen
[uLow]NTX?! is offline  
Old 11/28/2015, 23:59   #6
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Die Ansteuerung der Pins ist recht simpel über das Unix Dateisystem, und ist somit sowohl in C, C++, Bash, Python, ... etwa gleich aufwendig.
Das "Problem" ist allerdings etwas anders. Farb LED's werden durch 3(oder 4) Pins angesprochen: Rot, Blau, Grün (und eventuell Weiß). Um nun die Farben zu Mischen musst du mal mehr oder weniger Spannung drauf geben. Da deine Spannungsquelle zumeist so etwas wie eine Steckdose oder ein Akkumulator ist und diesen über Transistoren steuerst kannst du, zumindest nicht direkt die Stromstärke oder Spannung beeinflussen, da es nur ein Transistor schaltet oder Transistor schaltet nicht gibt.

Dafür gibt es nun 2 Lösungsansätze:
1. Eine komplizierte Schaltung mit mehreren Pins für eine Farbe bei der durch Wiederstände verschieden viel Spannung bereitgestellt, und du schaltest dann grade die Durchgänge die du benötigst um die entsprechende Spannung zu geben. Sehr kompliziert, aber wohl die Beste Lösung, scheitert eventuell allerdings daran dass der Pi nicht genug pins dabei hat.
2. Die wohl einfachere Lösung mit auch sehr guter Qualität ist Pulsweitenmodulation, PWM. Dabei wird ein Zeitintervall in 2 Teile unterteilt: Spannung und keine Spannung. Durch kurze Intervallabstände wird somit sozusagen Simuliert das nur eine deutlich kleinere Menge an Strom fließen kann, weniger licht. Ist der teil mit Spannung im Intervall genauso groß wie der ohne so hat man eine Leuchtkraft von 50%, und die Verteilung ist Linear.

Der 2te Weg ist deutlich einfacher und erreicht bei hoher Frequenz für das Menschliche Auge fast die selbe Qualität wie der erste.
Allerdings hat der PI (zumindest das B+ Modell das ich habe) nur 2 Hardware PWM pins, was für 3 oder gar 4 Pins entsprechend nicht ausreichend ist. Daher hat man 2 weitere Möglichkeiten.

1. Simulation von PWM durch Software:
Dabei schaltet man durch software einen GPIO Pin an und aus in gewissen Zeitintervallen, das funktioniert auch recht gut, allerdings kann dabei zu Einbrüchen der Frequenz (Flackern z.B.) kommen, und diese Methode kommt generell nicht auf so hohe Frequenzen wie Hardware PWM. Wenn sich das Auge des Betrachters nun bewegt kann dabei das Flackern durch das an und ausschalten des PWM simulierten Ports wahrnehmen, und das ist sehr unangenehm.

Die 2. Möglichkeit ist da schon wieder Deutlich schöner aber auch komplexer. Der RPI bietet eine I2C Bus. Ein serieller Bus Anschluss über den z.B. eine Platine mit weiteren hardware PWM Ports angesprochen werden kann.

Ich selbst habe mit sowas auch schonmal rumgespielt und habe mir ein paar Software PWM pins gebastelt, mit einem Daemon der auf hoher Priorität läuft. Es hat recht gut funktioniert, allerdings war das in meiner Wohnung, und sobald ich mich viel bewegt habe habe ich das flackern bemerkt, und das hat mir z.B. beim putzen immer Kopfschmerzen verursacht.

Die Möglichkeit über den I2C bus habe ich nie verfolgt da ich nie lust hatte mir eine entsprechende Platine für den I2C Bus zuzulegen
warfley is offline  
Thanks
1 User
Old 11/29/2015, 01:10   #7
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by warfley View Post
Die Ansteuerung der Pins ist recht simpel über das Unix Dateisystem, und ist somit sowohl in C, C++, Bash, Python, ... etwa gleich aufwendig.
Das "Problem" ist allerdings etwas anders. Farb LED's werden durch 3(oder 4) Pins angesprochen: Rot, Blau, Grün (und eventuell Weiß). Um nun die Farben zu Mischen musst du mal mehr oder weniger Spannung drauf geben. Da deine Spannungsquelle zumeist so etwas wie eine Steckdose oder ein Akkumulator ist und diesen über Transistoren steuerst kannst du, zumindest nicht direkt die Stromstärke oder Spannung beeinflussen, da es nur ein Transistor schaltet oder Transistor schaltet nicht gibt.

Dafür gibt es nun 2 Lösungsansätze:
1. Eine komplizierte Schaltung mit mehreren Pins für eine Farbe bei der durch Wiederstände verschieden viel Spannung bereitgestellt, und du schaltest dann grade die Durchgänge die du benötigst um die entsprechende Spannung zu geben. Sehr kompliziert, aber wohl die Beste Lösung, scheitert eventuell allerdings daran dass der Pi nicht genug pins dabei hat.
2. Die wohl einfachere Lösung mit auch sehr guter Qualität ist Pulsweitenmodulation, PWM. Dabei wird ein Zeitintervall in 2 Teile unterteilt: Spannung und keine Spannung. Durch kurze Intervallabstände wird somit sozusagen Simuliert das nur eine deutlich kleinere Menge an Strom fließen kann, weniger licht. Ist der teil mit Spannung im Intervall genauso groß wie der ohne so hat man eine Leuchtkraft von 50%, und die Verteilung ist Linear.

Der 2te Weg ist deutlich einfacher und erreicht bei hoher Frequenz für das Menschliche Auge fast die selbe Qualität wie der erste.
Allerdings hat der PI (zumindest das B+ Modell das ich habe) nur 2 Hardware PWM pins, was für 3 oder gar 4 Pins entsprechend nicht ausreichend ist. Daher hat man 2 weitere Möglichkeiten.

1. Simulation von PWM durch Software:
Dabei schaltet man durch software einen GPIO Pin an und aus in gewissen Zeitintervallen, das funktioniert auch recht gut, allerdings kann dabei zu Einbrüchen der Frequenz (Flackern z.B.) kommen, und diese Methode kommt generell nicht auf so hohe Frequenzen wie Hardware PWM. Wenn sich das Auge des Betrachters nun bewegt kann dabei das Flackern durch das an und ausschalten des PWM simulierten Ports wahrnehmen, und das ist sehr unangenehm.

Die 2. Möglichkeit ist da schon wieder Deutlich schöner aber auch komplexer. Der RPI bietet eine I2C Bus. Ein serieller Bus Anschluss über den z.B. eine Platine mit weiteren hardware PWM Ports angesprochen werden kann.

Ich selbst habe mit sowas auch schonmal rumgespielt und habe mir ein paar Software PWM pins gebastelt, mit einem Daemon der auf hoher Priorität läuft. Es hat recht gut funktioniert, allerdings war das in meiner Wohnung, und sobald ich mich viel bewegt habe habe ich das flackern bemerkt, und das hat mir z.B. beim putzen immer Kopfschmerzen verursacht.

Die Möglichkeit über den I2C bus habe ich nie verfolgt da ich nie lust hatte mir eine entsprechende Platine für den I2C Bus zuzulegen
Sorry aber das ist alles Quatsch und trifft überhaupt nicht auf addressierbare Led Streifen zu.
Der Raspberry Pi ist sowieso nicht wirklich gut dazu geeignet irgendwelche Signale zu generieren, ausser man verwendet RTOS. Viel schlauer ist es aber einfach einen kleinen µC (z.b attiny) zu verwenden, welcher sich um soetwas kümmert.

Wie man hier sieht:
Werden dem Controller über eine serielle Schnittstelle Daten gesendet, und der Controller kümmert sich um die ansteuerung der LEDs mittels PWM.

Die Daten werden in folgender Form erwartet:

Quote:
Interssant zu wissen, wäre jetzt natürlich, ob bzw wo man festlegen kann, welche PINS auf dem RIp als GND, SPI SCLK und SPI MOSI genutzt werden.
SPI wird per Hardware gesteuert, also kannst du diese nicht wählen.
SPI ist jedoch ein Bussystem welches mehrere "Slaves" zulässt.
siehe:

Hier ist ein Bild mit den GPIO Pins:
Für SPI sind folgende wichtig:
MISO (out), MOSI (in), SCLK (clock) werden zur Kommunikation verwendet.
Mittels CE0 (ChipEnable 0) und CE1(ChipEnable1) kannst du dann in deinem Fall auswählen mit welchem LED Streifen du kommunizieren willst.

Achja den LED Streifen auf keinen Fall nur durch den Raspberry Pi versorgen! G
PIO Pins sind zum steuern gedacht, nicht als Stromversorgung!
Und nicht vergessen den GND der Stromversorgung mit dem GND des Raspberry Pi zu verbinden.

So das sollte dir fürs erste etwas zu tun geben
.SkyneT. is offline  
Thanks
1 User
Old 11/29/2015, 01:24   #8
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Quote:
Originally Posted by .SkyneT. View Post
Sorry aber das ist alles Quatsch und trifft überhaupt nicht auf addressierbare Led Streifen zu.
Der Raspberry Pi ist sowieso nicht wirklich gut dazu geeignet irgendwelche Signale zu generieren, ausser man verwendet RTOS. Viel schlauer ist es aber einfach einen kleinen µC (z.b attiny) zu verwenden, welcher sich um soetwas kümmert.

Wie man hier sieht:
Werden dem Controller über eine serielle Schnittstelle Daten gesendet, und der Controller kümmert sich um die ansteuerung der LEDs mittels PWM.

Die Daten werden in folgender Form erwartet:


SPI wird per Hardware gesteuert, also kannst du diese nicht wählen.
SPI ist jedoch ein Bussystem welches mehrere "Slaves" zulässt.
siehe:

Hier ist ein Bild mit den GPIO Pins:
Für SPI sind folgende wichtig:
MISO (out), MOSI (in), SCLK (clock) werden zur Kommunikation verwendet.
Mittels CE0 (ChipEnable 0) und CE1(ChipEnable1) kannst du dann in deinem Fall auswählen mit welchem LED Streifen du kommunizieren willst.

Achja den LED Streifen auf keinen Fall nur durch den Raspberry Pi versorgen! G
PIO Pins sind zum steuern gedacht, nicht als Stromversorgung!
Und nicht vergessen den GND der Stromversorgung mit dem GND des Raspberry Pi zu verbinden.

So das sollte dir fürs erste etwas zu tun geben
Hab komplett überlesen dass es sich um addressierbare LED streifen handelt -.-
Hab den ersten Beitrag nur überflogen. Habe mich nur auf die Standard 5€ RGB Led streifen bezogen

Und wo du her hast du her das ich sage man sollte die LEDS mit dem RPI versorgen? ich hab da (zumindest meines Wissens nach) stehen:
Quote:
Da deine Spannungsquelle zumeist so etwas wie eine Steckdose oder ein Akkumulator ist
warfley is offline  
Thanks
1 User
Old 11/29/2015, 01:28   #9
 
[uLow]NTX?!'s Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
@Warfley:

Ich denke, dass war ein algemeiner Tipp von ihm

@Skynet: Also wäre es, ohne inen 2ten RPi nicht möglich, beide LED bänder parallel zu einander mit signalen zu versorgen?
[uLow]NTX?! is offline  
Old 11/29/2015, 01:33   #10
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by warfley View Post
Und wo du her hast du her das ich sage man sollte die LEDS mit dem RPI versorgen? ich hab da (zumindest meines Wissens nach) stehen:
Ich hab nie behauptet das du das gesagt hättest, die Antwort auf deinen Post ist eigentlich mit dem Anfang des 2ten Zitats zu Ende

Dieser Teil ist nur Fett geschrieben, damit er vom TE hoffentlich nicht überlesen wird. Das wäre nämlich ein relativ unnötiger/irreversibler Fehler.

Quote:
Originally Posted by [uLow
NTX?!]Also wäre es, ohne inen 2ten RPi nicht möglich, beide LED bänder parallel zu einander mit signalen zu versorgen?
Kommt auf den LED Streifen an, manche schalten vor den APA102's noch einen extra Controller, dann ist es möglich, falls aber die APA102's nur so verbunden werden:

ist es ohne eine weitere Schaltung nicht möglich.

Falls die LED Streifen also mittels CE0/CE1 nicht "auswählbar" sind, könntest du "manuell" mit ein paar FET's zwischen beiden Streifen hin und her schalten, die FET's müssten dann über einen beliebigen GPIO Pin geschalten werden. (Aber ohne grundlegendes Elektronikwissen wird das schon einmal ganz schnell zu komliziert )
.SkyneT. is offline  
Thanks
2 Users
Old 11/29/2015, 02:16   #11
 
[uLow]NTX?!'s Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
Quote:
Originally Posted by .SkyneT. View Post
Ich hab nie behauptet das du das gesagt hättest, die Antwort auf deinen Post ist eigentlich mit dem Anfang des 2ten Zitats zu Ende

Dieser Teil ist nur Fett geschrieben, damit er vom TE hoffentlich nicht überlesen wird. Das wäre nämlich ein relativ unnötiger/irreversibler Fehler.


Kommt auf den LED Streifen an, manche schalten vor den APA102's noch einen extra Controller, dann ist es möglich, falls aber die APA102's nur so verbunden werden:

ist es ohne eine weitere Schaltung nicht möglich.

Falls die LED Streifen also mittels CE0/CE1 nicht "auswählbar" sind, könntest du "manuell" mit ein paar FET's zwischen beiden Streifen hin und her schalten, die FET's müssten dann über einen beliebigen GPIO Pin geschalten werden. (Aber ohne grundlegendes Elektronikwissen wird das schon einmal ganz schnell zu komliziert )
Ich hab wohl oder übel die, die schlechter sind


Mmhh gut, oder weniger. Wäre ansich natürlich sehr geil gewesen die beidne LED Stripes über einen Pi steuern zu können. Muss ich wohl nochmal googeln oder bateln :/
[uLow]NTX?! is offline  
Reply


Similar Threads Similar Threads
LEDs aussachalten
06/19/2012 - Technical Support - 10 Replies
wie kann ich die blauen LEDs vom Zalman Z9+ ausschalten , weil ich den PC über Nacht laufen lassen , weil ich WOW downloade
Soundfiles über Quests ansteuern ?
12/04/2011 - Metin2 Private Server - 6 Replies
Well - Wie meine Frage schpn Preis gibt würde ich gerne wissen ob's möglichkeiten gibt Soundfiles per Questbefehl anzusteuern. Ob diese jetzt Serverside oder Clientside liegt ist erstmal absolut irrelevant - Es geht nur ums Prinzip ! Liebe Grüße !



All times are GMT +1. The time now is 19:22.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.