Ein Thermoelement am ATtiny85    


Elektronik-Labor   Projekte   AVR  Tiny85



Das Franzis Lernpaket Mikrocontroller


Ein Termoelement von Typ K liefert nur eine Spannung von etwa 39 µV pro Grad. Wenn man den AD-Wandler des ATTiny85 mit der internen Referenz von 1100 mV betreibt, hat man schon eine Auflösung von 1 mV. Wenn man dann noch die interne Differenzmessung mit 20-facher Verstärkung verwendet, sind es schon 50 µV. Und dann noch mal kräftig mitteln, dann müsste es für eine Auflösung von einem Grad reichen. Das war trotzdem nicht ganz einfach, die nötige Präzision hinzubekommen. Wichtig war auch noch eine kleine Wartezeit zwischen jeder Messung.

Das Thermoelement wurde mit einem Kondensator mit 100 nF verbunden, damit die Spannung möglichst sauber ist. Und ADC3 wurde intern an GND geschaltet, um eine eindeutige Referenz zu bekommen.


'Thermo.bas   Thermoelement Typ K an ADC2 und ADC3
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 8
$swstack = 4
$framesize = 4

Dim U As Long
Dim D As Long
Dim N As Integer
Dim T As Long
Dim T0 As Long

Open "comb.1:9600,8,n,1" For Output As #1
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1

Adcsrb = 0                                                  ' Unipolar

Ddrb.3 = 1                                                  ' Referenz-Pin
Portb.3 = 0


Do
  U = 0
  For N = 1 To 1000
     D = Getadc(7)                                          ' (ADC2-ADC3)*20
     U = U + D
     Waitus 200
  Next N
  U = U * 1100
  U = U / 1023
  U = U / 20                                                ' U in µV
  T = U * 500
  T = T / 20644                                             ' 20.644 mV bei 500 Grad

  U = 0
  D = Getadc(15)
  Waitms 200
  For N = 1 To 100                                          ' Interne Temperatur
    D = Getadc(15)
    U = U + D
  Next N
  U = U / 100
  T0 = U - 273
  T = T - T0                                                ' Eispunkt-Kompensation

  T = T + 14                                                ' Kalibrierung
  Print #1 , Chr(13);
  Print #1 , " T = ";
  Print #1 , T;
  Print #1 , " C     ";

Loop

End



Das Programm verwendet zusätzlich die interne Temperaturmessung des Controllers für eine Eispunkt-Kompensation. Am Ende blieb dann ein Fehler von 14 Grad übrig, der wegkalibriert werden muss. Das wird wohl bei jedem Controller anders sein. Für die Anzeige wird der im Handbuch des Lernpakets verwendete Trick eingesetzt, eine stehende, einzeilige Anzeige im Terminal zu erzeugen.




Ich hätte das nicht erwartet, aber die Anzeige steht absolut still, wenn sich die Temperatur nicht ändert. Zum Test habe ich mal einen Gasbrenner drangehalten. Die Temperatur stieg über 500 Grad.



Und wenn die Spitze hell glüht, können sogar über 1000 Grad gemessen werden. Man bekommt also tatsächlich ein richtig brauchbares Thermometer zu geringsten Kosten von rund zwei Euro für den Tiny85.



Und wer grade kein echtes Thermoelement hat, kann einfach zwei unterschiedliche Drähte nehmen. Kupfer und Konstantan geht sehr gut, aber man kann auch einfach mal alle Drähte testen, die gerade in Reichweite sind. Wenn es dann richtig genau werden soll, muss man natürlich noch einen Faktor in der Software anpassen.


Elektronik-Labor   Projekte   AVR  Tiny85