ich lese mich gerade in die Sache PWM ein und kann auch schon einen 12V Lüfter hoch und runter fahren. Ich möchte nun den gesetzten Wert des PWM Pins auslesen doch kommen da ganz andere Zahlen raus.
Gesetzt ist z.B. 255 doch die Ausgabe sagt 70
Warum??
#define led 9
int i = 0;
int del = 100;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
analogWrite(led, 50);
}
void loop()
{
digitalWrite(led, HIGH);
for(i = 50; i < 254; i++)
{
analogWrite(led, i);
Serial.println(analogRead(led));
delay(del);
}
delay(10000);
for(i = 254; i > 50; i--)
{
analogWrite(led, i);
Serial.println(analogRead(led));
delay(del);
}
}
Weil Pin 9 ein digitaler Pin ist, den Du demzufolge nicht mit analogRead() auslesen kannst.
Wenn Du z.B. einen UNO hast, der hat 6 analoge Eingangspins (A0 bis A5). Wenn Du nun von einem nicht vorhandenen analogen Pin 9 einliest, bekommst Du halt einen Zufallswert.
Wie die Kollegen schon sagten, analogread() kann auch nur auf die analogen Eingänge angewendet werden. Doch selbst wenn du jetzt auf die Idee kommen würdest, den PWM-Ausgang mit einem analogen Eingang zu verbinden, wirst du vielleicht vom ausgelesenen Wert enttäuscht sein: Mit einer PWM wird keine analoge Spannung erzeugt, sondern nur das Verhältnis zwischen Ein- und Ausschaltzeit beeinflusst. Das analoge Auslesen dürfte dann (überwiegend) 0 und 1023 als Wert zurückliefern.
speedy1982:
ich lese mich gerade in die Sache PWM ein und kann auch schon einen 12V Lüfter hoch und runter fahren. Ich möchte nun den gesetzten Wert des PWM Pins auslesen doch kommen da ganz andere Zahlen raus.
Die beiden Funktionen "analogWrite" und "analogRead" haben außer ein paar Buchstaben am Namensanfang absolut nichts miteinander zu tun.
Die Funktion analogRead kann mit Hilfe eines Analog-Digital-Wandlers eine Spannung zwischen 0 und 5V messen (an einem der Analog-Eingänge) und die gemessene Spannung als Zahl einem Wert zwischen 0 und 1023 zuordnen.
Die Funktion analogWrite hat von den Arduino-Machern einen völlig irreführenden Namen bekommen, denn sie hat absolut nicht mit irgendetwas analogem zu tun, sondern es ist eine rein digital arbeitende Funktion. Für einen Digital-Pin. Und zwar für ganz spezielle Digital-Pins, nämlich die PWM-Pins. Mit Hilfe der Funktion kann an einem PWM-Pin eine Schaltfrequenz von z.B. 500 Herz eingeschaltet werden, also 500 mal pro Sekunde ein und 500 mal pro Sekunde aus, 0V und 5V abwechselnd, mit einem bestimmten zeitlichen Verhältnis aus ein und aus. Bei einer PWM-Periode von mal angenommen 1/500 Sekunde würde diese Zeit nochmals in 255 Zeitscheiben unterteilt werden. Ein PWM-Wert von 40 würde dann bedeuten, dass der Pin immer für 40/(500255) Sekunden auf 5V und für entsprechend (255-40)/(500255) Sekunden auf 0V geschaltet wird. Mit hoher Frequenz zwischen 5V und 0V umschaltend. Wobei die "Pulse" innerhalb der PWM-Periode länger oder kürzer auf 5V geschaltet sein können und automatisch vom Arduino generiert werden.
Wie gesagt, die beiden Funktionen "analogWrite" und "analogRead" haben außer ein paar Buchstaben am Namensanfang überhaupt nichts miteinander zu tun. Und obendrein hat die Funktion "analogWrite" von den Arduino-Machern einen völlig unpassenden Namen erhalten. Weshalb die Jungs vom Arduino-Team den total falschen Namen "analogWrite" vergeben haben, ist dabei irgendwie nachvollziehbar: Man kann einen PWM-Ausgang benutzen, um z.B. LEDs in der Helligkeit zu regeln. Das menschliche Auge kann nämlich schnellen Helligkeitswechseln nicht folgen und nimmt schnelles Flimmern gleichmäßig wahr. So dass sich an einem PWM-Digitalausgang eine Schaltung realisieren läßt, die für das menschliche Auge wie eine analoge Regelung mit einem Potentiometer aussieht. Und weil sich ein solcher Ausgang für eine Schaltung verwenden läßt, die aussieht wie analog, sind die wohl an den Namen "analogWrite" gekommen. Der Name ist aber natürlich völliger Schwachsinn, weil damit tatsächlich digital geschaltet wird, nämlich mit hoher Frequenz (der PWM-Frequenz) zwischen 5V und 0V hin und her.