constrain + map + Überlauf

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.

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?

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

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...

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...

Einen Fehler beim Meßaufbau kann ich wohl ausschliessen: http://www.arduino.cc/playground/Interfacing/LinuxTTY ein paar Befehle dazu geschrieben:

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.