Forum: Mikrocontroller und Digitale Elektronik KTY 10-5 Formelprobleme


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Paul (Gast)


Lesenswert?

Guten Abend :)
hab mal ne kleine Frage ^^ aber nicht motzen wenn sie dumm ist, bin erst 
14 ;)

und zwar hab ich einen Temperatursensor von Infineon -> KTY 10-5
ich habe auch das Datenblatt gelesen und die Formeln zum berechnen der 
Temperatur haben mich schon ne weile beschäftigt ^^ aber jetzt weiß ich 
wies geht! :)
naja jetzt stellt sich mir die Frage wie ich meinem µC sag das er aus 
meinem Spannungsteiler den AD Wert in nen Widerstand von dem Sensor 
umrechnet und diese dann in die Temperatur :(
ich weiß nicht mehr weiter :(

die Formel für die Temperatur bitte ich euch aus dem Datenblatt zu 
entnehmen da ich nicht weiß wie man ne wurzel mit dem pc macht ^^
-> 
http://www.datasheetarchive.com/pdf-datasheets/Datasheets-14/DSA-266037.html
(die Formel mit dem T=(25+...)

und k(T) wird ja berechnet aus dem Sensorwiderstand geteilt durch den 
Widerstand bei 25°C ... ich nehme einfach mal 2000 Ohm an...

Spannungsteiler:
GND---Sensor--------2,6k Ohm---VCC
               -
               -
               ADC

das Programm ist bisher in C geschrieben ... kann mir einer die Formeln 
bitte schreiben, damit ich die Temperatur auf meinem µC 
weiterverarbeiten kann? :)

wie gesagt ich bin erst 14 und für alle infos offen solange sie 
hilfreich sind! ich bitte euch nicht einfach auf andere threads zu 
verweißen sondern vlt. auch ein bißchen zu erklären :) wäre nett ... ich 
will nämlich daraus lernen! :)

mfg. Paul

: Verschoben durch User
von spess53 (Gast)


Lesenswert?

Hi

>keiner ne ahnung? :(

Falsches Forum!

MfG Spess

von Helfer (Gast)


Lesenswert?

> Spannungsteiler:
> GND---Sensor---+----2,6k Ohm---VCC
>                |
>                |
>               ADC

Beim Spannungsteiler bist du doch schon. In der dortigen Formel 
kennst du: U_aus von der ADC Messung (Die Umrechnung des ADC-Messwerts 
in die Spannung U_aus steht z.B. im Tutorial zum ADC), U_ein (=Vcc), R1 
(=2,6kOhm). Unbekannt ist nur R2, dein Sensorwiderstand.

Die Wurzel kannst du mit den Mathefunktionen in Fliesskomma rechnen, 
wenn das dein unbekannter µC beherrscht. Die Doku zu sqrt() ist dann 
wichtig. Oder du kannst die Wurzel mit einen Näherungsverfahren 
berechnen. Schlag in Wikipedia das Newton-Verfahren nach. Oder du kannst 
dir für typische Werte eine Tabelle im Programm anlegen.

von Branko G. (branko)


Lesenswert?

Etwas über Temperaturmessung mit dem KTY:
http://www.sprut.de/electronic/temeratur/temp.htm#ptc

von Werner F. (frewer)


Lesenswert?

Hallo Paul,

eine dumme Frage gibt es nicht, es gibt nur dumme Antworten! Will 
versuchen, Dir eine gute Antwort zu geben, denn ich habe auch einige 
Zeit mit dem KTY10-8 rumprobiert und nunmehr ein gehendes TempMessgerät 
auf dem Tisch. Wenn Du Dir den Artikel bei "sprut" durchgelesen und das 
Datenblatt angesehen hast, dann wird klar, dass der hauptvorteil der 
KTY-Sensoren ihre Linearität in gewissen Bereichen ist. Das solltest Du 
nutzen und den Formelkram vergessen, weil dessen Abweichungen von 
linearen Fall kaum mit einem normalen Anzeigesystem auffällt. Übrigens, 
wenn Du Dir mal die käuflichen TempMessgeräte anschaust, dann gehen alle 
höchstens auf 1 Grad genau - wenn überhaupt -.
Also ich habe mein damaliges Projekt damit begonnen, dass ich mal die 
Spannung am KTY bei verschiedenen Temperaturen im Spannungsteiler 
gemessen und mir auf diese Weise eine Tabelle zusammengestellt habe. 
Durch einfachste Interpolation (Meßwerte auf kariertes Papier und mit 
dem Lineal eine vernünftig passende Gerade durch die Meßwerte legen) 
habe ich dann meinen linearen Zusammenhang zwischen Temperatur und 
Spannung erhalten.
Nun kommt es im 2ten Schritt auf den Mikrocontroller an, denn Du 
brauchst ja einen Analog-Digital-Wandler, um die Spannung zu messen. Den 
haben die AVR's von ATMEL bereits eingebaut, die einfachen AT89 Typen 
aber nicht. Also wäre es notwendig zu wissen, welchen Controller Du 
verwenden willst.

mfG
frewer

von Michael (Gast)


Lesenswert?

Hallo,
das hier funktioniert super :)
1
#include <stdio.h> 
2
#include <math.h> 
3
4
#define KTY_R25 2000            // R at 25?C 
5
#define KTY_RS 3900             // serial resistor 
6
#define KTY_ALPHA 0.00788 
7
#define KTY_BETA 0.00001937 
8
9
float V_REF, vcc = 5.0; 
10
11
float kty_calc(int adcResult) 
12
{ 
13
    float vAdc, temp, kt; 
14
15
    vAdc = (adcResult * V_REF) / 1024; 
16
    kt = (KTY_RS / (vcc / vAdc - 1)) / KTY_R25; // Temperaturfaktor 
17
18
    temp = pow(KTY_ALPHA, 2) - 4 * KTY_BETA + 4 * KTY_BETA * kt; 
19
    temp = 25 + ((sqrt(temp) - KTY_ALPHA) / (2 * KTY_BETA));    // Temperatur in ?C 
20
21
    return temp; 
22
} 
23
24
void main(void) 
25
{ 
26
    int adc = 844; 
27
    for (adc = 836; adc <= 848; adc += 4) { 
28
        for (V_REF = 2.549; V_REF <= 2.585; V_REF += 0.005) { 
29
            printf("V_REF = %05.3lf\tkty_calc(%03u) = %06.4lf\n", V_REF, adc, kty_calc(adc)); 
30
        } 
31
    } 
32
}

von Michael (Gast)


Lesenswert?

sorry hab auf die schnelle nicht das richtig erwischt, hier die 
ursprüngliche Variante:
1
//***************************************************************** 
2
//* Calculate KTY-Temperature 
3
//***************************************************************** 
4
5
// KTY100-6 
6
#define KTY_R25 2000 // R at 25°C 
7
#define KTY_RS 3900 // serial resistor 
8
#define KTY_ALPHA 0.00788 
9
#define KTY_BETA 0.00001937 
10
11
float kty_calc(int adcResult) 
12
{ 
13
float vAdc, temp, kt; 
14
15
vAdc = (adcResult * V_REF) / 1024; 
16
kt = (KTY_RS / (vcc / vAdc - 1)) / KTY_R25; // Temperaturfaktor 
17
18
temp = KTY_ALPHA*KTY_ALPHA - 4 * KTY_BETA + 4 * KTY_BETA * kt; 
19
temp = 25 + ((sqrt(temp) - KTY_ALPHA) / (2 * KTY_BETA)); // Temperatur in °C 
20
21
tempHighbyte = temp; 
22
tempLowbyte = (temp - tempHighbyte) * 10; 
23
24
return temp; 
25
}

was nicht beschrieben ist:

vAdc = deine Versorgungsspannung am Spannungsteiler.

die Daten nimmst aus dem Datenblatt:
#define KTY_R25 2000 // R at 25°C

Den Widerstandswert vom Spannungsteiler hier eintragen
#define KTY_RS 3900 // serial resistor

aufgerufen wird dann in etwa so:
du hast z.b. in der Variable adcwert deinen eingelesenen wert.

float temperatur;
temperatur = kty_calc(adcwert);


dann hast du in Temperatur die Temperatur mit Kommastellen. Um damit 
leichter weiterzuarbeiten kannst du es mit 100 multiplizieren.

ich war wirklich überrascht das gleich auf Anhieb ein guter Wert 
rausgekommen ist :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das mit den Spannungen sollte man vermeiden, denn das bringt nur noch
zusätzliche Messfehler.  Einen Widerstand misst man ratiometrisch,
d. h. er wird in einem Spannungsteiler gegen einen bekannten
Widerstand verglichen.  Dadurch kürzt sich der absolute Wert der
Referenzspannung heraus aus der Berechnung.  Wenn man dann noch den
zweiten Widerstand im Spannungsteiler genauso groß dimensioniert wie
den Nennwiderstand des Temperatursensors (macht sich besonders gut,
wenn man die -6 oder gar die -62 Variante des KTY nutzt), dann kürzt
sich noch mehr, s. u.

Ich habe das vorhin auch gerade durch, hier ist es ein KTY13-6,
"v" ist dabei der Messwert des ADC (linksbündig eingetragen,
also maximal 0xffc0):
1
      const double alpha = 7.88E-3;
2
      const double beta = 1.937E-5;
3
      v = ((b[0] << 8) + b[1]);
4
      /*
5
       * The reference resistor in the voltage divider has the same
6
       * value (2 kOhm) as the nominal 25 oC value of the KTY13-6, so
7
       * the formula for kt:
8
       *
9
       *              Rref
10
       * kT = ---------------------
11
       *      R25 * (Uref/Ukty - 1)
12
       *
13
       * eventually reduces to:
14
       *
15
       *         Ukty
16
       * kT = -----------
17
       *      Ukty - Uref
18
       *
19
       * Instead of using absolute voltages, it suffices to use the
20
       * ADC values (with 0xffc0 = ADCmaxval being the reference
21
       * level).
22
       */
23
      double kt = (double)v / (0xffc0 - v);
24
      t = 25 + (sqrt(alpha * alpha - 4 * beta + 4 * beta * kt) - alpha) / (2 * beta);
25
      PRINTF("KTY13    %5.2f oC\r\n", t);

Sonderlich genau sind die Dinger aber ohne weitere Kalibrierung
nicht.  Hier mal einige Temperatursensor-Messergebnisse im Vergleich:
1
SHT-21#1 22.79 oC, 20.08 % RH
2
SHT-21#2 22.75 oC, 19.57 % RH
3
LM75     20.00 oC
4
TMP141#1 22.75 oC
5
TMP141#2 22.75 oC
6
TMP141#3 22.50 oC
7
DS18B20  23.44 oC
8
KTY13    21.30 oC
9
RFA1int  22.13 oC

Warum der LM75 gerade so weit "abgeschlagen" auf seinen 20 °C
beharrt, weiß ich nicht.  Sonst lag der eher bei einer Abweichung
von ca. -1 K gegenüber den SHT-21.

von Michael (Gast)


Lesenswert?

ah ok, auch nicht schlecht, dann brauche ich aber 2 analoge Eingänge ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael schrieb:
> ah ok, auch nicht schlecht, dann brauche ich aber 2 analoge Eingänge ?

Nein, wieso?  Der Spannungsteiler hängt einfach an der Referenz-
spannung des ADC, welche auch immer das ist.  Deren absoluter Wert
ist ziemlich uninteressant.  In meinem Falle wurde ein ATmega128RFA1
benutzt, bei dem der ADC absolut nur bis 1,8 V aussteuerbar ist, sodass
ich die interne 1,6-V-Referenz am Aref-Ausgang zugleich für den
Spannungsteiler benutzt habe.  Du kannst aber genauso gut (wenn dein
ADC das mitmacht) Vcc als Referenz benutzen und den Spannungsteiler
dann daran setzen.

Voraussetzung für die ratiometrische Methode ist natürlich, dass dein
ADC im Falle, dass der KTYxx nicht dran ist, dann auch tatsächlich den
in der Rechnung angegebenen Max-Wert ausspuckt.

von Michael (Gast)


Lesenswert?

dann habe ich noch irgendwo einen denkfehler.


Jörg Wunsch schrieb:
> Einen Widerstand misst man ratiometrisch,
>
> d. h. er wird in einem Spannungsteiler gegen einen bekannten
>
> Widerstand verglichen

Ich dachte man macht 2 Spannungsteiler einen mit bekannten Werten den 
anderen mit dem KTY und nun vergleicht man die eingelesenen Werte von 
beiden und rechnet.

Wie sieht dann die Beschaltung aus ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael schrieb:

> Wie sieht dann die Beschaltung aus ?

So:
1
                         +---------------
2
                         |               .
3
  Vref ----+-------------| Aref
4
           |             |               .
5
           |             |
6
           -             |               .
7
          | | R          |
8
          | |  ref       |               .
9
           -             |
10
           |             |               .
11
           |             |
12
           *-------------| ADCinput      .
13
           |             |
14
           |             |               .
15
           -             |
16
          | | KTYxx      |               .
17
          | |            |
18
           -             +---------------
19
           |
20
           |
21
          ---

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:

> Warum der LM75 gerade so weit "abgeschlagen" auf seinen 20 °C
> beharrt, weiß ich nicht.  Sonst lag der eher bei einer Abweichung
> von ca. -1 K gegenüber den SHT-21.

Jetzt sackte er immer weiter ab, und nun ist's mir klar: die
Batteriespannung geht allmählich runter, sie ist jetzt bei 2,5 V.
Das mag der LM75 gar nicht (auch, wenn's ein -3 ist).

von Michael (Gast)


Lesenswert?

ah, ok danke.

Also den Spannungsteiler an ARef statt an VCC, danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael schrieb:

> Also den Spannungsteiler an ARef statt an VCC, danke

Nicht zwingend.  Wenn du bei einem AVR intern Vcc als Referenz für
den ADC einstellst, dann kannst du den Spannungsteiler natürlich
sehr wohl an Vcc hängen.  Das Prinzip bleibt dann das gleiche,
denn der Draht von Vcc nach Aref wird in diesem Falle intern
geschaltet.

von Michael (Gast)


Lesenswert?

Hallo Jörg,

ich versuche gerade deine Formel durch meine zu ersetzen.

Klappt leider noch nicht.
1
      v = ((b[0] << 8) + b[1]);

was ist v und was ist b ?

viele Grüße
Michael

von Michael (Gast)


Lesenswert?

ok, v ist der Messwert vom ADC, hab ich überlesen.
Wiso linksbündig ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael schrieb:
> ok, v ist der Messwert vom ADC, hab ich überlesen.
> Wiso linksbündig ?

Weil ADLAR gesetzt ist (AVR).

von Michael (Gast)


Lesenswert?

ah ok danke, welchen Vorteil hat das ?

Was ist
1
v = ((b[0] << 8) + b[1]);

b ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael schrieb:
> ah ok danke, welchen Vorteil hat das ?

Eigentlich nur den, dass man nur das High-Byte auswerten muss, wenn
man nur an 8 der 10 bits interessiert ist.

> Was ist
>
1
> v = ((b[0] << 8) + b[1]);
2
>
>
> b ?

Ein Array aus dem high- und low-Byte des Messwertes (weil das hier
so über einen I²C-Bus ankam).

von Paul (Gast)


Lesenswert?

Hallo :)
hatte lange keine Zeit hier vorbeizuschauen ^^
danke für die vielen Antworten! :)

hab mir jetzt mal aus euren Code-Schnipseln was zusammengebastelt ^^
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <math.h>
4
5
// KTY10-5 
6
#define KTY_R25 1970 // R at 25°C 
7
#define KTY_RS 4570 // serial resistor 
8
#define KTY_ALPHA 0.00788 
9
#define KTY_BETA 0.00001937 
10
11
12
//***************************************************************** 
13
//* ADC initialisieren
14
//***************************************************************** 
15
16
void ADC_Init(void) {
17
 
18
  uint16_t ergebnis;
19
 
20
  ADMUX = (0<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen (5V)
21
  ADCSRA = (1<<ADPS2) | (1<<ADPS0);     // Frequenzvorteiler: 32
22
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
23
 
24
  ADCSRA |= (1<<ADSC);                  // ADC-Wandlung
25
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
26
  ergebnis = ADCW;
27
}
28
 
29
30
//***************************************************************** 
31
//* ADC-Messung
32
//***************************************************************** 
33
34
uint16_t ADC_Read( uint8_t channel ) {
35
  
36
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);  // Kanal waehlen, ohne andere Bits zu beeinflußen
37
  ADCSRA |= (1<<ADSC);                    // ADC-Wandlung
38
  while (ADCSRA & (1<<ADSC) ) {}          // auf Abschluss der Konvertierung warten
39
  return ADCW;                            // ADC auslesen und zurückgeben
40
}
41
 
42
43
uint16_t ADC_Read_Avg( uint8_t channel, uint8_t average ) {
44
  uint32_t result = 0;
45
 
46
  for (uint8_t i = 0; i < average; ++i )
47
    result += ADC_Read( channel );
48
 
49
  return (uint16_t)( result / average );
50
}
51
52
53
//***************************************************************** 
54
//* KTY-Temperature 
55
//***************************************************************** 
56
57
float kty_calc(int adcResult) 
58
{ 
59
float vAdc, temp, kt; 
60
float V_REF = 5.0, vcc = 5.0;
61
62
vAdc = (adcResult * V_REF) / 1024; 
63
kt = (KTY_RS / (vcc / vAdc - 1)) / KTY_R25; // Temperaturfaktor 
64
65
temp = KTY_ALPHA*KTY_ALPHA - 4 * KTY_BETA + 4 * KTY_BETA * kt; 
66
temp = 25 + ((sqrt(temp) - KTY_ALPHA) / (2 * KTY_BETA)); // Temperatur in °C 
67
68
// tempHighbyte = temp; 
69
// tempLowbyte = (temp - tempHighbyte) * 10; 
70
71
return temp; 
72
}
73
74
75
//***************************************************************** 
76
//* Hauptschleife
77
//***************************************************************** 
78
79
int main() {
80
81
  uint16_t adcwert;
82
  float temperatur;
83
84
  ADC_Init();    // springt zu ADC_Init
85
86
  // DDRB = 0x00;    // Port B Eingang
87
  DDRD = 0xff;    // Port D Ausgang
88
  PORTD = 0x00;
89
90
  // PORTB = 0xff;    // interne Pull-Up Widerstände aktivieren
91
92
  while( 1 ) {
93
  
94
  adcwert = ADC_Read_Avg(0, 4);    // Kanal 0, Mittelwert aus 4 Messungen
95
  temperatur = kty_calc(adcwert);
96
97
  // PORTD = 0x00;
98
99
  if (temperatur < 17) {      // Wenn Temperatur kleiner als 17°C...
100
    
101
    PORTD = ~0b0000011;    //...dann PORTD 0b0000011
102
103
  }
104
  
105
  if (temperatur > 25) {      // Wenn Temperatur größer als 25°C...
106
107
    PORTD = ~0b0011000;    //...dann PORTD 0b0011000
108
109
  }
110
111
  if ( (temperatur > 17) & (temperatur < 25) ) {  // Wenn Temperatur zwischen 17°C und 25°C
112
    
113
    PORTD = ~0b0000100;        //...dann PORTD 0b0000100
114
115
  }
116
117
  }
118
119
}

hab mein stk500 nicht da und komme erst wieder nächste Woche heim :(
kann mal einer der Profis drüberschauen und mir sagen ob das so 
funktionieren würde? :)

was heißt eigentlich diese High und Low byte bei kty_calc? habs einfach 
mal ausgeklammert damit die simulation funktioniert ^^
und vcc und V_REF hab ich einfach mit 5 für 5V gemacht...so in ordnung?

bin für jede Hilfe dankbar! :)

Grüßle

von Paul (Gast)


Lesenswert?

hab mal probiert und nun klappts mit dem high und low byte ...
aber für was ist das da?!
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <math.h>
4
5
// KTY10-5 
6
#define KTY_R25 1970.0 // R25 KTY 
7
#define KTY_RS 2600.0 // Widerstand Spannungsteiler 
8
#define KTY_ALPHA 0.00788 
9
#define KTY_BETA 0.00001937 
10
11
12
//***************************************************************** 
13
//* ADC initialisieren
14
//***************************************************************** 
15
16
void ADC_Init(void) {
17
 
18
  uint16_t ergebnis;
19
 
20
  ADMUX = (0<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen (5V)
21
  ADCSRA = (1<<ADPS2) | (1<<ADPS0);     // Frequenzvorteiler: 32
22
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
23
 
24
  ADCSRA |= (1<<ADSC);                  // ADC-Wandlung
25
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
26
  ergebnis = ADCW;
27
}
28
 
29
30
//***************************************************************** 
31
//* ADC-Messung
32
//***************************************************************** 
33
34
uint16_t ADC_Read( uint8_t channel ) {
35
  
36
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);  // Kanal waehlen, ohne andere Bits zu beeinflußen
37
  ADCSRA |= (1<<ADSC);                    // ADC-Wandlung
38
  while (ADCSRA & (1<<ADSC) ) {}          // auf Abschluss der Konvertierung warten
39
  return ADCW;                            // ADC auslesen und zurückgeben
40
}
41
 
42
43
uint16_t ADC_Read_Avg( uint8_t channel, uint8_t average ) {
44
  uint32_t result = 0;
45
 
46
  for (uint8_t i = 0; i < average; ++i )
47
    result += ADC_Read( channel );
48
 
49
  return (uint16_t)( result / average );
50
}
51
52
53
//***************************************************************** 
54
//* KTY-Temperatur 
55
//***************************************************************** 
56
57
float kty_calc(int adcResult) 
58
{ 
59
float vAdc, temp, kt; 
60
float V_REF = 5.0, vcc = 5.0;
61
float tempHighbyte, tempLowbyte;
62
63
vAdc = (adcResult * V_REF) / 1024.0; 
64
kt = (KTY_RS / (vcc / vAdc - 1.0)) / KTY_R25; // Temperaturfaktor 
65
66
temp = KTY_ALPHA*KTY_ALPHA - 4.0 * KTY_BETA + 4.0 * KTY_BETA * kt; 
67
temp = 25.0 + ((sqrt(temp) - KTY_ALPHA) / (2.0 * KTY_BETA)); // Temperatur in °C 
68
69
tempHighbyte = temp; 
70
tempLowbyte = (temp - tempHighbyte) * 10.0; 
71
72
return temp; 
73
}
74
75
76
//***************************************************************** 
77
//* Hauptschleife
78
//***************************************************************** 
79
80
int main() {
81
82
  uint16_t adcwert;
83
  float temperatur;
84
85
  ADC_Init();    // springt zu ADC_Init
86
87
  // DDRB = 0x00;    // Port B Eingang
88
  DDRD = 0xff;    // Port D Ausgang
89
  PORTD = 0x00;
90
91
  // PORTB = 0xff;    // interne Pull-Up Widerstände aktivieren
92
93
  while( 1 ) {
94
  
95
  adcwert = ADC_Read_Avg(0, 1);    // Kanal 0, Mittelwert aus 4 Messungen
96
  temperatur = kty_calc(adcwert);
97
98
  PORTD = 0x00;
99
100
  if (temperatur < 17) {      // Wenn Temperatur kleiner als 17°C...
101
    
102
    PORTD = ~0b0000011;    //...dann PORTD 0b0000011
103
104
  }
105
  
106
  if (temperatur > 25) {      // Wenn Temperatur größer als 25°C...
107
108
    PORTD = ~0b0011000;    //...dann PORTD 0b0011000
109
110
  }
111
112
  if ( (temperatur > 17) & (temperatur < 25) ) {  // Wenn Temperatur zwischen 17°C und 25°C
113
    
114
    PORTD = ~0b0000100;        //...dann PORTD 0b0000100
115
116
  }
117
118
  }
119
120
}

von Paul (Gast)


Lesenswert?

sorry die zeile muss natürlich so lauten!
1
adcwert = ADC_Read_Avg(0, 4);    // Kanal 0, Mittelwert aus 4 Messungen

von Sonntag (Gast)


Lesenswert?

Hallo,

Hab mal ne Frage: Kann mir bitte jemand erklären bzw. herleiten wie man 
auf die Formel (KTY_RS/(vcc/vAdc-1))/KTY_RS25 kommt?
Vielen Dank schon im Voraus!

LG

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.