Forum: Projekte & Code Thermometer Analog KTY81-122 ATmega8 Low Cost


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein kleines Beispiel eines analogen Thermometers

im Bereich -10... +40°C

mit einer Genauigkeit von ca. 1K und mit einem PTC KTY81-122.



Besonderheiten:

Der KTY wird nur während der Messung bestromt, um den Messfehler gering 
zu halten.

Eine permanente Bestromung würde ihn in dieser Schaltung um ca. 0,5K 
erwärmen.

Das Messergebnis ist unabhängig von der Referenzspannung / 
Betriebsspannung, da nur die Widerstandsverhältnsse ausgewertet werden.

Der Abgleich (Offset) erfolgt über die beiden Tasten. Werden beide 
Tasten gleichzeitig gedrückt, dann wird Offset auf NULL gesetzt und das 
System neu gestartet.

Der Offsetwert wird im EEPROM des ATmega8 abgelegt.

Auf die beiden Tasten habe ich bewusst im Aufbau verzichtet, mit einer 
Messspitze konnte ich die PINs problemlos gegen LOW ziehen und den 
Zeiger entsprechend einstellen.


Bei Programmstart springt der Zeiger auf +20°C und anschließend auf 
+40°C, das Potentiometer ermöglicht eine Korrektur.

In einer Tabelle wird der gemessene ADC-Wert in einen PWM-Wert 
umgerechnet,
bei Bedarf kann die Tabelle geändert werden, eine EXCEL-Datei lege ich 
mit bei.

Das analoge Zeigerinstrument wir per 8-Bit-PWM angesteuert.


Die LED-Variante:

Beitrag "KTY81-121 KTY81-122 Temperatursensor / Thermometer LED 0,5°C Auflösung Assembler ATmega8"

Bernhard

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Die LED 7-Segment Version mit SA56 (gemeinsame Anode) o.ä.

Temperaturbereich -55...+150°C

Stromaufnahme bei maximaler Helligkeit: ca. 60mA

Auch hier erfolgt der Abgleich (Offset) über die beiden Tasten.

Der Offsetwert wird im EEPROM abgelegt. Jeder Schreib- oder Lesezugriff 
wird mit "----" angezeigt.


Betätigt man beide Tasten gleichzeitig, erfolgt ein Reset und Offset 
wird auf NULL gesetzt.

Die Temperaturwerte sind in einer kleinen Tabelle hinterlegt, da die 
Kennlinie des KTY nicht linear verläuft.

Jedem ADC-Wert ist ein Temperatur-Wert zugeordnet.

Ein fehlender Sensor oder Kurzschluss in der Sensorleitung wird mit 
"8888" angezeigt.

Die TWI/I2C Pins habe ich bewusst freigelassen, um diverse Sensoren 
abfragen zu können.


Die µC-PIN-BELEGUNG für die 7-Segment-Anzeige ist in der
"THERMO_7SEGMENT_BELEGUNG.asm" definiert.


Bernhard

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Eine Variante zur Verbesserung der Genauigkeit, engt aber den oberen 
Messbereich deutlich ein.

Bsp:

Messbereich: -55°C...+30°C,  0,2K bei 20°C

von Michael B. (laberkopp)


Lesenswert?

Bernhard S. schrieb:
> Die µC-PIN-BELEGUNG für die 7-Segment-Anzeige

Man sollte wegen der auf 20mA begrenzten Stromlieferfähigkeit der 
ATmega8-Ausgangs-Pins zumindest die 4 Digits über Transistoren 
verstärkern
1
            +5V
2
             |E
3
D1..D4 --R--|< BC327
4
             |
5
        common anode
dann leuchten die Segmente der 2 wegen Überlastung des uC Pins an dem 
die gemeinsame Anode hängt nicht so viel dunkler als die Segmente der 1 
wie in deinem Photo zu sehen.

Dazu muss man dann in der Software die Polarität der Digit-Ausgänge 
invertieren.

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Hallo Michael,

>dann leuchten die Segmente der 2 wegen Überlastung des uC Pins an dem
>die gemeinsame Anode hängt nicht so viel dunkler als die Segmente der 1
>wie in deinem Photo zu sehen.

Da gebe ich Dir Recht, doch in der Praxis kann dieser Effekt durchaus 
vertretbar sein (Low Cost). s.Beweisfoto.

Bernhard

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Realisierte Variante mit verbesserter Auflösung, ca. 0,3 GRD.

Die Referenzspannung des ADC wird durch einen Spannungsteiler 
heruntergesetzt, dadurch wird der 20°C Bereich auflösungsfreundlicher.


Die Schaltung arbeitet im Bereich 2...5V problemlos, der Temperaturwert 
ändert sich um ca. 0,3 GRD bei 2V, nur die LEDs sind bei 2V kaum noch zu 
erkennen ;-)

Anmerkung:

Der Spannungswert U(ref) ist nicht von Bedeutung, nur die 
Spannungsverhältnisse U(R1), U(R3) und U(R4) müssen stimmen.

Die hinterlegte ADC-Temperatur-Tabelle errechne ich in einem 
Visual-Basic-Programm, geht natürlich auch mit Excel.

Nach anlegen der Versorgungsspannung passiert folgendes:

- der ATmega8 führt ein WDR-RESET aus
- ein 7-Segmenttest
- Anzeige "2015"
- Abfrage Tasten, bei ERROR Anzeige "----"
- KTY81-122 Messung
- Anzeige "AdC"
- Anzeige gemessener ADC-Wert an PC0: z.B. "0861"

Hauptprogramm:
- Abfrage Tastatur, bei Betätigung Anzeige "----"
- ca. alle 8 Sekunden KTY81-122 Messung (Punkt unten rechts leuchtet)
- bei Sensorfehler (ADC nicht plaisibel) Anzeige "8888"
- Anzeige Temperatur z.B. "-12.6"



Bernhard

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Bernhard S. schrieb:
> doch in der Praxis kann dieser Effekt durchaus vertretbar sein
> (Low Cost).

Du meinst, du möchtest mit Chinaschrott bezüglich der Qualitätsdefizite 
mithalten können ?

Die 4 Transistoren kosten nicht die Welt, es ist nicht mehr 1960.

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

In dieser Version brauchen wir nur zwei Spannungen messen (Uges + Uref) 
und die Werte in den Programmcode einpflegen.

So genau müssen die gemessenen Spannungen nicht sein, es kommt nur auf 
die Spannungsverhältnisse an.

Bei Programmstart hat man ca. 10 Sekunden Zeit, die Spannungen zu 
messen, in dieser Zeit wird PC1 auf HIGH gesetzt.

Kritisch ist der Widerstand R1, er beeinflusst stark das 
Temperaturergebnis.


Diese Version errechnet dem Widerstandswert (R2) des KTY81-122.

Anschließend wird in einer hinterlegten Tabelle der entsprechende 
Temperaturwert ausgelesen.

Auch hier ist das Temperaturergebnis kaum abhängig von der 
Versorgungsspannung.

Mit beiden Tasten kann der Temperatur-Offset eingestellt werden.

Eine Helligkeitssteurung ist möglich.


Nach Programmstart wird fogendes angezeigt:

- Jahr
- Uges in mV
- Uref in mV
- R1   in Ohm
- ADC-WERT
- Offset
- Temperatur

Bernhard

: Bearbeitet durch User
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.