Forum: Mikrocontroller und Digitale Elektronik ATMega 328p lm35


von R. B. (dxx255)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

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
von freezy (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Wie kann ich negative Temperaturen messen?

Datenblatt lesen.

MfG Spess

von R. B. (dxx255)


Lesenswert?

Habs gelesen. Aber wie werte ich das dann aus? Der atmega kann doch 
keine negative Spannung messen, oder?

von Sebastian W. (wangnick)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

Wenn mein Code fehlerfrei ist, wieso bekomme ich dann immer noch Werte 
um die 16°C, wenn ich die Platine ins Gefrierfach lege?

von R. B. (dxx255)


Lesenswert?

Die Werte bei Raumtemperatur sind dagegen ziemlich genau!
Nur bei den niedrigen Temperaturen gibts Probleme!

von R. B. (dxx255)


Lesenswert?

Ist meine Formel vielleicht falsch? Um wieviel wird die Spannung 
geringer?

von R. B. (dxx255)


Lesenswert?

Da ich das ganze verwenden möchte um die Temperatur unter Tags 
aufzuzeichnen ist das mit den 125° relativ egal.

von R. B. (dxx255)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?


von R. B. (dxx255)


Lesenswert?

Oh! hab das ganze kontrolliert: Ich habe 1N4148 Dioden verbaut. Liegt es 
vielleicht daran?

von Sebastian W. (wangnick)


Lesenswert?

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
von R. B. (dxx255)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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
von holger (Gast)


Lesenswert?

>> Serielle Schnittstelle hab ich nicht zur Verfügung:(
>
>Warum nicht?

Genau, warum nicht? Ohne die kann man sich eigentlich gleich
die Kugel geben;)

von R. B. (dxx255)


Lesenswert?

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!

von R. B. (dxx255)


Lesenswert?

analogRead liefert einen Wert zwischen 0 und 1023.

von Uwe (Gast)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

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
von R. B. (dxx255)


Lesenswert?

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?

von R. B. (dxx255)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

Hallo Roman,

hast du das Problem lösen können?

LG, Sebastian

von R. B. (dxx255)


Lesenswert?

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?

von R. B. (dxx255)


Lesenswert?

Ich habe noch einen Fehler im Code wegen der Baudrate. Ist jetzt 
behoben, trotzdem keine Verbindung.

von R. B. (dxx255)


Lesenswert?

??

von R. B. (dxx255)


Lesenswert?

??

von R. B. (dxx255)


Lesenswert?

Hat denn keiner eine Idee?

von Roman B. (Gast)


Lesenswert?

??

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

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:( )

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

so jetzt hab ichs gegoogelt und weiß. jetzt was das ist, aber ich hab 
keinen.

von Roman B. (Gast)


Lesenswert?

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.

von Sebastian W. (wangnick)


Lesenswert?

Aber müsste der pinMode dann nicht INPUT oder INPUT_PULLUP sein?

von Roman B. (Gast)


Lesenswert?

Das weiß. ich nicht, allerdings hat es bis jetzt so immer funktioniert. 
Ich kannn nur keine Temperaturen unter 0 grad auswerten!

von Roman B. (Gast)


Lesenswert?

Habs mir jetzt angeschaut. Du hast recht. Das wäre sinnvoll, jedoch löst 
es nicht. das Problem. mit der negativen Spannung.

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

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.

von Roman B. (Gast)


Lesenswert?

Aber ich werde morgen den Code änder und INPUT statt OUTPUT als pinmode 
nutzen. Danke für. den Hinweis.

von Sebastian W. (wangnick)


Lesenswert?

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
von Roman B. (Gast)


Lesenswert?

Das ist eine sehr gute Idee. Danke. Probiere ich morgen gleich aus.
Gute Nacht

von R. B. (dxx255)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

?

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.

von R. B. (dxx255)


Angehängte Dateien:

Lesenswert?

Ja, das stimmt.
Im Anhang ist das Hexfile, welches ich mittels avrdude erzeugt habe.

von R. B. (dxx255)


Lesenswert?

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!

von Sebastian W. (wangnick)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

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
}

von Sebastian W. (wangnick)


Lesenswert?

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
von Sebastian W. (wangnick)


Lesenswert?

Roman, an welchen IC-Pins des Atmega328P sind A4 und A5 angeschlossen?

LG, Sebastian

von Sebastian W. (wangnick)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?


von Sebastian W. (wangnick)


Lesenswert?

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
von R. B. (dxx255)


Lesenswert?

Den Sensor gebe ich ins Gefrierfach und ja ich benutze nur eine Diode.
Ich hab gelesen,dass eine reicht, stimmt das nicht?

von Sebastian W. (wangnick)


Lesenswert?

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
von Roman B. (Gast)


Lesenswert?

Ja ich habe 7min gemessen..

von Sebastian W. (wangnick)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

Mach ich! Aber erst morgen. Gute Nacht und Danke für die Unterstützung!

von Roman B. (Gast)


Lesenswert?

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.

von Roman B. (Gast)


Lesenswert?

Widerstand: 17.27 Ohm laut Messgerät

von Roman B. (Gast)


Lesenswert?

Das mit dem Widerstand stimmt nicht! Das Anzeige schwankt gewaltig: 
17Ohm, 5k, 19k,12k,7k

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

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?

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

Danke für die Aufklärung! Dann werd ich meine Platine doch zerlegen. Ich 
führe dann die Messungen durch und poste die Ergebnisse.

von Roman B. (Gast)


Lesenswert?

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.

von Sebastian W. (wangnick)


Lesenswert?

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

von Roman B. (Gast)


Lesenswert?

ich habe beschlossen es dabei zu belassen. Danke für eure Hilfe!

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
Noch kein Account? Hier anmelden.