X
Die Erklärung dürfte ganz einfach die sein, dass der Arduino lt. https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ einen 10-Bit ADC hat, während Dein Board lt. Datenblatt über einen 12-Bit ADC verfügt.Nach dem Code aus dem Internet soll der pots Werte zwischen 0-1024 liefern, allerdings liefert er bei mir Werte zwischen 0-4096 (mit diesen Werten habe ich die map-Funktion aufgerufen). Kann es sein das der pots einen Vorwiderstand benötigt? Wie erwähnt, kein data/spec sheet dazu....
Aber: wo ist @White_Fox ?
Ja, woran denn dann? Es macht keinen Unterschied ob die an 3,3V oder an GND zusammenlaufen, am Ende kommt es auf dasselbe raus: Ungleichmäßige Stromverteilung in den Strängen, und daraus folgend eine thermische Mitkopplung.Die LEDs sind gar nicht an +3.3 V angeschlossen...
pwmJa, woran denn
Das scheint ein Naturgesetz zu sein. Kaum hat man den Fuß zur Tür hinaus gestellt, wird der Ruf lautDa ist man nur mal ein einziges Wochenende weg...
Das habe ich ganz übersehen und bin verwirrt: was hat die Auflösung des ADCs mit dem Widerstand zu tun?Also kein Widerstand?
Naja, LEDs schaltet man schnell ein und aus. Je länger aus, desto dunkelwenn Du erst dimmen schreibst und dann ein/ausschalten.
Doch, die LEDs erzeugen direkt Licht in der gewünschten Wellenlänge. Einzige Ausnahme können weisse LEDs sein, bei denen das erzeugte Licht von einer Phosphorverbindung aufgenommen und in langwellige dem Licht unterschiedlicher Wellenlängen wieder ausgegeben wird.Die LEDs sind gefärbt, aber erzeugen nicht rotes, gelbes, grünes usw. Licht.
mihe7 vereinfacht zwar grob fahrlässig, aber im Kern hat er Recht: Das schnelle Ein-Ausschalten (mit mehreren kHz) sieht für dein Auge wie gleichmäßig gedimmt aus. Hättest du die Augen einer Fliege, hättest du ein Stroboskop gebaut.Du hast das immernoch nicht ganz gelesen und widersprichst Dir auch etwas, wenn Du erst dimmen schreibst und dann ein/ausschalten.
Außerdem die - -Leiste ist hierbei +3.3V. Die +-Leiste gnd.
Die LEDs sind gefärbt, aber erzeugen nicht rotes, gelbes, grünes usw. Licht.
Also nochmal, die 5 LEDs sind an die 5 pwm Pins/Ausgänge des mc angeschlossen. Ich weiß nicht, mit wie viel V.
255 (sehr sehr hell)
Hmm... für grobe Fahrlässigkeit müsste ich es besser wissen (können), was nicht der Fall istmihe7 vereinfacht zwar grob fahrlässig
Pssst! Du riskierst gerade eine Petition: Stopp der PWM - zum Schutz der armen Fliegen.Hättest du die Augen einer Fliege, hättest du ein Stroboskop gebaut.
Die Ausgänge haben zum eigenen Schutz in der Regel auch Widerstände. Wenn sich die Leute ständig die Boards zerhauen würden, nur weil sie ein Kabel falsch angeschlossen hätten, würden sich sonst ärgern und die ganzen Bastelsysteme hätten sich so nie durchsetzen können. (Die Transistoren / ICs der Boards mögen so höhere Ströme ebenso wenig wie Deine LEDs.)Nur Boards mit einem echten digital-analog-Wandler können die Spannung reduzieren...
Fragt sich nur wieso die LEDs noch alle funktionieren.
Der ADC liefert eine Ganzzahl zurück, das Ganze funktioniert folgendermaßen:Vereinfacht gesagt, verstehe ich die Funktionsweise von digitalRead und analogRead noch nicht.
Eingangsspannung = (Wandlungsergebnis / Auflösung) * Referenzspannung
.Die Aussage, daß Halbleiter keinen Widerstand hätten, ist etwas irreführend: LEDs haben einen differentiellen Widerstand, eine Funktion mit Temperatur und angelegter Spannung als Eingangsparameter (und sicher noch ein paar weiteren).Hmm... für grobe Fahrlässigkeit müsste ich es besser wissen (können), was nicht der Fall ist
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
int pins[] = {
PF_2, PF_3, PB_3, PC_4, PC_5};
DHT_Unified dht(PE_4, DHT11);
int potValue;
float t, h;
int t1, t2, h1, h2;
void setup()
{
// put your setup code here, to run once:
pinMode(PF_2, OUTPUT);
pinMode(PF_3, OUTPUT);
pinMode(PB_3, OUTPUT);
pinMode(PC_4, OUTPUT);
pinMode(PC_5, OUTPUT);
pinMode(A11, INPUT);
Serial.begin(9600);
dht.begin();
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print(F("Sensor Type: "));
Serial.println(sensor.name);
Serial.print(F("Driver Ver: "));
Serial.println(sensor.version);
Serial.print(F("Unique ID: "));
Serial.println(sensor.sensor_id);
Serial.print(F("Max Value: "));
Serial.print(sensor.max_value);
Serial.println(F("°C"));
Serial.print(F("Min Value: "));
Serial.print(sensor.min_value);
Serial.println(F("°C"));
Serial.print(F("Resolution: "));
Serial.print(sensor.resolution);
Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print(F("Sensor Type: "));
Serial.println(sensor.name);
Serial.print(F("Driver Ver: "));
Serial.println(sensor.version);
Serial.print(F("Unique ID: "));
Serial.println(sensor.sensor_id);
Serial.print(F("Max Value: "));
Serial.print(sensor.max_value);
Serial.println(F("%"));
Serial.print(F("Min Value: "));
Serial.print(sensor.min_value);
Serial.println(F("%"));
Serial.print(F("Resolution: "));
Serial.print(sensor.resolution);
Serial.println(F("%"));
Serial.println(F("------------------------------------"));
}
void readpots()
{
potValue = analogRead(A11);
potValue = map(potValue, 0, 4096, 0, 255);
// Serial.println(potValue);
}
void readtempandhumi()
{
sensors_event_t event;
dht.temperature().getEvent(&event);
t = event.temperature;
dht.humidity().getEvent(&event);
h = event.relative_humidity;
t1 = (int)t;
t2 = ((int)(t * 10)) % 10;
h1 = (int)h;
h2 = ((int)(h * 10)) % 10;
Serial.print(t1);
Serial.print(" ");
Serial.print(t2);
Serial.print(" ");
Serial.print(h1);
Serial.print(" ");
Serial.println(h2);
}
void loop()
{
// pins
readpots();
for (int i = 0; i < 5; i++)
{
analogWrite(pins[i], potValue);
}
delay(10000);
readtempandhumi();
readpots();
// temp
for (int i = 0; i < 5; i++)
{
if (t1 & (1 << i))
{
analogWrite(pins[i], potValue);
}
else
{
analogWrite(pins[i], 0);
}
}
delay(10000);
readpots();
for (int i = 0; i < 5; i++)
{
if (t2 & (1 << i))
{
analogWrite(pins[i], potValue);
}
else
{
analogWrite(pins[i], 0);
}
}
delay(10000);
readpots();
// humi
for (int i = 0; i < 5; i++)
{
if ((h1 - 40) & (1 << i))
{
analogWrite(pins[i], potValue);
}
else
{
analogWrite(pins[i], 0);
}
}
delay(10000);
}
Ah, verstehe, wobei... Dieses Halbleitergedöns ist echt strange.LEDs haben einen differentiellen Widerstand, eine Funktion mit Temperatur und angelegter Spannung als Eingangsparameter (und sicher noch ein paar weiteren).
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
int pins[] = {
PF_2, PF_3, PB_3, PC_4, PC_5
};
DHT_Unified dht(PA_5, DHT11);
int potValue;
float t, h;
int t1, t2, h1, h2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(PF_2, OUTPUT);
pinMode(PF_3, OUTPUT);
pinMode(PB_3, OUTPUT);
pinMode(PC_4, OUTPUT);
pinMode(PC_5, OUTPUT);
pinMode(A11, INPUT);
// pinMode(PA_5, INPUT);
dht.begin();
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("------------------------------------"));
readtempandhumi();
}
void readpots() {
potValue = analogRead(A11);
potValue = map(potValue, 0, 4096, 0, 255);
// Serial.println(potValue);
}
void readtempandhumi() {
sensors_event_t event;
dht.temperature().getEvent(&event);
t = event.temperature;
dht.humidity().getEvent(&event);
h = event.relative_humidity;
t1 = (int) t;
t2 = ((int) (t * 10)) % 10;
h1 = (int) h;
h2 = ((int) (h * 10)) % 10;
Serial.println(t);
// Serial.println(h);
}
void blink(int v) {
for (int i = 0; i < 5; i++) {
if (v & (1 << i)) {
analogWrite(pins[i], potValue);
} else {
analogWrite(pins[i], 0);
}
}
}
void longDelay(int v) {
for (int i = 0; i < 10; i++) {
readpots();
blink(v);
delay(500);
}
}
void loop() {
// pins
longDelay(31);
// temp
readtempandhumi();
longDelay(t1);
longDelay(t2);
// humi
longDelay(h1 - 40);
}
Den "noch Monolog", so viel Zeit muss sein Du musst (solltest) vor jede LED den entsprechenden Vorwiderstand schalten. Wenn ich rechnerisch 65 Ohm brauche, würde ich allerdings lieber erstmal 80 oder sogar 100 Ohm verwenden. Das Zeug muss ja nicht maximal hell leuchten.mihe7 , ich unterbreche nur ungern den Monolog, aber muss ich nicht einfach nur 5mal 60 Ohms Vorwiderstände anschließen?
Ja, aber wie gesagt: theoretisch. Denn wenn die Spannung statt 2V z.B. 2,1V beträgt, steigt der Strom z.B. auf 23mA, was dann z.B. nur noch etwas über 90Ω sind. Und dann kommt ja noch die Temperaturabhängigkeit hinzu. Und die Exemplarstreuung nicht vergessen, kein Halbleiter ist wie der andere.Nehmen wir mal an, wir könnten Spannung/Strom einer LED konstant halten, also z. B. 2 V/20 mA. Würde das dann nicht bedeuten, dass man die LED mit einem "Ersatzwiderstand" von 100 Ohm darstellen könnte, so dass bei direktem Betrieb unter 2 V die LED selbst den Strom auf 20 mA begrenzen würde?
Ja, um Überspannungen zu begrenzen macht man sowas, dazu gibt es spezielle TVS-Dioden. Oder schau dir mal an, was man mit Zenerdioden macht. Bei LEDs sollte man sowas unterlassen, Sperrspannung deutlich über ihrer Durchlaßspannung mögen die gar nicht gerne. Sie sind halt auf andere Zwecke optimiert.Was anderes: wenn ich das richtig lese (Google hilft ), könnte man eine Diode in Sperrichtung über der Durchbruchspannung betreiben, wenn man den Strom begrenzt. Aber wozu sollte man das tun? Um Überspannungen abzufedern?
Habe mich geirrt. Das sind Braun-Schwarz-Schwarz-Schwarz-Braun Widerständen, also 100 Ohms. 20 Ohm wäre auch etwas seltsam gewesen.Jetzt habe ich aber nur Rot-Schwarz-Schwarz-Schwarz-Rot Widerstände, also 20 Ohms Widerstände mit einer Toleranz +- 2%
Wenn er vorne mit 3,3V befeuert wird - ja. (Und 5V sind eher selten, bei 8-Bit-Prozessoren noch anzutreffen.)Und der mc liefert wirklich 3,3 V?
Was für eine Frage...Habe noch eine Frage, darf ich fragen?
Was für ein LCD? Zu fast* jedem LCD gibt es ein Datenblatt. Was sagt es?Möchte ein lcd Display anschließen und habe drei verschiedene Grafiken aus denen immer eine unterschiedliche Belegung hervorgeht....
LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
Der PWM-Ausgang KANN PWM liefern. Er kann aber auch als normaler I/O verwendet werden.Wieso sind die digitalen Eingänge/Ausgänge am Pwm angeschlossen?
Keine Ahnung, vom Arduinogeraffel lass ich die Finger, das ist Teufelszeug.Welchen Konstruktor kann ich da nehmen?
Kontrast richtig eingestellt?Das Display (LCD1602) leuchtet jedenfalls nicht
Bis jetzt nicht, geht das nur mit Potentiometer?Kontrast richtig eingestellt
Theoretisch geht es auch mit zwei Festwiderständen, aber das ist eher schlecht, gerade für Anfänger ist es hilfreicher, wenn man einfach mal rumdrehen und einen brauchbaren Kontrast suchen kann. Stell den Kontrast so ein, daß ganz leicht die Kästchen zu sehen sind wenn das LCD nichts anzeigt.Bis jetzt nicht, geht das nur mit Potentiometer?
Nein, das ist korrekt (also das, was du schreibst, nicht der Schaltplan), sogar gleich an zwei Stellen.Täuscht mich das Bild (Schematic) oder sind hier die 5V des Arduino direkt mit GND verbunden?!?
Wie bekomm ich denn 5V auf 1V?Theoretisch geht es auch mit zwei Festwiderständen, aber das ist eher schlecht, gerade für Anfänger ist es hilfreicher, wenn man einfach mal rumdrehen und einen brauchbaren Kontrast suchen kann. Stell den Kontrast so ein, daß ganz leicht die Kästchen zu sehen sind wenn das LCD nichts anzeigt.
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("helloo");
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Halloo");
delay(1000);
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
}
Da war jemand sehr sorgfältig.Täuscht mich das Bild (Schematic) oder sind hier die 5V des Arduino direkt mit GND verbunden
Das lustige ist: "Falls eine Hintergrundbeleuchtung vorhanden ist. Bei einigen Modulen muss 5 V angelegt werden, bei anderen ist der Strom durch einen Vorwiderstand zu begrenzen." (https://de.wikipedia.org/wiki/HD44780)Vor allem wird die Hintergrundbeleuchtung des LCDs ohne Vorwiderstand betrieben (das sind auch nur ein paar LEDs).
Die Pins können verschiedene Funktionen übernehmen, je nachdem wie Du den AVR programmierst. Standardmäßig dürften sie als digitale Eingänge konfiguriert sein, müsstest Du im Datenblatt nachschauen. Für PWM werden sie als Ausgang konfiguriert und nach der PWM-Aktivierung von der Hardware (im Chip) ein- und ausgeschaltet.Wieso sind die digitalen Eingänge/Ausgänge am Pwm angeschlossen?
Im einfachsten (aber ineffizienten) Fall mittels Spannungsteiler. Achtung, Killergrafik:Wie bekomm ich denn 5V auf 1V?
+5V --------[R1]---*---[R2]---*--- GND
| |
| |
<-- 1V -->
U1 = R1 * Iges
ab. U1 sollen 4V sein, also 4V = R1 * Iges <=> R1 = 4V/Iges
und somit analog R2=1V/Iges