Hallo hallo, ich habe mir heute für meinen Led Strip (12V - GRB) eine Steuerung gebaut. Ich habe einfach 3 Potis parallel geschaltet und dann die Spannung im ADC eingelesen. (Nutze Arduino Mega 2560) Die LEDs steuere ich normal über Transistoren an... Jetzt passiert aber was komisches. Ich habe mir einfach mal die Werte des ADCs ausgeben lassen. Wenn ich am 1. Poti drehe passiert alles normal. Der Strip wird langsam grün... Wenn ich jetzt aber am 2. oder 3. Poti drehe, leuchten die anderen Farben auch(aber nur sehr schwach, aber die Farbe ist nicht mehr rein...). Also ich drehe am 2. Poti und es wird rosa oder so was aber halt nicht rein Rot. Die Seriele Ausgabe zeigt das auch an(also das Spannung an den anderen Potis abfällt, aber nur sehr schwach). Hier ein Beispiel: 3.74 - 218.36 - 3.99 oder 16.70 - 16.70 - 254.25 Der Wert von 0 - 1023 wurde schon auf 0 - 256 skaliert. Aber wie man sieht sind Grün und Blau auch ganz leicht an, obwohl die anderen beiden Potis jeweils komplett "aus" sind. Wie kann das sein und was kann ich machen? Wie gesagt ich habe die Potis parallel geschaltet. Liebe Grüße
Zeig mal einen Schaltplan und die Software dann kann man die wesentlich besserer helfen.
Jau Bild ist der Schaltplan ich hoffe das ist okay so?!?!? Code: ---------------------------------------------------------------------- int analogPinRed = 0; // potentiometer wiper (middle terminal) connected to analog pin 3 int analogPinBlue = 1; // potentiometer wiper (middle terminal) connected to analog pin 3 int analogPinGreen = 2; // potentiometer wiper (middle terminal) connected to analog pin 3 // outside leads to ground and +5V int val = 0; // variable to store the value read float red = 0.0; float blue = 0.0; float green = 0.0; #define REDPIN 3 #define GREENPIN 4 #define BLUEPIN 5 void setup() { Serial.begin(9600); pinMode(REDPIN, OUTPUT); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT); } void loop() { red = 255 * ((float)(analogRead(analogPinRed))/1023); blue = 255 * ((float)(analogRead(analogPinBlue))/1023); green = 255 * ((float)(analogRead(analogPinGreen))/1023); analogWrite(REDPIN, (int)red); analogWrite(BLUEPIN, (int)blue); analogWrite(GREENPIN, (int)green); Serial.print(red); Serial.print(" - "); Serial.print(blue); Serial.print(" - "); Serial.print(green); Serial.println(""); } ---------------------------------------------------------------------- Danke im vorraus
XxbOoNx98 schrieb: > Wie kann das sein und was kann ich machen? Wie gesagt ich habe die Potis > parallel geschaltet. Eingänge tauschen, also GRN mit RED, dann GRN mit BLU und sehen was passiert. Wenn die Verschiebung gleich bleibt, sind die Potis schuld, wenn nicht, sind es die ADC-Eingänge.
Nebenbei: 0 bis 1023 sind 1024 verschiedene Zustände, deshalb durch 1024 teilen. Aus selben Grund mit 256 multiplizieren. Dann ist die Umrechnung mathematisch richtig, und als Nebeneffekt ohne float in wenigen Taktzyklen berechenbar. Zu deinem Problem: Versuch Mal kleine Kondensatoren an den Analogeingängen gegen GND.
Hi. Guck mal hier: https://www.arduino.cc/en/Reference/AnalogWrite Da steht unter "Notes and Known Issues", dass der Pin 5 bei kleinen duty cycles nicht komplett abschaltet. Ob das jetzt für deinen Arduino auch zutrifft weiß ich nicht, aber vielleicht ist das auch ein Grund.
PNPs sind hier ungünstig. Fließt kaum Strom durch die LEDs fällt nur sehr wenig Spannung darüber ab. Am Emitter liegen somit über 5,7V was dazu führt das der Arduino mit 5V Pegeln den PNP nicht zum sperren bringt. Das Problem müsste aber bei Rot am größten sein. Wechsel mal auf NPN und beobachte ob das bereits Dein Problem löst. Warum überhaupt erst den rechenintensivsten Datentyp float nehmen um den dann wieder irgendwie auf INT runterzubrechen ? Der ADC wirft dir INT raus, der PWM erwartet INT also warum so kompliziert ?
Peter schrieb: > Hi. > Guck mal hier: > https://www.arduino.cc/en/Reference/AnalogWrite > > Da steht unter "Notes and Known Issues", dass der Pin 5 bei kleinen duty > cycles nicht komplett abschaltet. Ob das jetzt für deinen Arduino auch > zutrifft weiß ich nicht, aber vielleicht ist das auch ein Grund. Das Problem haben die Arduino Maker erkannt. analogWrite(xxx,0) schaltet PWM ab und setzt den Pin dauerhaft auf 0. Zumindest für Timer 1 und 2 funktioniert das perfekt. XxbOoNx98 schrieb: > red = 255 * ((float)(analogRead(analogPinRed))/1023); Arduino kennt die Funktion map(). Die wurde für diesen Zweck entworfen.
Zerstörungsgefahr! Du kannst diese Schaltung so nicht mir PNP aufbauen. So wie Du es gemalt hast lassen sich die LEDs im ungünstigsten Fall gar nicht komplett abschalten, im abgeschalteten Zustand fließt ein Strom durch die Body-Dioden des µC und kann im ungünstigsten Fall auch noch dessen Spannungsversorgung anheben (je nach Größe der Widerstände) und schlimmstenfalls den µC zerstören. Low-Side Schalter baut man mit NPN!
Bernd K. schrieb: > Low-Side Schalter baut man mit NPN! Wenn es ein Vorteil ist das UCE nie unter UBE fallen kann und die geschaltete Spannung klein genug ist kann man das machen. In diesem Fall sind NPN oder gleich LL-N-Fets die bessere Wahl.
XxbOoNx98 schrieb: > red = 255 * ((float)(analogRead(analogPinRed))/1023); Was ist den gegen red = analogRead(analogPinRed)/4); einzuwenden? Du sparst dir Speicher und Rechenzeit. Genauer wird es nebenbei auch noch und ein Fehlerquelle fällt weg.
Es ist ein bekanntes Problem, das zu hochohmige ADC Quellen an z.B. Kanal 1 'mitgezogen' werden von z.B. Kanal 0 oder Kanal 2. Das Problem löst man am besten mit niederohmigen Quellen oder langsamerer Abtastrate oder mit den o.a. Kondensatoren vom Kanaleingang gegen Masse. Der Sample&Hold Kondensator nach dem Multiplexer wird beim Umschalten auf den nächsten Kanal in diesen entladen und zieht ihn deswegen mit.
Danke erstmal an alle für die Hilfe. Allgemein an alle: Die Transistoren sind bei mir NPN Transistoren jedoch habe ich versehentlich PNP im Schaltplan gezeichnet... Entschuldigung dafür...
Matthias S. schrieb: > Es ist ein bekanntes Problem, das zu hochohmige ADC Quellen an > z.B. > Kanal 1 'mitgezogen' werden von z.B. Kanal 0 oder Kanal 2. Das Problem > löst man am besten mit niederohmigen Quellen oder langsamerer Abtastrate > oder mit den o.a. Kondensatoren vom Kanaleingang gegen Masse. > Der Sample&Hold Kondensator nach dem Multiplexer wird beim Umschalten > auf den nächsten Kanal in diesen entladen und zieht ihn deswegen mit. Das scheint mir bis jetzt als hilfreiche Antwort. Ich werde als erstes mal versuchen die Taktfrequenz vom Multiplexer zu minimieren. Da ich nehmlich keine Zeitkritische Anwendung habe ist das kein Problem. Wenn das nicht geht!? Wie viel kapazität sollten die Kondensatoren haben? Liebe Grüße
B. B. schrieb: > XxbOoNx98 schrieb: >> red = 255 * ((float)(analogRead(analogPinRed))/1023); > > Was ist den gegen > red = analogRead(analogPinRed)/4); Ja das stimmt! Bzw. wie ein anderer User bereits geschrieben hat müsste es auch eine 256 sein und der cast in float macht natürlich keinen Sinn, da der PWMc sowieso ein int bekommt. Allerdings habe ich das nur gemacht da ich angst hatte das der Controller keine Ganzzahldivision schlau von alleine rechnen kann... aber ich werde dann im Code das ändern zu: red = analogRead(analogPinRed)/4); blue = analogRead(analogPinBlue)/4); green = analogRead(analogPinGreen)/4); Obwohl 256/1023 nicht ganz 1/4 sind! Oder aber ich nutze map() wie auch jemand hier meinte: red = map(analogRead(analogPinRed), 0, 1023, 0, 255); blue = map(analogRead(analogPinBlue), 0, 1023, 0, 255); green = map(analogRead(analogPinGreen), 0, 1023, 0, 255); Liebe Grüße
Okay habe es jetzt versucht die Taktfrequenz vom Multiplexer zu minimieren jedoch ohne erfolg!
Hab jetzt auch versucht an den ADC Inputs 22nF Kondensatoren gegen Masse zu schalten jedoch auch ohne ohne Erfolg! Vielleicht jemand eine Idee?
XxbOoNx98 schrieb: > Hab jetzt auch versucht an den ADC Inputs 22nF Kondensatoren gegen Masse > zu schalten jedoch auch ohne ohne Erfolg! > > Vielleicht jemand eine Idee? Dann sind die Potis falsch angeschlossen. Kontrolliere das nochmal genau (fehlende Masse irgendwo?) Messe auch mal mit dem Voltmeter an den Schleifern der Potis. Ändere die Software und werte nur noch ein Poti aus ohne den Muxer umzuschalten, stelle sicher daß das geht. Dann das selbe mit nur dem zweiten Poti, dann nur das dritte. Deine Software könnte fehlerhaft sein (Tippfehler, falschen Wert in den falschen Kanal geschrieben), überprüfe ob Du (ohne ADC) wirklich alle Farben unabhängig von 0 bis 100% dimmen kannst, zum Beispiel generiere einfache Rampen für alle 3 Werte in Software. Überprüfe das vielleicht gleich mal als erstes bevor Du Dir an der ADC-Geschichte einen Wolf suchst und das war gar nicht die Ursache.
:
Bearbeitet durch User
Sag' uns doch mal, welchen Wert deine Potis haben und wie sie am oberen Ende verschaltet sind. (Ich nehme mal an, das das untere Ende an Masse geht und der Schleifer an den ADC).
XxbOoNx98 schrieb: > Vielleicht jemand eine Idee? Ja. Marc V. schrieb: > Eingänge tauschen, also GRN mit RED, dann GRN mit BLU und sehen was > passiert. > Wenn die Verschiebung gleich bleibt, sind die Potis schuld, wenn > nicht, sind es die ADC-Eingänge. Hättest du schon gestern ausprobieren können.
Ja okay das Problem hat sich geklärt! Nach dem ich mit dem Voltmeter alles nochmal durchgegangen bin, hab ich mir überlegt ob es richtig ist GND von den Transitoren und den Potis auf eine Leitung zu legen... War es natürlich nicht :D Das 5V Potenzial kommt aus dem Arduino. Die 12 V kommen aus dem Netzteil in Arduino und Schaltung. Der Arduino hat aber die 5V zu einem anderen Referenzpotenzial. Somit sind über den Potis im betrieb nur 0.2 V abfallen.... Trotzdem danke für die Hilfe! Liebe Grüße
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.