Pages: [1]   Go Down
Author Topic: constrain + map + Überlauf  (Read 953 times)
0 Members and 1 Guest are viewing this topic.
MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
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
« Last Edit: March 29, 2009, 11:29:26 am by Schwarzfuss » Logged

Gruß Peter

0
Offline Offline
God Member
*****
Karma: 1
Posts: 588
LumiNet rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: March 29, 2009, 06:20:00 pm by bohne » Logged


MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: March 30, 2009, 11:14:32 am by Schwarzfuss » Logged

Gruß Peter

MK (D)
Offline Offline
Full Member
***
Karma: 8
Posts: 170
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Einen Fehler beim Meßaufbau kann ich wohl ausschliessen:
http://www.arduino.cc/playground/Interfacing/LinuxTTY
ein paar Befehle dazu geschrieben:
Code:
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.
Logged

Gruß Peter

Pages: [1]   Go Up
Jump to: