|
You last visited: Today at 19:20
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.
11/28/2015, 21:12
|
#1
|
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.
|
|
|
11/28/2015, 21:33
|
#2
|
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.
|
|
|
11/28/2015, 21:36
|
#3
|
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.
|
|
|
11/28/2015, 21:52
|
#4
|
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.
|
|
|
11/28/2015, 23:10
|
#5
|
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
|
|
|
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
|
|
|
11/29/2015, 01:10
|
#7
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Quote:
Originally Posted by warfley
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
|
|
|
11/29/2015, 01:24
|
#8
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Quote:
Originally Posted by .SkyneT.
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
|
|
|
|
11/29/2015, 01:28
|
#9
|
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?
|
|
|
11/29/2015, 01:33
|
#10
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Quote:
Originally Posted by warfley
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  )
|
|
|
11/29/2015, 02:16
|
#11
|
elite*gold: 0
Join Date: May 2013
Posts: 1,266
Received Thanks: 627
|
Quote:
Originally Posted by .SkyneT.
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 :/
|
|
|
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.
|
|