Hallo Ich möchte das ein Atmega 328p alle 168750 millisekunden die Temperatur mithilfe eines lm35 misst. Das ganze funktioniert auch, allerdings nur bis 0°C. Wie kann ich negative Temperaturen messen? Ich habe es so versucht: http://forum.arduino.cc/index.php?topic=22114.0 Allerdings bekomme ich auch keine negativen Werte.
>Wie kann ich negative Temperaturen messen? Ich habe es so >versucht: http://forum.arduino.cc/index.php?topic=22114.0 >Allerdings bekomme ich auch keine negativen Werte. Zeig deinen kompletten Code und keine Links auf irgendein Forum.
1 | #include <EEPROM.h> |
2 | float temp; |
3 | void setup(){ |
4 | pinMode(13,OUTPUT); |
5 | pinMode(8,OUTPUT); |
6 | digitalWrite(8,0); |
7 | }
|
8 | int addr=0; |
9 | void loop(){ |
10 | if(digitalRead(8)==0){ |
11 | digitalWrite(13,1); |
12 | temp=(5.0 * (analogRead(A5) - analogRead(A4)) * 100) / 1023; |
13 | temp+=55.0; |
14 | int t=temp*100.0; |
15 | int h=t%100; |
16 | t=t-h; |
17 | t=t/100; |
18 | EEPROM.write(addr,t); |
19 | EEPROM.write(addr+1,h); |
20 | addr+=2; |
21 | if(addr>1023)addr=0; |
22 | digitalWrite(13,0); |
23 | delay(168750); |
24 | }
|
25 | }
|
:
Bearbeitet durch User
>Wie kann ich negative Temperaturen messen? Indem du dem LM35 negative Spannungsversorgung spendierst. Die Beschaltung für Minustemperaturen ist im Datenblatt beschrieben. Der LM50 kann übrigens ohne eine negative Spannungsversorgung auch Minustemperaturen messen.
Habs gelesen. Aber wie werte ich das dann aus? Der atmega kann doch keine negative Spannung messen, oder?
Hallo Roman, Roman B. schrieb: > Habs gelesen. Aber wie werte ich das dann aus? Der atmega kann > doch keine negative Spannung messen, oder? Die Spannung an A5 wird doch auch nicht negativ, sie wird nur niedriger als die an A4! A4 liegt ja durch die zwei Dioden (Figure 18) schon bei ca. 1.2V, dadurch hast du genug Luft nach unten. Beachte aber Figure 7: Durch die geringere Versorgungsspannung von nur noch 3.8V ist bei 125° Schluss. LG, Sebastian
Wenn mein Code fehlerfrei ist, wieso bekomme ich dann immer noch Werte um die 16°C, wenn ich die Platine ins Gefrierfach lege?
Die Werte bei Raumtemperatur sind dagegen ziemlich genau! Nur bei den niedrigen Temperaturen gibts Probleme!
Da ich das ganze verwenden möchte um die Temperatur unter Tags aufzuzeichnen ist das mit den 125° relativ egal.
Roman B. schrieb: > Wenn mein Code fehlerfrei ist, wieso bekomme ich dann immer noch Werte > um die 16°C, wenn ich die Platine ins Gefrierfach lege? Entschuldigung für die Ungenauigkeit: Nach erneutem messen komme ich auf werte zwischen 36°C und 99°C.
Hi >Entschuldigung für die Ungenauigkeit: Nach erneutem messen komme ich auf >werte zwischen 36°C und 99°C. Wie sieht deine Schaltung aus? MfG Spess
Roman B. schrieb: > Oh! hab das ganze kontrolliert: Ich habe 1N4148 Dioden verbaut. > Liegt es > vielleicht daran? Nein, daran liegt es nicht. Was genau ist mit A4 und mit A5 bei dir verbunden? Skizziere uns mal genau deine Schaltung, der Forumsbeitrag lässt da Raum für Interpretationen ... Und: Speichere die Resultate von analogRead(A4) und analogRead(A5) mal zwischen und gib die Werte auf der seriellen Schnittstelle aus. Was sieht du da? LG, Sebastian
:
Bearbeitet durch User
Serielle Schnittstelle hab ich nicht zur Verfügung:( Schaltung:
1 | A5 ---------. VCC |
2 | | + |
3 | | | |
4 | | | |
5 | | '------------- L |
6 | | M |
7 | '------------------.------3 |
8 | .-|<--|<--.-----)------5 |
9 | | 1N4148 | .-. |
10 | | A4 | |18k |
11 | | '-' |
12 | | | |
13 | '----- GND -----' |
:
Bearbeitet durch User
Roman B. schrieb: > Serielle Schnittstelle hab ich nicht zur Verfügung:( Warum nicht? Ich dachte, die hat jeder Arduino? Sowas ist natürlich leichtsinnig, wenn man versucht ohne eine Möglichkeit zur Ausgabe auszukommen. Ich schätze mal, dass analogRead einen unsigned Wert lieferen wird, wodurch du natürlich im Regen stehst, wenn
1 | ..... analogRead(A5) - analogRead(A4) .... |
ein "negatives" Ergebnis liefert, weil der Wert von A4 größer als der Wert von A5 ist. Der Ausdruck sollte dann zwar eigentlich negativ sein, da es sich dabei aber um einen unsigned-Ausdruck handelt, kann er nicht negativ sein sondern wird enorm positiv sein. Was dir dann den ganzen weiteren Rest zusammen haut. Ist aber nur eine Schätzung. Als Arduino Programmierer weißt du besser als ich, welchen Datentyp analogRead eigentlich liefert. Im Zweifel hätte man halt einfach ein paar Zwischenergebnisse auf einer seriellen Schnittstelle ausgegeben und sich die Werte angesehen. Dann wäre das Problem schnell klar. Aber, leider, leider .... Du hast ja aber noch das EEPROM. Viel Spass beim Abspeichern und Auswerten der Werte darüber.
:
Bearbeitet durch User
>> Serielle Schnittstelle hab ich nicht zur Verfügung:( > >Warum nicht? Genau, warum nicht? Ohne die kann man sich eigentlich gleich die Kugel geben;)
Weil ich eine Platine mit einem Atmega 328p Mikrocontroller zusammengelötet habe und keinen Arduino Verwende! Aber wieso können 2 unsignedd Werte wenn sie subtrahiert werden, nicht negativ werden? Ich darf nur das Ergebnis nicht unsigned abspeichern!
Hi,
>werte zwischen 36°C und 99°C.
du hast nicht zufällig die Pullups aktiv?
Mache mal auch 18K von A5 nach GND.
Aus dem Datenblatt: "Choose R1 = −VS/50 μA"
Übrigens reichen auch 0,6V= 1x1N4148 für -60°C..ok -40°C
Ein Spannungsteiler 220R/9,1K vor A4/5 und Vref=5,00V machen die Sache
recht linear.
Viel Erfolg, Uwe
Ich hab schon 18k von A5 nach GND. Könntest du mir das mit den Pullups und dem Spannungsteiler etwas näher erklären? Ich hab noch nicht so viel Ahnung.
Hi, >Ich hab schon 18k von A5 nach GND. ahh, gut. Naja, man kann den Eingängen interne Pullups spendieren. Wenn die an sind werden halt die Eingänge nach Vcc gezogen. Schlage mich nicht aber waren die nicht so 20-40K???? Kannste aber recht einfach testen, LM35 ab, und dann A4/A5 einzeln anzeigen lassen, müssen 0 sein. Spannungsteiler: Vref=5V->/1023=4,8875mV/LSB * 2 = 9,775mV Dein LM35 hat 10mV/°C 10mV/9320*9100 = 9,7639mV Wenn du also den ADC Wert /2 teilst haste eine Auflösung von 1°C sonst ist 1 LSB halt 0,5°C wert. Also 220R zwischen LM-Out und A5 und von A5->GND 9,1K -> bei 100°C hast du einen Fehler von 0,011mV. Ist doch nicht schlecht oder? Übrigens ist dann bei 0,6V auch der "Choose R1 = −VS/50 μA" gleich mit erschlagen. Viel Erfolg, Uwe
Karl Heinz schrieb: > Ich schätze mal, dass analogRead einen unsigned Wert lieferen wird,
1 | int analogRead(uint8_t pin) |
Roman, hast du einen Arduino irgendwo? Wenn ja, kannst du TX des Atmega328P mit sagen wir Pin3 des Arduino verbinden und über SoftwareSerial von dort einlesen und über Serial an den PC weitergeben? Lg, Sebastian PS: GND verbinden nicht vergessen ...
:
Bearbeitet durch User
Ja ich hab einen Arduino und diesen Vorschlag halte ich für eine gute Idee. Das probier ich mal aus. Wenn ich den Spannungsteiler verwende, kann ich dann negative Temperaturen messen?
Mit einer Diode: noch immer kein Besseres Ergebnis: 0: 58.160000 1: 58.160000 2: 58.160000 3: 57.669998 4: 57.669998 5: 57.669998 6: 57.669998 7: 57.180000 8: 56.689999 9: 56.689999 10: 56.200001 11: 55.709999 12: 55.709999 13: 55.220001 14: 53.759998 15: 53.270000 16: 52.779999 17: 52.779999 18: 51.799999 19: 50.830002 20: 50.340000 21: 50.340000 22: 49.849998 23: 48.380001 24: 47.889999 25: 47.400002 26: 47.400002 27: 46.919998 28: 45.939999 29: 45.450001 30: 44.959999 31: 44.470001 32: 44.470001 33: 43.490002 34: 43.009998 35: 42.520000 36: 41.540001 37: 41.049999 38: 40.070000 39: 39.580002 40: 39.099998 41: 38.610001 42: 38.119999 43: 37.630001 44: 37.630001 45: 36.650002 46: 37.139999 47: 36.160000 48: 35.669998 49: 35.189999 50: 34.209999 51: 34.209999 52: 34.209999 53: 33.720001 54: 33.230000 55: 32.250000 56: 31.760000 57: 31.280001 58: 30.790001 59: 30.790001 60: 30.299999 61: 29.809999 62: 29.320000 63: 29.320000 64: 28.830000 65: 27.850000 66: 27.370001 67: 26.879999 68: 26.879999 69: 26.389999 70: 25.900000 71: 25.410000 72: 24.920000 73: 24.920000 74: 24.430000 75: 23.940001 76: 23.459999 77: 22.969999 78: 22.969999 79: 22.480000 80: 21.990000 81: 21.990000 82: 21.010000 83: 21.010000 84: 20.520000 85: 21.010000 86: 20.030001 87: 20.030001 88: 20.030001 89: 19.059999 90: 19.059999 91: 19.059999 92: 18.570000 93: 18.080000 94: 18.080000 95: 17.590000 96: 17.100000 97: 16.610001 98: 16.610001 99: 16.120001 100: 15.640000 101: 15.150000 102: 15.640000 103: 15.150000 104: 15.150000 105: 14.660000 106: 13.680000 107: 13.680000 108: 13.190000 109: 13.680000 110: 13.680000 111: 12.700000 112: 12.210000 113: 12.210000 114: 12.210000 115: 11.730000 116: 11.730000 117: 11.730000 118: 10.750000 119: 11.240000 120: 10.750000 121: 10.260000 122: 10.260000 123: 9.770000 124: 9.280000 125: 9.280000 126: 9.280000 127: 9.280000 128: 8.790000 129: 8.300000 130: 7.820000 131: 7.820000 132: 7.330000 133: 7.330000 134: 7.330000 135: 7.330000 136: 6.840000 137: 6.350000 138: 6.350000 139: 5.860000 140: 5.860000 141: 5.370000 142: 4.880000 143: 4.880000 144: 4.880000 145: 4.390000 146: 3.910000 147: 3.910000 148: 3.910000 149: 3.910000 150: 3.420000 151: 3.420000 152: 3.420000 153: 2.930000 154: 2.930000 155: 2.930000 156: 1.950000 157: 1.950000 158: 2.440000 159: 1.950000 160: 1.950000 161: 1.460000 162: 1.460000 163: 0.970000 164: 1.460000 165: 0.970000 166: 0.970000 167: 0.970000 168: 0.480000 169: 0.480000 170: 0.480000 171: -0.490000 172: -0.490000 173: -0.490000 174: -0.490000 175: 0.000000 176: 0.000000 177: 0.000000 178: -0.490000 179: 0.000000 180: 0.000000 181: 0.000000 182: 0.000000 183: 0.000000 184: 0.000000 185: 0.000000 186: 0.000000 187: 0.000000 188: 0.000000 189: -0.490000 190: -0.490000 191: 0.000000 192: -0.490000 193: -0.490000 194: 0.000000 195: -0.490000 196: 0.000000 197: 0.000000 198: 0.000000 199: 0.000000 200: 0.000000 201: 0.000000 202: 0.000000 203: 0.000000 204: 0.000000 205: 0.000000 206: 0.000000 207: -0.490000 208: -0.490000 209: -0.490000 210: -0.490000 211: -0.490000 212: 0.000000 213: 0.000000 214: -0.490000 215: -0.490000 216: 0.000000 217: 0.000000 218: 0.000000 219: 0.000000 220: 0.000000 221: 0.000000 222: 0.000000 223: -0.490000 224: 0.000000 225: -0.490000 226: -0.490000 227: -0.490000 228: -0.490000 229: -0.490000 230: -0.490000 231: 0.000000 232: 0.000000 233: 0.000000 234: 0.000000 235: 0.000000 236: 0.000000 237: 0.000000 238: 0.000000 239: 0.000000 240: 0.000000 241: 0.000000 242: -0.490000 243: -0.490000 244: -0.490000 245: -0.490000 246: -0.490000 247: -0.490000 248: -0.490000 249: 0.000000 250: -0.490000 251: 0.000000 252: 0.000000 253: 0.000000 254: 0.000000 255: 0.000000 256: 0.000000 257: 0.000000 258: 0.000000 259: 0.000000 260: -0.490000 261: 0.000000 262: -0.490000 263: -0.490000 264: -0.490000 265: 0.000000 266: -0.490000 267: -0.490000 268: 0.000000 269: 0.000000 270: 0.000000 271: 0.000000 272: 0.000000 273: 0.000000 274: 0.000000 275: 0.000000 276: 0.000000 277: 0.000000 278: 0.000000 279: 0.000000 280: -0.490000 281: -0.490000 282: -0.490000 283: -0.490000 284: -0.490000 285: -0.490000 286: -0.490000 287: -0.490000 288: -0.490000 289: -0.490000 290: 0.000000 291: 0.000000 292: 0.000000 293: 0.000000 294: 0.000000 295: 0.000000 296: 0.000000 297: 0.000000 298: 0.000000 299: 0.000000 300: 0.000000 301: 0.000000 302: 0.000000 303: 0.000000 304: 0.000000 305: -0.490000 306: -0.490000 307: -0.490000 308: -0.490000 309: 0.000000 310: 0.000000 311: 0.000000 312: 0.000000 313: 0.000000 314: 0.000000 315: 0.000000 316: 0.000000 317: 0.000000 318: 0.000000 319: 0.000000 320: 0.000000 321: 0.000000 322: 42.029999 323: 38.610001 324: 38.119999 325: 38.119999 326: 38.610001 327: 38.610001 328: 38.610001 329: 39.099998 330: 39.099998 331: 39.099998 332: 39.580002 333: 39.099998 334: 39.580002 335: 39.580002 336: 39.580002 337: 40.070000 338: 40.070000 339: 40.560001 340: 41.049999 341: 41.049999 342: 41.049999 343: 41.540001 344: 42.029999 345: 43.009998 346: 43.009998 347: 43.980000 348: 43.980000 349: 44.470001 350: 44.470001 351: 44.959999 352: 45.450001 353: 45.450001 354: 45.939999 355: 45.939999 356: 45.939999 357: 45.939999 358: 46.430000 359: 46.430000 360: 45.939999 361: 45.939999 362: 45.939999 363: 46.430000 364: 46.430000 365: 46.430000 366: 46.430000 367: 46.430000 368: 46.430000 369: 46.430000 370: 46.430000 371: 45.939999 372: 46.430000 373: 46.430000 374: 46.430000 375: 46.430000 376: 46.430000 377: 45.939999 378: 46.430000 379: 46.430000 380: 46.430000 381: 46.430000 382: 46.430000 383: 46.430000 384: 46.430000 385: 46.430000 386: 45.939999 387: 45.939999 388: 45.939999 389: 45.939999 390: 45.939999 391: 45.939999 392: 45.450001 393: 45.939999 394: 45.939999 395: 45.939999 396: 46.919998 397: 46.919998 398: 47.400002 399: 47.889999 400: 48.869999 Durchschnitt: 18.972124
Hallo Roman, speichere die Resultate von analogRead(A4) und analogRead(A5) mal zwischen und gib genau diese Werte, separat, auf der seriellen Schnittstelle aus. Dann sehen wir ob es an A4, A5 oder der Berechnung liegt. LG, Sebastian
Hallo Sorry das ich die letzten 2 Tage nicht online war. Nein ich habs nicht gelöst. Ich habe momentan dei Platine mit dem Arduino verbunden, jedoch funktioniert auch die Serialverbindung nicht! Arduino Code:
1 | #include <SoftwareSerial.h> |
2 | |
3 | SoftwareSerial mySerial(10, 11); // RX, TX |
4 | |
5 | void setup() |
6 | { |
7 | // Open serial communications and wait for port to open: |
8 | Serial.begin(9600); |
9 | while (!Serial) { |
10 | ; // wait for serial port to connect. Needed for Leonardo only |
11 | } |
12 | mySerial.begin(4800); |
13 | } |
14 | |
15 | void loop() // run over and over |
16 | { |
17 | if (mySerial.available()) |
18 | Serial.write(mySerial.read()); |
19 | } |
Atmega Code:
1 | #include <EEPROM.h> |
2 | float temp; |
3 | void setup(){ |
4 | pinMode(13,OUTPUT); |
5 | pinMode(8,OUTPUT); |
6 | digitalWrite(8,0); |
7 | Serial.begin(9600); |
8 | } |
9 | int addr=0; |
10 | void loop(){ |
11 | if(digitalRead(8)==0){ |
12 | digitalWrite(13,1); |
13 | int a4,a5; |
14 | a4=analogRead(A4); |
15 | a5=analogRead(A5); |
16 | Serial.print("A4: "); |
17 | Serial.print(a4); |
18 | Serial.print(" - A5:"); |
19 | Serial.println(a5); |
20 | temp=(5 * (a5 - a4) * 100) / 1023; |
21 | temp+=55.0; |
22 | int t=temp*100.0; |
23 | int h=t%100; |
24 | t=t-h; |
25 | t=t/100; |
26 | EEPROM.write(addr,t); |
27 | EEPROM.write(addr+1,h); |
28 | addr+=2; |
29 | if(addr>1023)addr=0; |
30 | digitalWrite(13,0); |
31 | delay(1000); |
32 | } |
33 | } |
Schaltung: Atmega Pin 2--> Arduino Pin 11 Atmega Pin 3--> Arduino Pin 10 Vcc und GND sind verbunden! Hat noch jemand einen Tipp für mich?
Ich habe noch einen Fehler im Code wegen der Baudrate. Ist jetzt behoben, trotzdem keine Verbindung.
Hallo Roman, läuft der Atmega überhaupt? Blink doch mal eine LED. Hast du einen Logikanalyser den du mal an Atmega Pin 3 und GND hängen könntest? LG, Sebastian
Der Atmega läuft da ich ja Temperaturen über 0 grad recht genau messen kann. Ich habe leiderkeinen Logikanalyser (genauer gesagt: ich weiß nicht einmal was das ist:( )
Und wofür ist diese Gechichte mit if(digitalRead(8)==0) gut? Wenn das nicht der Fall ist wird nie gemessen oder serielle Ausgabe erzeugt ... LG, Sebastian
Das dient dazu, das nicht neuer Werte ins eeprom bei der Auswertung geschrieben werden und die ursprünglichen Messwerte verfälscht. Es dient der Überprüfung, pb eine Drahtbrücke eingesteckt ist.
Das weiß. ich nicht, allerdings hat es bis jetzt so immer funktioniert. Ich kannn nur keine Temperaturen unter 0 grad auswerten!
Habs mir jetzt angeschaut. Du hast recht. Das wäre sinnvoll, jedoch löst es nicht. das Problem. mit der negativen Spannung.
Hallo Roman, Roman B. schrieb: > Der Atmega läuft da ich ja Temperaturen über 0 grad recht genau messen > kann. Du bekommst doch aber keine Daten über die serielle Leitung mehr. Welche Hinweise hast du denn stattdessen das der Atmega immer noch läuft? Roman B. schrieb: > Es dient> der Überprüfung, pb eine Drahtbrücke eingesteckt ist. Drahtbrücke nach VCC? Dann produzierst du aber einen Kurzschluss, oder? LG, Sebastian
Nein ich produziere keinen Kurzschluss. Ich weiß, dass der atmega. noch läuft, weil ich dieWerte aus dem eeprom auslesen kann(isp) und diese sich von messung zu messung ändern.
Aber ich werde morgen den Code änder und INPUT statt OUTPUT als pinmode nutzen. Danke für. den Hinweis.
Roman B. schrieb: > Ich weiß, dass der atmega. noch > läuft, weil ich dieWerte aus dem eeprom auslesen kann(isp) und diese > sich von messung zu messung ändern. Hallo Roman, wenn das Debuggen über die serielle Schnittstelle nicht funktionert: Schreib doch mal die Rohwerte a4 und a5 ins eeprom, und lies diese aus.
1 | EEPROM.write(addr++,a4>>8); |
2 | EEPROM.write(addr++,a4&0xFF); |
3 | EEPROM.write(addr++,a5>>8); |
4 | EEPROM.write(addr++,a5&0xFF); |
LG, Sebastian
:
Bearbeitet durch User
Hallo habe das Programm jetzt geändert. ABer wie kann ich jetzt wieder auch die Werte rückschließen? Ich kenne mich mit Bitmanipulationen nicht aus. Oder soll ich einfach das Hexfile posten?
? Wie hast du denn die anderen Werte aus dem EEPROM ausgelesen? Das ist doch jetzt auch nichts anderes. An 2 hintereinanderfolgenden Bytes im EEPROM steht jeweils 1 Byte einer 16 Bit Zahl. Mehr ist das doch nicht. Genau gleich wie vorher auch. Nur dass jetzt andere Zahlen im EEPROM stehen.
Ja, das stimmt. Im Anhang ist das Hexfile, welches ich mittels avrdude erzeugt habe.
Kann mir jetzt jemand sagen, was ich falsch gemacht habe oder woran es liegt, dass ich keine negativen Werte lesen kann? Ich weiß nämlich nicht mehr weiter!
Hallo Roman, momang, momang, erst müssen wir das hex-File dekodieren. In der Zwischenzeit poste uns bitte den exakten Sourcecode mit dem genau dieses hex-File im Eeprom generiert wurde. LG, Sebastian
Hier bitte:
1 | #include <EEPROM.h> |
2 | float temp; |
3 | void setup(){ |
4 | pinMode(13,OUTPUT); |
5 | pinMode(8,OUTPUT); |
6 | digitalWrite(8,0); |
7 | } |
8 | int addr=0; |
9 | void loop(){ |
10 | if(digitalRead(8)==0){ |
11 | digitalWrite(13,1); |
12 | int a4,a5; |
13 | a4=analogRead(A4); |
14 | a5=analogRead(A5); |
15 | /* |
16 | temp=(5 * (a5 - a4) * 100) / 1023; |
17 | temp+=55.0; |
18 | int t=temp*100.0; |
19 | int h=t%100; |
20 | t=t-h; |
21 | t=t/100; |
22 | EEPROM.write(addr,t); |
23 | EEPROM.write(addr+1,h); |
24 | addr+=2; |
25 | */ |
26 | EEPROM.write(addr++,a4>>8); |
27 | EEPROM.write(addr++,a4&0xFF); |
28 | EEPROM.write(addr++,a5>>8); |
29 | EEPROM.write(addr++,a5&0xFF); |
30 | if(addr>1023)addr=0; |
31 | digitalWrite(13,0); |
32 | delay(1000); |
33 | } |
34 | } |
1 | import struct |
2 | |
3 | f = open('eep.hex','rb') |
4 | while f: |
5 | d = f.read(4) |
6 | u = struct.unpack('>2H',d) |
7 | print u |
ergibt
1 | (161, 161) |
2 | (150, 151) |
3 | (150, 151) |
4 | (150, 151) |
5 | (151, 151) |
6 | (151, 151) |
7 | (151, 151) |
8 | (151, 151) |
9 | (151, 151) |
10 | (151, 152) |
11 | (151, 151) |
12 | (151, 152) |
13 | (151, 152) |
14 | (151, 152) |
15 | (151, 152) |
16 | (151, 152) |
17 | (151, 152) |
18 | (152, 152) |
19 | (152, 152) |
20 | (152, 152) |
21 | (152, 152) |
22 | (152, 152) |
23 | (151, 152) |
24 | (152, 152) |
25 | (152, 152) |
26 | (152, 152) |
27 | (152, 152) |
28 | (152, 152) |
29 | (152, 152) |
30 | (152, 153) |
31 | (152, 153) |
32 | (152, 153) |
33 | (152, 153) |
34 | (152, 153) |
35 | (152, 153) |
36 | (152, 153) |
37 | (152, 153) |
38 | (152, 153) |
39 | (152, 153) |
40 | (152, 153) |
41 | (152, 153) |
42 | (153, 153) |
43 | (153, 153) |
44 | (153, 153) |
45 | (153, 153) |
46 | (153, 153) |
47 | (153, 153) |
48 | (153, 153) |
49 | (153, 154) |
50 | (153, 154) |
51 | (153, 154) |
52 | (153, 154) |
53 | (153, 154) |
54 | (153, 154) |
55 | (153, 154) |
56 | (153, 154) |
57 | (153, 154) |
58 | (153, 154) |
59 | (154, 154) |
60 | (154, 154) |
61 | (153, 154) |
62 | (154, 154) |
63 | (154, 154) |
64 | (154, 154) |
65 | (154, 154) |
66 | (154, 154) |
67 | (154, 154) |
68 | (154, 154) |
69 | (154, 155) |
70 | (154, 154) |
71 | (154, 155) |
72 | (154, 155) |
73 | (154, 155) |
74 | (154, 155) |
75 | (154, 155) |
76 | (154, 155) |
77 | (155, 155) |
78 | (154, 155) |
79 | (155, 155) |
80 | (155, 155) |
81 | (155, 155) |
82 | (154, 155) |
83 | (155, 155) |
84 | (154, 155) |
85 | (155, 155) |
86 | (155, 155) |
87 | (155, 155) |
88 | (155, 155) |
89 | (155, 155) |
90 | (155, 155) |
91 | (155, 155) |
92 | (155, 156) |
93 | (155, 156) |
94 | (155, 156) |
95 | (155, 156) |
96 | (155, 156) |
97 | (155, 156) |
98 | (156, 156) |
99 | (155, 156) |
100 | (156, 156) |
101 | (156, 156) |
102 | (156, 156) |
103 | (156, 156) |
104 | (156, 156) |
105 | (156, 156) |
106 | (156, 156) |
107 | (156, 156) |
108 | (156, 156) |
109 | (156, 156) |
110 | (156, 156) |
111 | (156, 156) |
112 | (156, 157) |
113 | (156, 156) |
114 | (156, 157) |
115 | (156, 156) |
116 | (156, 157) |
117 | (156, 157) |
118 | (156, 157) |
119 | (156, 157) |
120 | (156, 157) |
121 | (156, 157) |
122 | (156, 157) |
123 | (156, 157) |
124 | (156, 157) |
125 | (157, 157) |
126 | (157, 157) |
127 | (157, 157) |
128 | (157, 157) |
129 | (157, 157) |
130 | (157, 157) |
131 | (157, 157) |
132 | (157, 157) |
133 | (157, 157) |
134 | (157, 158) |
135 | (157, 157) |
136 | (157, 157) |
137 | (157, 157) |
138 | (157, 157) |
139 | (157, 158) |
140 | (157, 158) |
141 | (157, 158) |
142 | (157, 158) |
143 | (157, 158) |
144 | (157, 158) |
145 | (158, 158) |
146 | (157, 158) |
147 | (157, 158) |
148 | (158, 158) |
149 | (158, 158) |
150 | (158, 158) |
151 | (158, 158) |
152 | (158, 158) |
153 | (158, 158) |
154 | (158, 158) |
155 | (158, 158) |
156 | (158, 158) |
157 | (158, 158) |
158 | (158, 158) |
159 | (158, 158) |
160 | (158, 158) |
161 | (158, 158) |
162 | (158, 158) |
163 | (158, 158) |
164 | (158, 159) |
165 | (158, 158) |
166 | (158, 159) |
167 | (158, 159) |
168 | (158, 159) |
169 | (158, 159) |
170 | (166, 166) |
171 | (145, 146) |
172 | (145, 146) |
173 | (145, 146) |
174 | (145, 146) |
175 | (145, 146) |
176 | (145, 146) |
177 | (145, 146) |
178 | (146, 146) |
179 | (146, 146) |
180 | (146, 146) |
181 | (145, 146) |
182 | (145, 146) |
183 | (146, 146) |
184 | (146, 146) |
185 | (146, 146) |
186 | (146, 147) |
187 | (146, 147) |
188 | (146, 147) |
189 | (146, 147) |
190 | (146, 147) |
191 | (146, 147) |
192 | (146, 147) |
193 | (146, 147) |
194 | (147, 147) |
195 | (146, 147) |
196 | (147, 147) |
197 | (147, 147) |
198 | (147, 147) |
199 | (147, 148) |
200 | (147, 148) |
201 | (147, 147) |
202 | (147, 148) |
203 | (147, 148) |
204 | (147, 148) |
205 | (147, 148) |
206 | (147, 148) |
207 | (147, 148) |
208 | (148, 148) |
209 | (148, 148) |
210 | (148, 148) |
211 | (147, 148) |
212 | (148, 148) |
213 | (148, 148) |
214 | (148, 148) |
215 | (148, 148) |
216 | (148, 148) |
217 | (148, 148) |
218 | (148, 149) |
219 | (148, 149) |
220 | (148, 149) |
221 | (148, 149) |
222 | (148, 149) |
223 | (148, 149) |
224 | (148, 149) |
225 | (148, 149) |
226 | (149, 149) |
227 | (149, 149) |
228 | (149, 149) |
229 | (148, 149) |
230 | (149, 149) |
231 | (149, 149) |
232 | (149, 149) |
233 | (149, 150) |
234 | (149, 150) |
235 | (149, 149) |
236 | (149, 150) |
237 | (149, 150) |
238 | (149, 150) |
239 | (149, 150) |
240 | (149, 150) |
241 | (149, 150) |
242 | (150, 150) |
243 | (150, 150) |
244 | (150, 150) |
245 | (150, 150) |
246 | (150, 150) |
247 | (150, 150) |
248 | (150, 150) |
249 | (150, 150) |
250 | (150, 151) |
251 | (150, 151) |
252 | (150, 150) |
253 | (150, 151) |
254 | (150, 151) |
255 | (150, 151) |
256 | (150, 151) |
Das sieht seltsam aus. a4 und a5 sind fast gleich, und driften leicht. Warum? LG, Sebastian
:
Bearbeitet durch User
Roman, an welchen IC-Pins des Atmega328P sind A4 und A5 angeschlossen? LG, Sebastian
Die beiden 1N4148 müssen die Spannung an A4 auf etwa 1.2V bringen. Kannst du das nachmessen? Bei 1.2V müsste analogRead(A4) so ungefähr 245 zurückliefern. Irgendetwas ist grundsätzlich falsch. LG, Sebastian
A4->pin 27 A5-> pin28 siehe: http://www.instructables.com/files/deriv/F1P/WPB9/H337KORO/F1PWPB9H337KORO.MEDIUM.jpg
Liegt der Sensor eventuell in Eiswasser, und benutzt du zur Zeit nur eine Diode? Die Werte könnten dann sogar stimmen ... ;) LG, Sebastian
:
Bearbeitet durch User
Den Sensor gebe ich ins Gefrierfach und ja ich benutze nur eine Diode. Ich hab gelesen,dass eine reicht, stimmt das nicht?
Nein, nein, eine reicht. Dann ergibt sich an A4 eine Spannung von ca. 0.7V. Dies entspricht einem analogRead(A4)-Wert von 0.7/5.0*1023 = 143. Das stimmt ja fast mit den ersten Paar Werten im Eeprom überein. Ich schätze du hast so ca. 7 Minuten gemessen und dann das Eeprom ausgelesen? Der erste noch nicht überschriebene Wert könnte also (145, 146) sein, das entspricht (0.709V, 0.714V). Der letzte saubere Wert wäre dann (158, 159) entsprechend (0.772V, 0.777V). Jetzt frage ich mich a) warum steigt die Spannung an A4 in den vier Minuten der aufgezeichneten Messung um 60mV an? Und natürlich b) Warum ist A5 um 5mV höher als A4 wenn der Sensor im Gefrierfach liegt und also ja bei -18° um 180mV niedriger als A4 liegen sollte? LG, Sebastian
:
Bearbeitet durch User
Hallo Roman, hast du ein Voltmeter? Kannst du mal händisch die Spannungen an A4 und A5 messen? Bei verschiedenen Temperaturen (Gefrierfach, 0°C Eiswasser, Raumtemperatur)? Und kannst du diesen 18k-Widerstand mal durchmessen? LG, Sebastian
A5 Raumtemperatur 0.7V A4 Raumtemperatur 0.48V A5 Gefrierfach nach 5min 520mV A4 Gefrierfach nach 5min 530mV Ich hoffe, dass du mit diesen Daten weiterhelfen kannst.
Das mit dem Widerstand stimmt nicht! Das Anzeige schwankt gewaltig: 17Ohm, 5k, 19k,12k,7k
Hallo Roman, Roman B. schrieb: > A5 Raumtemperatur 0.7V > A4 Raumtemperatur 0.48V > > A5 Gefrierfach nach 5min 520mV > A4 Gefrierfach nach 5min 530mV Wenn ich das Datenblatt des LM35 und deine Schaltung richtig verstehe, sollte A4 konstant bei ca. 0.7V liegen, und A5 sollte bei A4+10mV/°C liegen. Bei Raumtemperatur liegt A5 tatsächlich 22°C*10mV = 0.22V über A4. A4 liegt aber bei nur 0.48V. Hier ist also schon was falsch. Beim Gefrierfach liegt dann A4 bei 0.53V, und A5 bei 0.52V, also nur 10mV <=> -1°C unter A4. Das ist tatsächlich recht warm für ein Gefrierfach. Hast du noch ein normales Thermometer zur Messung der effektiven Temperatur des Sensors im Gefrierfach? Roman B. schrieb: > Widerstand: 17.27 Ohm laut Messgerät Roman B. schrieb: > 17Ohm, 5k, 19k,12k,7k Ich würde an deiner Stelle 1. den 18k-Widerstand noch einmal ausserhalb der Schaltung ausmessen, und 2. die Messungen noch einmal wiederholen, aber diesmal ohne den Atmega, also nur mit der Messung der Spannungen an A4 und A5 bei verschiedenen Temperaturen. Wenn die dann eher so wie erwartet sind liegt es an dem Atmega, wenn die immer noch so seltsam sind liegt es am LM35 oder dem Schaltungsaufbau. LG, Sebastian
Bevor ich meine Schaltung wieder zerlege und den Widerstand. nachmesse habe ich noch eine Verständnisfrage: Durch die Diode wird die Spannung um 0.7 V angehoben, oder? Kann ich dann nicht einfach den Wert von A5 einlesen, als int speichern und dann (1023/5000)*700 abziehen? Kann man das Ganze so vereinfachen?
Wenn du die Spannung an A4 kennst und sie konstant ist, dann kannst du das im Prinzip machen. Leider ist dir die genaue Vorwärtsspannung deiner 1n4148 a) nicht bekannt (Serienstreuung), und b) ist sie nicht konstant sondern hängt vom Stromfluß und der Temperatur ab. Datenblätter sind in https://en.wikipedia.org/wiki/1N4148 verlinkt. Bedenke, dass du pro Fehler von 0.01V einen Fehler von 1°C hast! LG, Sebastian
Danke für die Aufklärung! Dann werd ich meine Platine doch zerlegen. Ich führe dann die Messungen durch und poste die Ergebnisse.
Aber wenn die Vorwärtsspannung der Diode von der Temperatur abhängt, kann man dann nicht gleich daraus.einen Temperatursensor bauen? Wäre doch einfacher.
Das ist keine so gute Idee. Die Abhängigkeit ist nicht linear und auch nicht definiert. Wenn es einfach sein soll würde ich immer einen DS18B20 nehmen ... LG, Sebastian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.