Daten : Speichereffizent speichern und auswerten : Temperatur

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Daten : Speichereffizent speichern und auswerten : Temperatur

      Hallo,

      ich habe mir ein Thermometer auf Basis eines NTC gebastelt.
      pollin.de/p/ntc-widerstand-10-kohm-1-220757

      Jetzt habe ich die 1024stel je °C berechnet.
      Nur das ganze schaut nicht so aus als das ich es einfach berechnen könnte.
      In den Daten steckt einfach kene einfach zu berechnenter "Sinn" für mich.

      Wie kann ich diese Daten jetzt möglichst Speichereffizent (AtMega48) ablegen und abfragen?

      Grüße & Danke
      Alex
      Files
    • Du kannst den NTC in Reihe schalten mit einem konstanten Widerstand. Den Spannungsteiler zwischen 5V und Gnd. Dann ergibt sich rechnerisch eine Spannung. Die misst Du mit dem ADC. Im Programm benutzt Du entweder eine Tabelle mit Array oder Data oder Du benutzt eine Formel T=f(U) oder Du nimmst in dem Dich interessierenden Temperaturbfreich sogar eine Linearität der Formel an T=a+b*U. Die Werte a und b ermittelst Du aus einer Exceltabelle auf Basis der Tabelle aus dem Datenblatt und einer für den Spannungsteiler eingefügten Spalte. Du hast die Spalten T, R und U.
      Kennst Du die sehr guten Ausführungen auf
      sprut.de/electronic/temeratur/temp.htm#ntc
      ?

      Wie ist Dein Temperaturbereich und wie genau brauchst Du die Temperatur? Warum möchtest Du Speicher sparen?
    • Hallo Alex,
      der NTC ist für eine genaue Temperaturmessung nicht ideal.
      Besser wäre ein PT100 (oder ähnliches). Diese haben einen sehr linearen Verlauf und können somit einfach berechnet werden.
      Den Aufwand, hier vernünftige werte zu bekommen, halte ich für unangemessen.
      Du könntest e.v. die Werte mit DATA: am Ende deines Programmes ablegen und nach jedem Messzyklus durchsuchen. Und den Nächstliegenden, als Ergebnis verwenden.
      Doch wie erwähnt, immer noch ungenau und aufwändig.

      Schau dir doch mal DS1820 hier im Forum an.

      Liebe Grüße
      Siggi
    • Bei 5V? Da Wären 10k Vorwiderstand besser:Zwischenablage.gif
      Wie genau muß es sein? Für den Außentemperaturbereich sind sie gut geeignet. Auch die Fertigung ist soweit präzise das sie nach Austausch in den seltensten Fällen nachkalibriert werden müssen. Auch ihre Lebenserwartung ist >10 Jahre.
      Sorry ich hab mir dem Polin Typ erst später angesehen. Dieser muß noch Wetterfest gemacht werden um lange zu leben. Auch für den Innenraum min. Lack sonst wandert Feuchtigkeit seine Beine hoch und es wird Essig mit Genauigkeit.

      The post was edited 1 time, last by Pluto25 ().

    • New

      stefanhamburg wrote:

      Du kannst den NTC in Reihe schalten mit einem konstanten Widerstand. Den Spannungsteiler zwischen 5V und Gnd. Dann ergibt sich rechnerisch eine Spannung. Die misst Du mit dem ADC. Im Programm benutzt Du entweder eine Tabelle mit Array oder Data oder Du benutzt eine Formel T=f(U) oder Du nimmst in dem Dich interessierenden Temperaturbfreich sogar eine Linearität der Formel an T=a+b*U. Die Werte a und b ermittelst Du aus einer Exceltabelle auf Basis der Tabelle aus dem Datenblatt und einer für den Spannungsteiler eingefügten Spalte. Du hast die Spalten T, R und U.
      Kennst Du die sehr guten Ausführungen auf
      sprut.de/electronic/temeratur/temp.htm#ntc
      ?

      Wie ist Dein Temperaturbereich und wie genau brauchst Du die Temperatur? Warum möchtest Du Speicher sparen?
      Ja, ich habe 1k an VCC und danach den NTC - ist also invertiert. Je höher die Temperatur desto niedriger der Wert. 1k weil ich den Fühler in Wasser (Gartenteich) einsetzen will. Hab Ihn zu dem zweck in ein Aluröhrchen mit Wärmeleitkleber eingegeossen und darauf geachtet das der NTC unmittelbaren kontakt zum Rohr hat. Vorsichtig in den Schraubstock und ann ganz vorsichtig gepresst bis kaum mehr abstand zwischen NTC und Rohr war. Dabei hab ich ausreichend astand gelassen zu der Seite bei der ich das Rohr verpressen wollte. Hat ganz gut geklappt.

      Ich brauche die Temperatur zwischen -30 und +40 Grad = Gartenteich.

      Wenig speicher da noch ein bisschen auswertung mit rein muss - Steuerung einer umwälzpumpe usw.
      Den Artikel muss ich erst noch lesen - vielen dank!

      Grüße
      Alex
    • New

      Adelinde wrote:

      Hallo Alex,
      der NTC ist für eine genaue Temperaturmessung nicht ideal.
      Besser wäre ein PT100 (oder ähnliches). Diese haben einen sehr linearen Verlauf und können somit einfach berechnet werden.
      Danke!
      Den PT100 hab ich bereits bestellt. Dauert dann um die 4 bis 8 Wochen.
      Vorher muss ich mit den NTC vorlieb nehmen. Hab die NTCs auserdem schon aufwenig verpackt und verkabelt.

      Grüße
      Alex
    • New

      Hallo Alex,
      jetzt muss ich dich leider nochmals enttäuschen.
      Ohne hochohmigen Verstärker (OP) wirst du keine vernünftigen werte bekommen.
      Der PT100 ist zwar sehr linear und lässt sich sehr einfach auslesen und berechnen, du musst jedoch die Rahmenbedingungen einhalten.
      Der PT100 hat bei 0 °C 100 Ohm, bei 30 °C ca. 110Ohm. Maximaler Strom zum Messen sollte 1mA nicht überschreiten. (sonst erwärmt sich der PT100 und verändert seinen Wert)
      U=R·I 110V 1mA ca. 0,11V selbst bei einer REF von 2,5V zu wenig.
      Schaltungen hierzu findest du in der Cloud. (kl. OP+ 4 Widerstände)

      Wen du den Aufbau vermeiden möchtest, nimm den DS1820. 1Widerstand direkt an den Halbleiter. 2adriges Kabel dann und mit 2K oder UV Kleber isolieren. Wenn du sehr ängstlich bist, noch nen Schrumpfschlauch drüber.
      Hülse ist nicht nötig. Diesen Sensor hatte ich 10 Jahre im Wasser eines Terrariums. (2K Kleber ohne Schlauch ;)

      Gruß Siggi
    • New

      Hallo Alex,
      ich muss stefenhamburg recht geben.
      Wenn du einfach Linearität annimmst, kannst du den Wert, wie oben beschrieben, errechne. Der entstehende Fehler sollte zu vernachlässigen sein.
      Als Vorwiderstand 10kOhm bei 5V Vcc, dann ergeben sich Messwerte von ca.1,8V(40°) bis ca 4,8V (-30°)

      Gruß Siggi
    • New

      Kann mir bitte jemand eine Legende zu den Konstanten geben?
      b finde ich ja im Datenblatt U ist Spannung (also vermudlich die Messspannung von 5V); und T müsste Temperatur sein, oder? Woher bekomme ich ja bzw. was ist a?

      Ich hab akutell nur eingeschrankt zu verwendente Thermometer. Mein Thermo mit Messfühler ist leider nicht Wasserfest. Was eine überprüfung der Werte im minusbereich erschwert. Es bildet sich immer Kondenswasser. Hab keine Ahnung woher ich den "Schrott" habe.

      Kann ich das ganze Anhand des Datenblattes auch so berechnen?
      Invertiert; 1000 Ohm an VCC
      (1024* (miltipliziert) Ohmischer Wert bei Temperatur x) / (geteilt durch) (1000Ohm + Ohmischer Wert bei Temperatur x)

      Meine Tabelle scheint zu funktionieren obwohl sie mir zuviel Speicher braucht. Zumindest in dem Teil den ich überprüfen kann.

      Source Code

      1. Select Case Var_temp
      2. Case 1016 : Var_temperatur = 31
      3. Var_minus = 1
      4. Case 1015 : Var_temperatur = 29
      5. Var_minus = 1
      6. Case 1014 : Var_temperatur = 27
      7. Var_minus = 1
      8. Case 1013 : Var_temperatur = 25
      9. Var_minus = 1
      10. Case 1012 : Var_temperatur = 23
      11. Var_minus = 1
      12. Case 1011 : Var_temperatur = 22
      13. Var_minus = 1
      14. Case 1010 : Var_temperatur = 20
      15. Var_minus = 1
      16. Case 1009 : Var_temperatur = 19
      17. Var_minus = 1
      18. Case 1008 : Var_temperatur = 18
      19. Var_minus = 1
      20. Case 1007 : Var_temperatur = 17
      21. Var_minus = 1
      22. Case 1006 : Var_temperatur = 15
      23. Var_minus = 1
      24. Case 1005 : Var_temperatur = 14
      25. Var_minus = 1
      26. Case 1004 : Var_temperatur = 13
      27. Var_minus = 1
      28. Case 1003 : Var_temperatur = 12
      29. Var_minus = 1
      30. Case 1002 : Var_temperatur = 11
      31. Var_minus = 1
      32. Case 1001 : Var_temperatur = 10
      33. Var_minus = 1
      34. Case 1000 : Var_temperatur = 9
      35. Var_minus = 1
      36. Case 999 : Var_temperatur = 8
      37. Var_minus = 1
      38. Case 997 : Var_temperatur = 7
      39. Var_minus = 1
      40. Case 996 : Var_temperatur = 6
      41. Var_minus = 1
      42. Case 995 : Var_temperatur = 5
      43. Var_minus = 1
      44. Case 994 : Var_temperatur = 4
      45. Var_minus = 1
      46. Case 992 : Var_temperatur = 3
      47. Var_minus = 1
      48. Case 991 : Var_temperatur = 2
      49. Var_minus = 1
      50. Case 990 : Var_temperatur = 1
      51. Var_minus = 1
      52. Case 988 : Var_temperatur = 0
      53. Var_minus = 0
      54. Case 987 : Var_temperatur = 1
      55. Var_minus = 0
      56. Case 985 : Var_temperatur = 2
      57. Var_minus = 0
      58. Case 983 : Var_temperatur = 3
      59. Var_minus = 0
      60. Case 982 : Var_temperatur = 4
      61. Var_minus = 0
      62. Case 980 : Var_temperatur = 5
      63. Var_minus = 0
      64. Case 978 : Var_temperatur = 6
      65. Var_minus = 0
      66. Case 976 : Var_temperatur = 7
      67. Var_minus = 0
      68. Case 974 : Var_temperatur = 8
      69. Var_minus = 0
      70. Case 972 : Var_temperatur = 9
      71. Var_minus = 0
      72. Case 970 : Var_temperatur = 10
      73. Var_minus = 0
      74. Case 968 : Var_temperatur = 11
      75. Var_minus = 0
      76. Case 966 : Var_temperatur = 12
      77. Var_minus = 0
      78. Case 964 : Var_temperatur = 13
      79. Var_minus = 0
      80. Case 961 : Var_temperatur = 14
      81. Var_minus = 0
      82. Case 959 : Var_temperatur = 15
      83. Var_minus = 0
      84. Case 956 : Var_temperatur = 16
      85. Var_minus = 0
      86. Case 954 : Var_temperatur = 17
      87. Var_minus = 0
      88. Case 951 : Var_temperatur = 18
      89. Var_minus = 0
      90. Case 949 : Var_temperatur = 19
      91. Var_minus = 0
      92. Case 946 : Var_temperatur = 20
      93. Var_minus = 0
      94. Case 943 : Var_temperatur = 21
      95. Var_minus = 0
      96. Case 940 : Var_temperatur = 22
      97. Var_minus = 0
      98. Case 937 : Var_temperatur = 23
      99. Var_minus = 0
      100. Case 934 : Var_temperatur = 24
      101. Var_minus = 0
      102. Case 931 : Var_temperatur = 25
      103. Var_minus = 0
      104. Case 928 : Var_temperatur = 26
      105. Var_minus = 0
      106. Case 924 : Var_temperatur = 27
      107. Var_minus = 0
      108. Case 921 : Var_temperatur = 28
      109. Var_minus = 0
      110. Case 918 : Var_temperatur = 29
      111. Var_minus = 0
      112. Case 914 : Var_temperatur = 30
      113. Var_minus = 0
      114. Case 910 : Var_temperatur = 31
      115. Var_minus = 0
      116. Case 907 : Var_temperatur = 32
      117. Var_minus = 0
      118. Case 903 : Var_temperatur = 33
      119. Var_minus = 0
      120. Case 899 : Var_temperatur = 34
      121. Var_minus = 0
      122. Case 895 : Var_temperatur = 35
      123. Var_minus = 0
      124. Case 891 : Var_temperatur = 36
      125. Var_minus = 0
      126. Case 887 : Var_temperatur = 37
      127. Var_minus = 0
      128. Case 883 : Var_temperatur = 38
      129. Var_minus = 0
      130. Case 878 : Var_temperatur = 39
      131. Var_minus = 0
      132. Case 874 : Var_temperatur = 40
      133. Var_minus = 0
      134. End Select
      Display All
      Eine Frage: Wenn ich Case else mit einfüge. Geht es immer in die Else abzweigung.
      Obwohl sich alle Werte inerhalb des Wertebereiches der "case" befinden geht es trotzdem ständig in die else abzweigung, wieso?

      Das ergibt keinerlei Sinn.

      Grüße
      Alex
    • New

      Adelinde wrote:

      Hallo Alex,
      jetzt muss ich dich leider nochmals enttäuschen.
      Ohne hochohmigen Verstärker (OP) wirst du keine vernünftigen werte bekommen.
      Der PT100 ist zwar sehr linear und lässt sich sehr einfach auslesen und berechnen, du musst jedoch die Rahmenbedingungen einhalten.
      Der PT100 hat bei 0 °C 100 Ohm, bei 30 °C ca. 110Ohm. Maximaler Strom zum Messen sollte 1mA nicht überschreiten. (sonst erwärmt sich der PT100 und verändert seinen Wert)
      U=R·I 110V 1mA ca. 0,11V selbst bei einer REF von 2,5V zu wenig.
      Schaltungen hierzu findest du in der Cloud. (kl. OP+ 4 Widerstände)
      Hab Ihn schon bestellt ohne mehr als den Artikel von sprut zu lessen.
      Werd Ihn wohl dann auch verwenen mit 1k Vorwiderstand.
      Kieg ich den bei einer Messspannung von 5V halbwegs vernunftige Werte raus?
      Die OP Schaltung hab ich glücklicherweise schon einige male aufgebaut.
      Da ich dann sowieso was neues löte spielt auch das keine Rolle.
      Nur die 100V machen mir sorgen. Soviel Spannung mag ich einfach nicht.

      Grüße
      Alex
    • New

      Alex_T wrote:

      ständig in die else abzweigung, wieso?
      Sollte er nicht. Der komplette Code könnte Aufschluß geben .

      Alex_T wrote:

      Nur die 100V machen mir sorgen
      Welche 100V? Isolationsspannung? Die sollte nicht überschritten darf aber sehr unterschritten werden.

      Alex_T wrote:

      mit 1k Vorwiderstand
      wird aber recht grob: Temperatur = ADC-512. (V-Ref=5V)

      Und besser nur für die Zeit des Messens über einen Pin mit Strom versorgen. Sonst würde die Selbsterwärmung Fehler verursachen.

      Sorry Falscher PT
      Temperatur =(ADC-93)*3 Also 3Grad schritte die auch noch unlinear sind = unbrauchbar.
      Bei 100 ohm Vorwiderstand würde oben genante stimmen.

      The post was edited 1 time, last by Pluto25 ().

    • New

      Alex_T wrote:

      Adelinde wrote:

      U=R·I 110V 1mA ca. 0,11V selbst bei einer REF von 2,5V zu wenig.
      Nur die 100V machen mir sorgen. Soviel Spannung mag ich einfach nicht.

      Ich vermute, du beziehst dich auf die Zeile im Zitat. :)
      110Ohm * 1mA ca 0,11V
      Sollte es heißen.
      Wen die Spannung über ein OP aufbereitet wird ist 1kOhm ein sehr guter Wert.

      Für die Frage nach der else Abzweigung, solltest Du wirklich den ganzen Code einstellen. Alles andere ist Glaskugellesen.
      Zum Atmel kennenlernen ist der Ansatz ok. Falls Du den Aufbau verwenden möchtest, muss ich Pluto25 recht geben.

      Auch wen ich mich jetzt Wiederhole: Genaue Messung mit wenig Aufwand (damit meine ich Software und Hardware)
      DS1820 1Wire in der Bucht 4st für 6€ inc. Versand, Reichelt 1,70€ und mit Kabel wasserdicht ca. 5€
      9 oder 12 bit Auflösung Genauigkeit 0,5° und kalibriert, Kabellängen von mehreren Metern möglich (test mit 10m ohne Probleme)
      Bei Bedarf hängst Du Mehrere Sensoren an die gleiche Leitung und kannst dann auch Luft, Pumpe ... mit abfragen)

      Alternativ gibts auch noch den LM75 für den 2Wire (I2C)

      Gruß Siggi
    • New

      Hallo,

      erstmal: ich verorge die NTCs über zwei PNP Tranistoren mit Strom. Da ich bereits das 7 Segment dingens an dem MC hab dacht ich das es so den MC etwas entlasten würde verbunden ist MC und Tranistor über 4k7.

      Noch eine zwischenfrage: wie gut funktioniert laut euren Erfahrungen Oversampling?
      Bei mir liefert es recht durchwachsene Werte. Obwohl Strom und Spannung konstant sind bekomme ich bei den Messungen diverenzen von rund 20%.

      Hier ist ersteinmal der Sourcecode der ohne Probleme hinhaut:


      Source Code

      1. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      2. 'Mikrocontroller Konfigurieren
      3. $regfile = "m8adef.dat" ' specify the used micro
      4. $crystal = 1000000 ' used crystal frequency
      5. $hwstack = 32 ' default use 32 for the hardware stack
      6. $swstack = 10 ' default use 10 for the SW stack
      7. $framesize = 40 ' default use 40 for the frame space
      8. '$baud = 19200
      9. 'Ende Mikrocontroller Konfigurieren
      10. '=============================================================
      11. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      12. 'Ports Konfigurireren
      13. Config Portb = Output
      14. Gnd_digit_1 Alias Portd.1
      15. Gnd_digit_2 Alias Portd.2
      16. Gnd_digit_3 Alias Portd.3
      17. Gnd_digit_4 Alias Portd.4
      18. Config Gnd_digit_1 = Output
      19. Config Gnd_digit_2 = Output
      20. Config Gnd_digit_3 = Output
      21. Config Gnd_digit_4 = Output
      22. Config Portc.5 = Input
      23. Config Portc.4 = Input
      24. Config Portd.6 = Output
      25. Config Portd.7 = Output
      26. Portd.6 = 1
      27. Portd.7 = 1
      28. 'Port für Spannungsmessung
      29. 'Ende Ports Konfigurieren
      30. '=============================================================
      31. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      32. 'Variablen
      33. Dim Var_ziffern(14) As Byte
      34. Var_ziffern(1) = &B0011_1111 '0
      35. Var_ziffern(2) = &B0000_0110 '1
      36. Var_ziffern(3) = &B0101_1011 '2
      37. Var_ziffern(4) = &B0100_1111
      38. Var_ziffern(5) = &B0110_0110
      39. Var_ziffern(6) = &B0110_1101
      40. Var_ziffern(7) = &B0111_1101
      41. Var_ziffern(8) = &B0000_0111
      42. Var_ziffern(9) = &B0111_1111
      43. Var_ziffern(10) = &B0110_1111 '9
      44. '9
      45. Var_ziffern(11) = &B0011_1001 'C 'C
      46. Var_ziffern(12) = &B0111_0001 'F
      47. Var_ziffern(13) = &B0000_0000 'Clear GND
      48. Var_ziffern(14) = &B0100_0000 '- Minuszeichen
      49. '9
      50. Dim Var_count As Byte
      51. Dim Var_temp1 As Word
      52. Dim Var_temp2 As Word
      53. Dim Var_timer0 As Byte
      54. Dim Var_sec As Byte
      55. Dim Var_old_sec As Byte
      56. Dim Var_digit_array(4) As Word
      57. Dim Var_digit_tmp As Dword
      58. Dim Var_zahl As Byte
      59. Dim Var_temperatur As Byte
      60. Dim Var_minus As Bit
      61. Dim Var_temp As Dword
      62. Dim Var_count1 As Byte
      63. 'Ende Variablen
      64. '=============================================================
      65. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      66. 'Timer
      67. Const Timer0reload = 4
      68. Config Timer0 = Timer , Prescale = 1024
      69. Load Timer0 , Timer0reload
      70. On Timer0 Timer0_routine
      71. Enable Timer0
      72. Start Timer0
      73. Enable Interrupts
      74. 'Ende Timer
      75. '=============================================================
      76. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      77. 'Spannung Messen Anfang
      78. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      79. Start Adc
      80. 'Ende Spannung Messen
      81. '=============================================================
      82. Do
      83. Incr Var_count
      84. Incr Var_count1
      85. If Var_sec < 31 Then
      86. Portd.7 = 1
      87. Portd.6 = 0
      88. If Var_count1 = 100 Then
      89. Var_count1 = 0
      90. Var_temp1 = Getadc(5)
      91. End If
      92. Var_temp = Var_temp1
      93. Var_digit_array(4) = 1
      94. Elseif Var_sec > 30 Then
      95. Portd.6 = 1
      96. Portd.7 = 0
      97. If Var_count1 = 100 Then
      98. Var_count1 = 0
      99. Var_temp2 = Getadc(4)
      100. End If
      101. Var_temp = Var_temp2
      102. Var_digit_array(4) = 2
      103. End If
      104. 'var_temp = 1024 - var_temp
      105. 'Temperatur in postiv umrechnen
      106. Var_digit_tmp = Var_temp Mod 1000
      107. Var_digit_array(3) = Var_digit_tmp / 100
      108. Var_digit_tmp = Var_digit_tmp Mod 100
      109. Var_digit_array(2) = Var_digit_tmp / 10
      110. Var_digit_tmp = Var_digit_tmp Mod 10
      111. Var_digit_array(1) = Var_digit_tmp
      112. If Var_count = 1 Then
      113. Portb = Var_ziffern(13)
      114. If Var_digit_array(4) = 1 Then
      115. Portb = &B1000_0110
      116. Else
      117. Portb = &B1101_1011
      118. End If
      119. Gnd_digit_1 = 0
      120. Gnd_digit_2 = 1
      121. Gnd_digit_3 = 1
      122. Gnd_digit_4 = 1
      123. Elseif Var_count = 2 Then
      124. Portb = Var_ziffern(13)
      125. Var_zahl = Var_digit_array(3) + 1
      126. Portb = Var_ziffern(var_zahl)
      127. Gnd_digit_1 = 1
      128. Gnd_digit_2 = 0
      129. Gnd_digit_3 = 1
      130. Gnd_digit_4 = 1
      131. Elseif Var_count = 3 Then
      132. Portb = Var_ziffern(13)
      133. Var_zahl = Var_digit_array(2) + 1
      134. Portb = Var_ziffern(var_zahl)
      135. Gnd_digit_1 = 1
      136. Gnd_digit_2 = 1
      137. Gnd_digit_3 = 0
      138. Gnd_digit_4 = 1
      139. Elseif Var_count = 4 Then
      140. Portb = Var_ziffern(13)
      141. Var_zahl = Var_digit_array(1) + 1
      142. Portb = Var_ziffern(var_zahl)
      143. Gnd_digit_1 = 1
      144. Gnd_digit_2 = 1
      145. Gnd_digit_3 = 1
      146. Gnd_digit_4 = 0
      147. Var_count = 0
      148. End If
      149. Waitms 1
      150. Loop
      151. Timer0_routine:
      152. Incr Var_timer0
      153. If Var_timer0 = 5 Then
      154. Incr Var_sec
      155. End If
      156. If Var_sec > 60 Then Var_sec = 0
      157. Load Timer0 , Timer0reload
      158. Return
      159. End 'end program
      Display All

      The post was edited 1 time, last by Alex_T ().

    • New

      Und hier ist der Sourcecode mit Problemen ohne Ende:
      Das Wechseln zwischen den Werten von den beiden NTCs funktioniert auch nicht. Irgendwann hängt das ding einfach und zeigt nur noch einen NTC an obwohl es zwischen 1. und 2. wechselt.

      Ich hab inzwischen den Sourcecode so oft editiert das ich vermudlich noch ein paar zusatzfehler mit reingeflogen sind ;)

      Source Code

      1. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      2. 'Mikrocontroller Konfigurieren
      3. $regfile = "m8adef.dat" ' specify the used micro
      4. $crystal = 1000000 ' used crystal frequency
      5. $hwstack = 32 ' default use 32 for the hardware stack
      6. $swstack = 10 ' default use 10 for the SW stack
      7. $framesize = 40 ' default use 40 for the frame space
      8. '$baud = 19200
      9. 'Ende Mikrocontroller Konfigurieren
      10. '=============================================================
      11. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      12. 'Ports Konfigurireren
      13. Config Portb = Output
      14. Gnd_digit_1 Alias Portd.1
      15. Gnd_digit_2 Alias Portd.2
      16. Gnd_digit_3 Alias Portd.3
      17. Gnd_digit_4 Alias Portd.4
      18. Config Gnd_digit_1 = Output
      19. Config Gnd_digit_2 = Output
      20. Config Gnd_digit_3 = Output
      21. Config Gnd_digit_4 = Output
      22. Config Portc.5 = Input
      23. Config Portc.4 = Input
      24. Config Portd.6 = Output
      25. Config Portd.7 = Output
      26. Portd.6 = 1
      27. Portd.7 = 1
      28. 'Port für Spannungsmessung
      29. 'Ende Ports Konfigurieren
      30. '=============================================================
      31. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      32. 'Variablen
      33. Dim Var_ziffern(14) As Byte
      34. Var_ziffern(1) = &B0011_1111 '0
      35. Var_ziffern(2) = &B0000_0110 '1
      36. Var_ziffern(3) = &B0101_1011 '2
      37. Var_ziffern(4) = &B0100_1111
      38. Var_ziffern(5) = &B0110_0110
      39. Var_ziffern(6) = &B0110_1101
      40. Var_ziffern(7) = &B0111_1101
      41. Var_ziffern(8) = &B0000_0111
      42. Var_ziffern(9) = &B0111_1111
      43. Var_ziffern(10) = &B0110_1111 '9
      44. '9
      45. Var_ziffern(11) = &B0011_1001 'C 'C
      46. Var_ziffern(12) = &B0111_0001 'F
      47. Var_ziffern(13) = &B0000_0000 'Clear GND
      48. Var_ziffern(14) = &B0100_0000 '- Minuszeichen
      49. '9
      50. Dim Var_count As Byte
      51. Dim Var_temp1 As Word
      52. Dim Var_temp2 As Word
      53. Dim Var_timer0 As Byte
      54. Dim Var_sec As Byte
      55. Dim Var_old_sec As Byte
      56. Dim Var_digit_array(4) As Word
      57. Dim Var_digit_tmp As Dword
      58. Dim Var_zahl As Byte
      59. Dim Var_temperatur As Byte
      60. Dim Var_minus As Bit
      61. Dim Var_temp As Dword
      62. Dim Var_count1 As Byte
      63. 'Ende Variablen
      64. '=============================================================
      65. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      66. 'Timer
      67. Const Timer0reload = 4
      68. Config Timer0 = Timer , Prescale = 1024
      69. Load Timer0 , Timer0reload
      70. On Timer0 Timer0_routine
      71. Enable Timer0
      72. Start Timer0
      73. Enable Interrupts
      74. 'Ende Timer
      75. '=============================================================
      76. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      77. 'Spannung Messen Anfang
      78. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      79. Start Adc
      80. 'Ende Spannung Messen
      81. '=============================================================
      82. Do
      83. Incr Var_count
      84. Incr Var_count1
      85. If Var_sec < 31 Then
      86. Portd.7 = 1
      87. Portd.6 = 0
      88. If Var_count1 = 100 Then
      89. Var_count1 = 0
      90. Var_temp1 = Getadc(5)
      91. End If
      92. Var_temp = Var_temp1
      93. Var_digit_array(4) = 1
      94. Elseif Var_sec > 30 Then
      95. Portd.6 = 1
      96. Portd.7 = 0
      97. If Var_count1 = 100 Then
      98. Var_count1 = 0
      99. Var_temp2 = Getadc(4)
      100. End If
      101. Var_temp = Var_temp2
      102. Var_digit_array(4) = 2
      103. End If
      104. Var_temp = 1024 - Var_temp
      105. Select Case Var_temp
      106. Case Is < 7 : Var_temperatur = 88
      107. Var_minus = 1
      108. Case 8 : Var_temperatur = 31
      109. Var_minus = 1
      110. Case 9 : Var_temperatur = 29
      111. Var_minus = 1
      112. Case 10 : Var_temperatur = 27
      113. Var_minus = 1
      114. Case 11 : Var_temperatur = 25
      115. Var_minus = 1
      116. Case 12 : Var_temperatur = 23
      117. Var_minus = 1
      118. Case 13 : Var_temperatur = 22
      119. Var_minus = 1
      120. Case 14 : Var_temperatur = 20
      121. Var_minus = 1
      122. Case 15 : Var_temperatur = 19
      123. Var_minus = 1
      124. Case 16 : Var_temperatur = 18
      125. Var_minus = 1
      126. Case 17 : Var_temperatur = 17
      127. Var_minus = 1
      128. Case 18 : Var_temperatur = 15
      129. Var_minus = 1
      130. Case 19 : Var_temperatur = 14
      131. Var_minus = 1
      132. Case 20 : Var_temperatur = 13
      133. Var_minus = 1
      134. Case 21 : Var_temperatur = 12
      135. Var_minus = 1
      136. Case 22 : Var_temperatur = 11
      137. Var_minus = 1
      138. Case 23 : Var_temperatur = 10
      139. Var_minus = 1
      140. Case 24 : Var_temperatur = 9
      141. Var_minus = 1
      142. Case 25 : Var_temperatur = 8
      143. Var_minus = 1
      144. Case 27 : Var_temperatur = 7
      145. Var_minus = 1
      146. Case 28 : Var_temperatur = 6
      147. Var_minus = 1
      148. Case 29 : Var_temperatur = 5
      149. Var_minus = 1
      150. Case 30 : Var_temperatur = 4
      151. Var_minus = 1
      152. Case 32 : Var_temperatur = 3
      153. Var_minus = 1
      154. Case 33 : Var_temperatur = 2
      155. Var_minus = 1
      156. Case 34 : Var_temperatur = 1
      157. Var_minus = 1
      158. Case 36 : Var_temperatur = 0
      159. Var_minus = 0
      160. Case 37 : Var_temperatur = 1
      161. Var_minus = 0
      162. Case 39 : Var_temperatur = 2
      163. Var_minus = 0
      164. Case 41 : Var_temperatur = 3
      165. Var_minus = 0
      166. Case 42 : Var_temperatur = 4
      167. Var_minus = 0
      168. Case 44 : Var_temperatur = 5
      169. Var_minus = 0
      170. Case 46 : Var_temperatur = 6
      171. Var_minus = 0
      172. Case 48 : Var_temperatur = 7
      173. Var_minus = 0
      174. Case 50 : Var_temperatur = 8
      175. Var_minus = 0
      176. Case 52 : Var_temperatur = 9
      177. Var_minus = 0
      178. Case 54 : Var_temperatur = 10
      179. Var_minus = 0
      180. Case 56 : Var_temperatur = 11
      181. Var_minus = 0
      182. Case 58 : Var_temperatur = 12
      183. Var_minus = 0
      184. Case 60 : Var_temperatur = 13
      185. Var_minus = 0
      186. Case 63 : Var_temperatur = 14
      187. Var_minus = 0
      188. Case 65 : Var_temperatur = 15
      189. Var_minus = 0
      190. Case 68 : Var_temperatur = 16
      191. Var_minus = 0
      192. Case 70 : Var_temperatur = 17
      193. Var_minus = 0
      194. Case 73 : Var_temperatur = 18
      195. Var_minus = 0
      196. Case 75 : Var_temperatur = 19
      197. Var_minus = 0
      198. Case 78 : Var_temperatur = 20
      199. Var_minus = 0
      200. Case 81 : Var_temperatur = 21
      201. Var_minus = 0
      202. Case 84 : Var_temperatur = 22
      203. Var_minus = 0
      204. Case 87 : Var_temperatur = 23
      205. Var_minus = 0
      206. Case 90 : Var_temperatur = 24
      207. Var_minus = 0
      208. Case 93 : Var_temperatur = 25
      209. Var_minus = 0
      210. Case 96 : Var_temperatur = 26
      211. Var_minus = 0
      212. Case 100 : Var_temperatur = 27
      213. Var_minus = 0
      214. Case 103 : Var_temperatur = 28
      215. Var_minus = 0
      216. Case 106 : Var_temperatur = 29
      217. Var_minus = 0
      218. Case 110 : Var_temperatur = 30
      219. Var_minus = 0
      220. Case 114 : Var_temperatur = 31
      221. Var_minus = 0
      222. Case 117 : Var_temperatur = 32
      223. Var_minus = 0
      224. Case 121 : Var_temperatur = 33
      225. Var_minus = 0
      226. Case 125 : Var_temperatur = 34
      227. Var_minus = 0
      228. Case 129 : Var_temperatur = 35
      229. Var_minus = 0
      230. Case 133 : Var_temperatur = 36
      231. Var_minus = 0
      232. Case 137 : Var_temperatur = 37
      233. Var_minus = 0
      234. Case 141 : Var_temperatur = 38
      235. Var_minus = 0
      236. Case 146 : Var_temperatur = 39
      237. Var_minus = 0
      238. Case 150 : Var_temperatur = 40
      239. Var_minus = 0
      240. Case Is > 151 : Var_temperatur = 88
      241. Var_minus = 0
      242. End Select
      243. If Var_minus = 1 Then
      244. Var_digit_array(3) = 14
      245. Else
      246. Var_digit_array(3) = 11
      247. End If
      248. Var_digit_array(2) = Var_temperatur / 10
      249. Var_digit_tmp = Var_temperatur Mod 10
      250. Var_digit_array(1) = Var_digit_tmp
      Display All
      Der REst vom Sourcecode ist im nächsten Beitrag da er die 10000 überstieg. Diese Grenze sollte dringend auf das doppelte angehoben werden.

      Grüße
      Alex
    • New

      Source Code

      1. If Var_count = 1 Then
      2. Portb = Var_ziffern(13)
      3. If Var_digit_array(4) = 1 Then
      4. Portb = &B1000_0110
      5. Else
      6. Portb = &B1101_1011
      7. End If
      8. Gnd_digit_1 = 0
      9. Gnd_digit_2 = 1
      10. Gnd_digit_3 = 1
      11. Gnd_digit_4 = 1
      12. Elseif Var_count = 2 Then
      13. Portb = Var_ziffern(13)
      14. Var_zahl = Var_digit_array(3)
      15. Portb = Var_ziffern(var_zahl)
      16. Gnd_digit_1 = 1
      17. Gnd_digit_2 = 0
      18. Gnd_digit_3 = 1
      19. Gnd_digit_4 = 1
      20. Elseif Var_count = 3 Then
      21. Portb = Var_ziffern(13)
      22. Var_zahl = Var_digit_array(2) + 1
      23. Portb = Var_ziffern(var_zahl)
      24. Gnd_digit_1 = 1
      25. Gnd_digit_2 = 1
      26. Gnd_digit_3 = 0
      27. Gnd_digit_4 = 1
      28. Elseif Var_count = 4 Then
      29. Portb = Var_ziffern(13)
      30. Var_zahl = Var_digit_array(1) + 1
      31. Portb = Var_ziffern(var_zahl)
      32. Gnd_digit_1 = 1
      33. Gnd_digit_2 = 1
      34. Gnd_digit_3 = 1
      35. Gnd_digit_4 = 0
      36. Var_count = 0
      37. End If
      38. Waitms 1
      39. Loop
      40. Timer0_routine:
      41. Incr Var_timer0
      42. If Var_timer0 = 5 Then
      43. Incr Var_sec
      44. End If
      45. If Var_sec > 60 Then Var_sec = 0
      46. Load Timer0 , Timer0reload
      47. Return
      48. End 'end program
      Display All
    • New

      Michael wrote:

      schau dir nochmal die Formel an, du hast die Werte total verdreht.
      a iat die Steigung und b ist der Offset
      Schau dir mein richtiges Zitat an:
      b ist unproblematisch. Weil es ja im Datenblatt steht.
      Muss ich die Steigung ( a ) selbst ermitteln?
      Wenn ja: nur für den Temperautrbereich den ich brauche oder für alle Daten?
      Da ich die Daten nicht einfach in Libre kopieren kann wird das ne angehme Arbeit...
      Aber was tut man nicht alles für ein paar billige Sensoren ;) .
      Außerdem habe ich Probleme mit den Einheiten.

      ist es:
      T=a*U+b
      oder T=a*(U+b)

      T = Temperatur ( Fahrenheit / Celsius ? )
      a = Steigung ( in % ? )
      b = Datenblatt 3380 K
      U = Spannung in Volt?

      Außerdem hab ich noch so rund ein dutzend Formeln gefunden. Hier eine weitere Formel:
      rn-wissen.de/wiki/index.php/PT…mperaturabh.C3.A4ngigkeit

      Wenn ich das mit den NTC auf die Reihe kriege ergeben sich für mich ungeahnte Möglichkeiten. Z.B. einen Leistungstranistor über einen NTC überwachen und die Leistung anpassen - was im übrigen auch für vieles andere Anwenden lassen müsste. Ich müsste mir keine genauen Gedanken mehr um Kühlkörperdimensionierung oder Hitzeableitung machen sondern würde die Leistung einfach über einen NTC über die Temperatur regeln.

      Grüße
      Alex

      The post was edited 1 time, last by Alex_T ().