NTC-Temperaturlogger mit TINY13
von Wolfram Herzog
Für ein Schulprojekt im naturwissenschaftlichen Unterricht wurde eine Lösung zum Erfassen von Temperaturen über mindestens 24 Stunden gebraucht. Also wurde diese Anwendung mit dem Lernpaket Mikrocontroller realisiert. Ein Temperaturlogger, der mittels eines NTC-Widerstandes die Temperatur misst und die Werte im EEPROM des TINY13 speichert.
Die Hardware:
Stückliste:
Neben dem Lernpaket werden folgende Bauteile benötigt:
1 NTC Widerstand 1 k
1 Widerstand 1k5
1 Drahtbrücke rot
1 Drahtbrücke blau
Hier das Schaltbild:
Bedienung:
| Ganzen Artikel lesen... |  |
Der Messmodus ist aktiviert, wenn die blaue Drahtbrücke fehlt. Wird die Platine mit Strom versorgt, beginnt die LED im Minutentakt zu leuchten. Damit befindet sich die Schaltung im Messmodus und macht alle 60 Minuten eine Messung, deren Ergebnis im EEPROM gespeichert wird. Es können maximal 32 Messungen gespeichert werden. Sind 32 Messungen gemacht, stoppt der Messvorgang und die LED hört auf zu blinken.
Natürlich kann die Schaltung auch mit einer Batterie betrieben werden. Dazu beachte man die Seite 145 des Handbuches zum Lernpaket. Dort sieht man wie mit einer 9-V-Blockbatterie eine externe Versorgung realisiert werden kann. Der 10-k-Widerstand zwischen PIN3 und 5 ist dabei wichtig, sonst läuft die Software nicht an.
Um die erfassten Messwerte auf den PC zu übertragen, muss der Ausgabemodus aktiviert werden. Dazu wird die im Schaltplan blau eingezeichnete Drahtbrücke gesteckt. Dann wird die Platine wie gewohnt mit dem PC verbunden.
Das LPmikros-Programm wird in den Terminalmodus gebracht. Durch Ein- und Ausklicken des RTS Kästchens wird der Auslesevorgang gestartet. Die Messwerte erscheinen im Fenster „Bytes empfangen".
Da der AD-Wandler mit 10 bit misst, wird jeder Messwert in 2 Byte gespeichert. Die Daten können dann z.B. in EXCEL weiterverarbeitet werden. Dazu wird das erste Byte mit 256 multipliziert und der zweite Wert addiert. Dies ergibt den Messwert des AD-Wandlers. Bei 5 V ergibt dies eine Spannung von 0,0048 Volt pro Bit. Ein Messwert von 568 ergibt dann 2,773 Volt. Über die NTC Kennlinie kann die dazugehörige Temperatur von ca. 25,4 Grad ermittelt werden.
Beispielmessung
Statt des NTC Widerstandes kann z.B. auch ein LDR angeschlossen werden, um z.B. Helligkeitswerte aufzuzeichnen. Hier sind der Phantasie keine Grenzen gesetzt.
Die Software:
Das Programm ist in Assembler geschrieben und mit vielen Kommentaren versehen. Nach der Initialisierung der Ports wird PB0 abgefragt. Ist die blaue Drahtbrücke gesteckt, geht das Programm in den Ausgabemodus. Hier werden alle 64 Bytes des EEPROM seriell ausgegeben. Die Routinen dafür wurden aus den Beispielen des Lernpaketes übernommen.
Fehlt die Drahtbrücke, wird der Timer und der AD-Wandler initialisiert. In einer Interruptroutine wird eine zweistufige Zählschleife realisiert, die in der ersten Stufe die LED im Minutentakt blinken lässt. In der zweiten Stufe wird die eigentliche Messroutine aufgerufen. Hier kann mit der Variablen „messintervall" eingestellt werden, nach wie viel Minuten eine Messung erfolgt. Standardmäßig sind hier 60 Minuten eingestellt. Es wird also Wert pro Stunde ins EEPROM geschrieben.
;--------------------------------------------
;;

Interrupt-Routine

;--------------------------------------------
timer0_overflow:



;

Timer

0

Overflow

Handler

in

sicher,SREG


;

Statusregsiter

sichern

cpi


EEAdr,64


;

Haben

wir

64

Bytes

=

32

Messungen

gemacht?

brsh

messfertig



;

Ja,

also

Messung

überspringen
;;

Zählschleife

zum

Verzögern

der

Messungen

;

(hier

ca.

alle

60

Min

eine

Messung)

Inc


z1



;

Zähler1

erhöhen

Cpi


z1,67



;

Maximum?

(67,24)

Breq

timerz2


;

Ja,

dann

weiter

mit

Zähler

2

Rjmp

fertig


;

sonst

Interrupt

Ende
timerz2:

rcall

LEDschalt



;

LED

umschalten

zum

Anzeige

der

Messung

inc


z2



;

Zähler2

erhöhen

cpi


z2,messinterval

;

60

minuten

für

ca.

1h

Messinterval

breq

timermess



;

Ja,

dann

weiter

mit

Messung

rjmp

fertig
;;

Messung

durchführen

timermess:

rcall

tempmess



;

AD

Wandler

auslesen

rcall

WrEE



;

2

Byte

ins

EPROM

schreiben

und

EEAdr

erhöhen

rcall


LEDschalt


;

jetzt

wird

LED

umgeschaltet
;;

Messung

ist

fertig
messfertig:

cbi

portb,4



;

Status-LED

ausschalten

(oder

besser

einschalten?)

ldi


z1,

0x00

ldi


z2,

0x00

ldi


z3,

0x00
fertig:

out

SREG,sicher


;Statusregister

wiederherstellen

reti
Auszug aus dem Quelltext
Download der Firmware

Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen