Go Down

Topic: constrain + map + Überlauf (Read 997 times) previous topic - next topic

Schwarzfuss

Mar 29, 2009, 06:10 pm Last Edit: Mar 29, 2009, 06:29 pm by Schwarzfuss Reason: 1
Hallo liebe Arduino-Gemeinde
Zunächst einmal herzlichen Dank an die Macher für dieses großartige Projekt,
absolut genial, gerade für mich als Linux-User und schon geht die Fragerei los...

Es geht um Temparaturmessung über eine Si-Diode (1N4001) als Sensor,
dazu hab ich die Beispiel-Datei 'AnalogInput' geladen und etwas verändert,
da kein LCD angeschlossen ist, nutze ich als Ausgabe mein Digital-Multimeter an PWM9
Die Diode ist über einen 1k Widerstand an Analog2 angeschlossen.

Code: [Select]
analogReference(INTERNAL); // die Spannung an der Diode wird 1.1V nicht überschreiten
val = constrain(analogRead(potPin), 620, 635); // der Messbereich wird eingegrenzt (Zimmertemp. =5V, anfassen =0V)
analogWrite(9, (val-620)*17); //PWM9 zeigt die Spannung

Es geht hier nur um einen Test, noch nichts sinnvolles.
Allein durch Anfassen der Diode wechselt die Spannung von 5V auf 0V, so soll es sein!
Warum aber geht es nicht, wenn ich den Befehl map benutze?

Code: [Select]
analogWrite(9, map(val, 620, 635, 0, 255));
Nachdem durch Anfassen der Diode die Spannung auf nahezu 0V gesunken ist,
wechselt sie wieder auf 5V, ein Überlaufproblem?
edit: hab den Arduino Duemilanove
Gruß Peter

bohne

#1
Mar 30, 2009, 01:19 am Last Edit: Mar 30, 2009, 01:20 am by bohne Reason: 1
Ich gucke nun schon zum fünften mal in diesen Thread. Scheinbar hat niemand eine Antwort? Ich kann keinen Fehler in der Software erkennen. Vielleicht ist die Schaltung nicht in Ordnung?

Hast Du mal externes AREF probiert? Dann ändern sich bestimmt die Zahlen, aber vielleicht machen die 1.1V intern ja Probleme...
http://www.dorkbot.de
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254
http://www.luminet.cc

Schwarzfuss

#2
Mar 30, 2009, 06:12 pm Last Edit: Mar 30, 2009, 06:14 pm by Schwarzfuss Reason: 1
Vielen Dank für deine Antwort bohne,
habs mal probiert mit einer externen Referenz,
aber da gehts völlig durcheinander, wahrscheinlich liegts an meinem
völlig frei verdrahtetem Aufbau, der doch recht hohen Abtastfrequenz von 10kHz
und des arg eingegrenzten Bereichs.
Ab und zu wird wohl ein völliger Nonsenswert gelesen und zur Ausgabe gebracht,
Abhilfe könnte vielleicht eine zusätzlich programmierte Schleife bringen,
die die letzten 2 oder 3 Messwerte auf Gleichheit prüft und erst dann zur Ausgabe bringt.
Seis drum, das werd ich am nächsten Wochenende mal durchtesten...
Gruß Peter

Schwarzfuss

Einen Fehler beim Meßaufbau kann ich wohl ausschliessen:
http://www.arduino.cc/playground/Interfacing/LinuxTTY
ein paar Befehle dazu geschrieben:
Code: [Select]
Serial.begin(115200);
Serial.print(val, DEC);
Serial.print(" ");
val2 = map(val, 620, 635, 0, 255);
Serial.println(val2, DEC);

Wird die Ausgabe nun über 'Serial Monitor' überwacht,
gibt es absolut keine "Ausreißer" und kein Überlaufproblem,
so muß ich den Fehler auf das angeschlossene DMM schieben...
Zu hohe Eingangskapazität, zu hoher Eingangswiderstand, falscher Meßzeitpunkt, keine Ahnung.
Gruß Peter

Go Up