ich hoffe hier bin ich richtig. Habe zu Weihnachten einen MEGA 2560 bekommen und probiere momentan ein wenig rum. Jetzt hänge ich fest, ich habe ein LCD angeschlossen und wollte auf diesem nun den Analogwert von A0 anzeigen lassen. Geht auch so weit, wenn ich A0 mit 5V verbinde zeigt er mir 1023 an. Aber wenn ich A0 über einen 10k Widerstand an 5V anschließe, zeigt er auch 1023 an, und an Masse zeigt er einen zufälligen Wert an. Kann mir jemand meinen Fehler erläutern?
Ja, wenn Du mit einem veränderlichen Widerstand messen willst, dann brauchst Du immer einen Spannungsteiler. Es gibt aber auch Sensoren, die bereits eine sich ändernde Spannung liefern, die kannst Du dann direkt anschließen. Zumindest solange die Spannung positiv und nicht über Vref liegt.
Mario.
Habe es jetzt geschafft, habe mal mit einem lichtempfindlichen Widerstand probiert. Geht soweit, aber er zeigt mir die Werte zwingend als 4 stellig an, also Werte unter tausend zeigt er als xxx0 an. Kann man dies entfernen, sodass er nur soviel Stellen anzeigt wie er benötigt?
Du meinst auf dem LCD?
Ja, das Problem hatte ich auch:
Wenn ich einmal einen Wert über 999 anzeigen lies, habe ich in die 4. Stelle auf dem LCD eine Ziffer geschrieben.
Die bleibt da auch, auch wenn du jetzt wieder einen Wert unter 1000 anzeigen lässt. So lange nicht zwischen drin ein LCD.clear gemacht wird.
Weiß jetzt spontan allerdings nicht mehr, wie ich das gelöst hatte.
oder alternativ den gemessenen Wert speichern und nur dann auf das LCD schreiben, wenn er sich ändert. Das reduziert den Traffic auf dem Bus und das Display hat genügend Zeit zum Zeichnen. Wenn das Analog-Signal so sehr rauscht, dass bei jedem Einlesen ein anderer Wert raus kommt, kann man ggf. noch einen Durchschnittswert bilden oder zum Beispiel Änderungen in einem gewissen Bereich (z. B. +/- 5) ignorieren. Dann "springt" die Anzeige auch nicht so oft.
Vielen Dank, eure Einwände werde ich nachher einbauen. Ich habe in der Zwischenzeit mal weiter gebastelt und wollte mir den Wert auch in Ohm anzeigen lassen. Also habe ich kurz einen 100 Ohm Widerstand gemessen, dort kam 1014 raus. Weil der Wert größer wird wenn der Widerstand kleiner wird, habe ich zur Errechnung in Ohm 101400 / Messwert genommen. Dort gibt er mir aber als Ergebnis bei dem 100 Ohm Widerstand -29 an. Habe als Kontrolle den anderen Wert auch noch eingeblendet.
#include <LiquidCrystal.h>
LiquidCrystal LCD(12, 11, 5, 4, 3, 2);
int WERT;
int var;
int a;
void setup() {
LCD.begin(16, 2);
LCD.print("ANALOGWERT OHM");
}
void loop() {
LCD.setCursor(0, 1);
var = 101400;
a = analogRead(A0);
WERT = var / a;
LCD.print(WERT);
LCD.setCursor(8, 1);
LCD.print(analogRead(A0));
delay(500);
}
Wieso zeigt er mir nicht 100 wie gewollt, sondern -29 an??
Jetzt habe ich aber das Problem, dass bei einem 1k Widerstand das Programm 108 ausgibt. Die Rechnung hat er richtig gemacht, 101400 / 932 sind 108. Deshalb stimmt mein Therm nicht. Also kurz überschlagen und rausgekommen ist
WERT = -20 * analogRead(A0) + 20000L
Leider ein wenig ungenau, ca. 400 Ohm Toleranz. Aber ich bin soweit gekommen wie ich kommen wollte. Das kommt wohl daher, dass ich diese 5V/1023 als 0,005 angenommen habe, um leichter rechnen zu können