Pfad: Home => AVR-DE => Anwendungen => Thermometer tn24 => Temperatur mit PT100   This page in english: Flag EN Logo
Thermometer PT100 AVR-Anwendungen

Thermometer mit PT100-Sensor am TN24-LCD-Modul


Thermometer mit PT100

Da hat man nun einen echt genauen und professionellen Sensor für Temperaturen, einen PT100 für echt Geld (kein Wunder, ist ja auch ziseliert verarbeitetes Platin drinne), und was soll man nun damit anfangen?

Nun, ganz einfach: Temperaturen damit messen. Aber wie? Ein Milli-Ampere durchschicken und die Spannung am Sensor messen. Nun, bei 25°C zeigt das jetzt 109,74 Milli-Volt an (falls das Messgerät das überhaupt messen kann und nicht nur einfach Null anzeigt). Bei sommerlichen 26°C wären es 110,12 mV. Und wie kriegt man aus sowas nun die Temperatur? Man dividiert die Volte mit 0,001, oder nimmt einfach die Millivolt, und sucht den Wert in der Tabelle im Rechenblatt "pt100" der LibreOffice-Datei hier. Ganz schön mühsam, das alles.

Nun, das ist doch gefundenes Fressen für einen Mikrocontroller! Der kann das doch: Spannungen messen, den Wert irgendwie mit irgendwas malnehmen und dann aus einer riesigen Tabelle die Temperatur auslesen.

Nun läuft man da natürlich wieder in diverse Fallen:
  1. Bei minus 40°C liegen gerade mal 84 mV vor, bei plus 100°Celsius magere 138,5 mV. Das lastet einen 10-Bit- AD-Wandler selbst bei einer niedrigen Referenzspannung von nur 1,1 V nicht so arg aus. Ein ADC-Bit entspricht da nur 1 / 1024 Volt, also etwa einem Millivolt. Und zwischen 25 und 26°C waren nur ganze 1,4 mV Unterschied (siehe oben). Das reicht allenfalls für eine Auflösung von +/- 1°, aber keinesfalls für 0,1° und schon gar nicht für 0,01°. Und: einfach den Messstrom auf 10 mA erhöhen und damit die Spannungen verzehnfachen, ist auch nicht so empfehlenswert, denn der Messfühler produziert dann auch 10 mW Wärme, und, wenn Luft gemessen werden soll, erwärmt sich von selbst. Allenfalls wenn man nur Wasser messen will, könnt's gehen. Dann wären 7,94 mA Messstrom empfehlenswert, damit der ADC-Eingang bei 1,1 V-Referenzspannung nicht zugestopft wird.
  2. Die Kennlinie von PT100-Sensoren ist nicht ganz linear: bei minus 40°C ist die Steigung 0,395 Ω/°, bei plus 100 sind es 0,379. Für mehr Genauigkeit muss daher schon eine Tabelle her. Die Tabelle soll Temperaturen zwischen -40 und plus 100 umfassen. Das sind 141 Einzelwerte. Angenommen, jeder Wert brauche 16 Bits, sind das bei einer Auflösung von 1° 282 Bytes, bei +/- 0,1° aber schon 2,75 kByte. Da muss es dann schon ein ATtiny44 sein, damit die Tabelle überhaupt ins Flash passt. Und gar, wenn es mit +/- 0,01° gehen soll, was so ein PT100 durchaus in der Lage ist zu messen, sprengt die Tabelle auch den Rahmen von ATtiny und es muss ein ATmega mit mindestens 32 kB Flash her. Materialschlacht statt Intelligenz, würde ich Assembler-Programmierer sagen.
  3. Das Hantieren mit Zahlen mit drei Stellen nach dem Komma, wie es die PT100-Tabelle offensichtlich nötig macht, ist auch nicht jedermanns Sache. Wer jetzt auf die glorreiche Idee kommt, die Fließkomma-Bibliothek anzuwerfen, landet schon mal von vornherein beim ATtiny84 (drunter geht die alleine gar nicht rein). Wer die Tabelle als Fließkommazahlen in das Flash packen will, hat schon ganz verloren und braucht einen 16- oder 32-Bit-Controller-Typ, weil jede Zahl da sieben oder acht Bytes braucht (sechs signifikante Dezimaldigits), was selbst ATxmega flash-mäßig total überfordert. Üble Sackgasse, liebe C-Freaks.
Nein, da muss was Intelligentes her, sonst geht das übel in die Hose.

Top Funktionsweise Hardware Aufbau Software Algorithmen

1 Funktionsweise

Kapitel 1.1 beschreibt den PT100-Sensor, 1.2 das Messmodul und 1.3 das Auswertungs- und Anzeige-Modul.

1.1 Der PT100-Sensor

Die Kennlinie eines PT100-Sensors Ein PT100-Sensor ist ein Gerät, dessen Widerstand der Temperatur folgt: je höher die Temperatur, desto höher der Widerstand.

Leider ist die Widerstandszunahme nicht gleich: unterhalb von -50°C geht es mit der Widerstandszunahme steiler aufwärts, oberhalb von -50°C geht die Widerstandszunahme pro Grad von 0,40 auf 0,29 Ω/°C langsam zurück, aber das recht gleichmäßig.

Solche Verhältnisse kann man rechentechnisch nach zweierlei Manier in den Griff kriegen:
  1. mit Tabellen, oder
  2. durch lineares Interpolieren mit zwei, drei, vier oder mehr Stützstellen.
Je nachdem, welche Auflösung das Thermometer bieten soll, kann die erste Methode mit Tabellen ziemlich aufwändig werden: schon bei zwei Dezimalstellen nach dem Komma hat man im Bereich zwischen -40 und +100°C 14.000 Einzelwerte zu speichern, was jeden ATtiny hoffnungslos überfordern würde (siehe oben).

Die Kennlinie eines PT100-Sensors und quadratische Interpolation Beschränkt man den Messbereich auf alltagstaugliche -40 bis +100°C, und rechnet sich die quadratische Gleichung dazu aus, dann ist das rechentechnisch doch eine machbare Aufgabe. Die Kurve ist recht linear, der quadratische Anteil ist ziemlich niedrig (allerdings trägt bei 100°C der quadratische Teil 100 * 100 * 0,000058 immerhin 0,58Ω bei).

Von dem (aufgerundeten) dritten Parameter der Gleichung, dem Widerstand bei 0°C, hat der Sensor übrigens seinen Namen.

1.2 Das Messmodul

Um den Widerstand des Sensors zu messen, kann man entweder den Strom messen, der sich beim Anlegen einer konstanten Spannung einstellt oder man kann einen konstanten Strom durch den Sensor schicken und die sich einstellende Spannung messen. Da man im ersten Fall den Strom mit dem Microcontroller nur messen kann, wenn man ihn mittels eines Widerstands in eine Spannung umwandelt, ist die zweite Methode einfacher.

Der optimale Messbetrieb kann durch Vergleich mit der internen 1,1 V- Referenzspannung erfolgen, wie sie in vielen AVR verfügbar und einschaltbar ist. Um die volle Messspannung zu erreichen, müsste der Konstantstrom so eingestellt werden, dass er bei der höchsten zu messenden Temperatur auf 1,1 V kommt.

t[°C]R[Ω]I[mA]
50119,3979,204
100138,5067,934
150157,3256,985
200175,8566,249
250194,0985,662


Allerdings sind Ströme von 9 mA dazu geeignet, den Sensor von innen her zu erwärmen (ca. 10 mW thermische Leistung). Bei Messungen in Luft ist das zu viel des Guten.

Verstärkt man die Spannung, z. B. um das 10-fache, kann man den Messstrom durch den Sensor stark absenken. Diese Lösung wird hier favorisiert und im Messmodul realisiert.

1.3 Das Auswertungs- und Anzeige-Modul

Für das Messen, Rechnen und Anzeigen auf einer LCD eignet sich prinzipiell jeder AVR, der einen AD-Wandler, einen 4-Bit-Bus und drei Steuerpins für die LCD hat. Da ich das schon habe, und zwar in einem TN24-LCD-Modul, habe ich das dafür genommen. Wer so was nicht hat, baut sich die dort beschriebene Hardware einfach zum Messmodul dazu.

2 Hardware

Die Schaltbilder gibt es in der LibreOffice-Draw-Datei hier.

Das Thermometer gibt es in zwei Varianten:
  1. als Simpel-Schaltung mit einem Transistor als Konstantstromquelle, oder
  2. mit einer Konstantstromquelle und einem Instrumentenverstärker.

2.1 Simples Thermometer mit PT100

Schaltbild des einfachen PT100-Messmoduls Das ist die Simpel-Variante: ein PNP-Transistor macht aus einer LED und zwei Emitter-Widerständen eine Konstantstromquelle, die an den PT100-Sensor angeschlossen wird. Die daran abfallende Spannung wird dem AD-Wandler im ATtiny24 des TN24-LCD-Moduls zugeführt, dort gemessen, umgerechnet und auf der LCD angezeigt.

Berechnungen beim Simpel-Thermometer Auf dem Tabellenblatt "simple" in der LibreOffice-Calc-Datei hier können alle Berechnungen angestellt werden. In Abhängigkeit von der Temperatur-Obergrenze, die noch messbar sein soll, muss ein entsprechender Konstantstrom I durch den PT100-Sensor geleitet werden, damit der AD-Wandler bei der Obergrenze den Wert 1.023 produziert. Das sind bei 100°C Obergrenze 7,934 mA, bei 800°C nur 2,925 mA. Das produziert im Sensor eine thermische Leistung von einigen Milliwatt. Je nach Messobjekt kann das merklich (Luft) oder unmerklich (Wasser) werden. Bei der nächsten Variante sind es nur 0,03 mW, was man selbst in Luft nicht merken kann.

Um den Konstantstrom zu erzeugen, braucht es einen Emitterwiderstand am PNP. Je nach Messbereich wird dieser mittels eines konstanten Widerstands RC und eines 10- oder 25-Gang-Trimmers von 220 Ω gebildet. Um den Konstantstrom auf den genauen Wert einzustellen, wird entweder
  1. die Emitterleitung vom Widerstand getrennt, dort das Strommessgerät eingeschleift und der Strom auf den Sollwert eingestellt, oder
  2. die Spannung am Konstantwiderstand auf den Sollwert Vadj eingestellt.
Je nach gewünschtem Messbereich ergeben sich unterschiedliche Mess-Auflösungen. Bei 100°C kann noch auf +/-0,01° genau gemessen werden, ab 400° nur noch mit +/-0,1°.

Die weitere Auswertung der Spannung am ADC1-Eingang erfolgt im TN24-LCD-Modul. Dies ist hier detailliert beschrieben.

2.2 Thermometer mit PT100 und Verstärker

Dass der Messkopf mit etwas thermischer Leistung beaufschlagt wird, kann man mit niedrigerem Mess-Strom verringern. Das setzt allerdings voraus, dass man die Spannung etwas verstärkt, um die Auflösung auf +/-0,01° zu kriegen.

Schaltbild des PT100-Messmoduls Das ist das Schaltbild des Messmoduls. Es besteht aus folgenden Teilen:
  1. Links produziert der Transistor BC557 mit der grünen LED an seiner Basis und dem Widerstand und einem Trimmer an seinem Emitter einen Konstantstrom zum Messen. Der Konstantstrom sollte in engen Bereichen mit dem 10-Gang-Trimmer auf genau 0,500 mA eingestellt werden, entweder mit einem Strommessgerät an den beiden unteren (vorübergehend aufgetrennten) Anschlüssen oder parallel zum 2k2-Widerstand mit einem Spannungsmesser.
  2. Die am PT100-Sensor abfallende Spannung wird einem Operationsverstärker CA3140 zugeführt (nein: ein 741 oder andere OPV gehen hier NICHT!). Der verstärkt die Eingangsspannung um das (68+4,7) / 4,7 - fache = 15,468-fache. Mit dem Trimmer an den Pins 1 und 5 wird die Mitte eingestellt und Abweichungen der beiden Eingänge kompensiert.
  3. Die verstärkte Sensorspannung wird über eine sechs-polige Schnittstelle dem TN24-LCD-Modul zugeführt. Die Spannung wird am ADC3 des ATtiny24 gemessen. Das Modul bezieht die 5V-Betriebsspannung vom TN24-LCD-Modul.
Die weitere Auswertung der Spannung am ADC3-Eingang erfolgt im TN24-LCD-Modul. Dies ist hier detailliert beschrieben.

Top Funktionsweise Hardware Aufbau Software Algorithmen

3 Aufbau

3.1 Das Messmodul

Aufbau des Messmoduls So kann man das Messmodul auf einer kleinen Lochrasterplatine kompakt aufbauen. Für den Anschluss an das TN24-LCD-Modul wurde eine gewinkelte 6-pin-Buchse gewählt, die etwas weniger Platz braucht als eine stehende.

Das 10k-Poti zur Mittenjustierung des CA3140 hat sich übrigens sehr gelohnt: seine korrekte Einstellung (Spannungsdifferenz zwischen Pin2 und Pin3 auf Null justieren) hat bei mir drei bis vier Grad Differenz gebracht.

3.2 Anschluss an das TN24-LCD-Modul

Ich habe eine mit zwei sechspoligen Buchsen verbundene Flachbandleitung an den sechspoligen Stecker angeschlossen, die die beiden Stecker des Messmoduls und des TN24-Moduls eins-zu-eins verbinden.

Da eigentlich nur drei Pole nötig sind, n&aum;mlich
  1. GND (0 Volt),
  2. VCC (+5 Volt), und
  3. OpAmp-Ausgang vom Pin 6 zum ADC3-Eingang des tn24,
kann man auch die drei Kabel separat verlegen oder die Schaltung des Messmoduls direkt auf die Platine des TN24-Moduls dazupfriemeln (wenn man das eh nicht separat braucht). Ganz nach dem Geschmack des Anwenders.

3.3 Bilder vom Messmodul mit TN24-Modul

Messmodul in Aktion Rechts das Bild vom Messmodul. Die grüne LED für den Konstantstrom ist an, die Schaltung wird aus dem angeschlossenen TN24-Modul mit Strom versorgt.

Messmodul mit TN24-LCD und Fuehler Das ist das gesamte Ensemble.

Die zweite Zeile der LCD zeigt rechts neben den Kelvin die dezimale ADC-Summe aus 64 Messungen an, aus denen sich die Temperatur und der Widerstand errechnen. Die Messwerte dort schwanken um +/-5 Einheiten. Diese Schwankungen bedingen, dass die angezeigten Kelvin- und Celsius-Temperaturen in der zweiten Stelle hinter dem Komma variieren, bei der Fahrenheit-Temperatur unter Umständen auch noch die erste Stelle. Es ist daher korrekt und angemessen, die Temperaturen und den Widerstand mit zwei Stellen hinter dem Komma anzuzeigen. Wer es nicht so genau mag, kann die Temperaturen/den Widerstand schon nach der ersten Stelle runden und lässt bei der Ausgabe die letzte Ziffer einfach weg.

An dem Bild sieht man auch sehr schön, warum sich das selbstgebastelte Omega-Zeichen sehr viel besser macht als das in der LCD eingebaute: das ist mir zu sehr gestaucht.

Top Funktionsweise Hardware Aufbau Software Algorithmen

4 Software

Der Quellcode für den ATtiny24 im TN24-LCD-Modul ist hier zum Download verfügbar. Zum Assemblieren ist auch noch die Include-Datei hier nötig, die die LCD-Routinen bereitstellt. Die assemblierte Datei belegt 71% des Flash-Memory.

Die Fuses eines fabrikneuen ATtiny24 müssen nicht geändert werden: der ATtiny läuft mit dem per default eingestellten internen RC-Oszillator mit 1 MHz Takt.

Wer mehr über die Funktionsweise der Software wissen will, nimmt sich das nächste Kapitel vor.

5 Algorithmen

Die im einzelnen in der Software verwendeten Schritte sind im Folgenden detaillierter erläutert.

5.1 Die ADC-Messung

Die Spannung am PT100-Sensor bei einem Konstantstrom von 0,5 mA wird im CA3140 um das 15,4681-fache verstärkt und dem ADC3-Eingang des ATtiny24 zugeführt. Dieser ist mittels des gesetzten REFS1-Bits und des gesetzten MUX1und MUX0-Bits auf den ADC3-Eingang und auf die interne Referenzspannung von 1,1V eingestellt.

Da sonst kein weiterer ADC-Eingang zu messen ist, ist die Messung per ADATE-Bit auf Auto-Trigger eingestellt. Mit der Triggerung werden jeweils 64 Messungen vollführt (Zähler im Register rCnt) und die Ergebnisse werden in rAdcH:rAdcL aufsummiert. Sind 64 Messungen ausgeführt, wird die Auto-Triggerung und das Interrupt-Enable abgeschaltet und die bAdc-Flagge gesetzt. Die gesetzte Flagge triggert die Auswertung und Ergebnisdarstellung auf der LCD.

Die Messkampagnen werden mittels des 16-Bit-Timers TC1 angestoßen. Bei 2 Messkampagnen pro Sekunde wird der Prescaler auf 1.024 und der CTC-Wert auf 488 eingestellt. Beim Compare-Match-A-Interrrupt wird jeweils die Messkampagne gestartet.

5.2 Umrechnung des ADC-Wertes in die Kelvin-Temperatur

Ist die Flagge bAdc gesetzt, wird diese außerhalb der ISR wieder zurückgesetzt und die Messwertsumme in die Kelvin-Temperatur umgerechnet.

In der LibreOffice-Calc-Datei stehen in der Tabelle "pt100-values" die Widerstandswerte eines PT100-Sensors bei den Temperaturen zwischen -200 und +850°C in Ω.

Kennlinie eines PT100-Sensors mit quadratischer Gleichung genaehert Im Blatt "accuracy" wurden die Widerstandswerte mittels einer quadratischen Funktion angenähert. Er ergibt sich die Gleichung
R[Ω] = -5,856208*10-5 * t[°C]2 + 3,915622*10-1 * t[°C] + 9,988467*101

Vergleicht man die Widerstandswerte der Tabelle mit den nach der Formel berechneten Widerstandswerten, dann weichen die im Temperaturbereich zwischen -150 und +500°C gerechneten um weniger als 0,2Ω von den Werten der Tabelle ab, die quadratische Näherung ist daher für Berechnungen gut geeignet. Nur bei Temperaturen unter -150°C ist die Näherungsformel weniger geeignet. Diese kommen im Alltag aber selten vor (außer bei gewissen Firmen, die mit flüssiger Luft herum hantieren).

Im Weiteren wird daher mit der quadratischen Näherung gerechnet.

Um die Temperatur in Kelvin aus der ADC-Summe auszurechnen, habe ich die ADC-Summen-Werte bei den Temperaturen -40 bis +100°C ausgerechnet. Dazu musste ich
  1. die Spannung am PT100-Sensor bei einem Konstantstrom von 0,5 mA ausrechnen (U = R * I), und
  2. die Multiplikation der am Sensor anliegenden Spannung mit dem CA3140 berechnen, und
  3. diese am OpAmp-Ausgang und am ADC3 anliegende Spannung mit 64 malnehmen, durch die Referenzspannung (1,1 V) teilen und mit 1.024 malnehmen (10-Bit-ADC), und
  4. diese mit dem Hundertfachen der Kelvin-Temperatur korrelieren, denn die Temperatur soll mit einer Auflösung von 0,01 Grad ausgegeben werden.


Quadratische Funktion zur Berechnung von 100*T aus 64*ADC Das führt dann zur folgenden Formel zur Berechnung von 100*T aus der ADC-Summe 64*ADC:
100*T = 4,7024228*10-7 * 64*ADC2 + 5,1192312*10-1 * 64ADC + 2,7279871*103

Damit wir nicht mit Fließkommazahlen hantieren müssen, multiplizieren wir
  1. 4,7024228*10-7 mit 65.536*65.536, und kriegen 2.020 heraus,
  2. 5,1192312*10-1 mit 65.536 und kriegen 33.549 heraus
Das können wir nun mit ein paar 16*16-Bit-Multiplikationen erledigen: einfach
  1. 64*ADC mit 2.020 multiplizieren, die untersten beiden Bytes wegrunden und die obersten beiden Bytes des Ergebnisses mit 64*ADC erneut malnehmen, die vier Bytes des Ergebnisses abspeichern, und
  2. 64*ADC mit 33.549 multiplizieren, die vier Bytes zum bisherigen Ergebnis addieren und das Ergebnis mit 0,45 auf zwei Bytes runden, sowie
  3. 2.728 zum Ergebnis addieren.
Heraus kommt dann das 100-fache der Temperatur in Kelvin. Ganz ohne Fließkomma und nur mit Grips. Das muss nun nur noch von binär in dezimal gewandelt werden und vor den beiden letzten Ziffern das Dezimalkomma eingeschmuggelt werden (bzw. ein Punkt, wenn cEn in der Software auf Eins steht).

Da der ATtiny24 nicht über einen Hardware-Multiplikator verfügt, muss die 16*16-Bit-Multiplikation mit einem Stückchen Software erfolgen. Das hat man schnell programmiert (unter Mult im Quellcode). Alles Nötige dafür steht in Registern, womit wir Zugriffe auf das SRAM vermeiden. Die ganze Mathematik, mit Multiplizieren, Addieren/Subtrahieren, Celsius und Fahrenheit ausrechnen, runden und in dezimale Zeichenketten verwandeln und das alles an die LCD ausgeben, dauert weniger als 2 ms und kann gegenüber den 64 Messungen des ADC vernachlässigt werden.

Damit die LCD keinen Unsinn ausgibt, wenn der Sensor gar nicht angeschlossen ist, prüft die Software, ob die ADC-Summe im zulässigen Bereich zwischen -40 und +100°C liegt. Ist sie außerhalb, wird bei allen Zahlen die Zeichenkette "Range!" ausgegeben.

5.3 Umrechnung der Kelvintemperatur in °Celsius und °Fahrenheit

Die Celsius-Temperatur kriegen wir recht einfach aus den 100*Kelvin: wir ziehen nur 27.315 davon ab. Wenn das dann negativ wird, muss das Resultat von 65.536 abgezogen und die Negativ-Flagge bMinus gesetzt werden.

Aus der Temperatur in °C kann man die °F dadurch errechnen, indem man mit 9 multipliziert und durch 5 teilt und abschließend 32 hinzuaddiert. 9 durch 5 gibt unglücklicherweise eine ziemlich krumme Zahl: beim Multiplizieren mit 256 kommt 460,8 heraus, was beim Aufrunden eine inakzeptable Ungenauigkeit ergäbe. Beim Multiplizieren mit 65.536 passt das Ergebnis nicht mehr in 16 Bits, daher multiplizieren wir mit 32.768 und schieben das Ergebnis einmal links, um die untersten beiden Bytes zum Runden zu verwenden. Natürlich addieren wir nicht 32, sondern 3.200, da wir ja ebenfalls 100*F brauchen.

5.4 Umrechnung des ADC-Wertes in den PT100-Widerstand

Widerstand versus 64*ADC In gleicher Manier wie bei der Temperaturberechnung gehen wir bei der Berechnung des Widerstands vor. Glücklicherweise sind hier die beiden Parameter a und c so klein, dass wir sie weglassen können und die ADC-Summe alleine mit 14.222 multiplizieren müssen. Auch hier verwenden wir die beiden untersten Bytes des Ergebnisses zum Runden.

5.5 Ausgabe der Ergebnisse an die LCD

Die Ausgabe auf der LCD erledigen Aufrufe der Routinen in lcd.inc.

Die LCD wird einmalig beim Programmstart eingestellt (siehe 5.5.1).

Immer wenn aus der ADC-Summe die Temperaturen ermittelt wurden, werden diese in dezimale Zeichenketten im SRAM abgelegt. Falls das Ergebnis der Celsius- und/oder Fahrenheit-Temperatur negativ ist oder wenn der User die Software so eingestellt hat, dass bei positiven Temperaturen ein Plus vor die Zahl kommt, muss die Software in der Zeichenkette rückwärts laufen und das erste gefundene Leerzeichen mit dem Minus- oder Plus-Zeichen überschreiben. Die Ausgabe an die LCD ist in 5.5.2 beschrieben.

5.5.1 Einstellung der LCD

Die Einstellung der LCD erfolgt in der Routine "LcdInit" der LCD-Include. Dabei werden die in der Hauptdatei definierten Konstanten herangezogen. Diese stellen folgende Modi der LCD ein:
  1. Der Datenbus der LCD ist an das obere Nibble von Port A angeschlossen.
  2. Der Datenbus ist bi-direktional eingestellt, die Richtung kontrolliert der Anschluss PB1 (LCD-R/W).
  3. Das LCD-Enable ist an PB2 angeschlossen, der LCD-RS-Eingang an PB0.
Zu Beginn stellt die Routine LcdInit erstmalig die LCD ein. Nach der Wartezeit werden die Portpins (Daten- und Kontrollpins) in ihrer Treiberrichtung eingestellt. Die LCD wird dann in den 4-Bit-Modus gebracht.

Mittels der Routine LcdSpecChars werden die beiden Zeichen Ω (Zeichen Nummer 6) und das °-Zeichen (Zeichen Nummer 7) definiert.

Abschließend wird mit der Routine LcdText das vierzeilige Textframe ausgegeben, in das im laufenden Betrieb die Zahlen ausgegeben werden. Die Positionen, an denen das erfolgt, sind mittels Konstanten definiert: bei Änderungen der Ausgabeposition ist nur die entsprechende Konstante umzudefinieren. Man beachte, dass die Zeilen- und Spalten-Angaben der LCD mit Null beginnen, nicht mit Eins.

5.5.2 Ausgabe der Zeichenketten auf der LCD

Die vier Zeichenketten werden mit der Routine LcdSram der Include-Datei an die entsprechenden Positionen auf der LCD geschrieben. Dazu wird zuerst mit LcdPos die Position der Ausgabe eingestellt, dann wird Z auf die Position der Zahl im SRAM gestellt und die Anzahl der auszugebenden Zeichen in R16 auf 6 eingestellt. Die Routine LcdSram schreibt das dann.

Die fünfstelligen ADC-Werte werden mit der in der LCD-Include eingebauten Routine LcdDec5 bewerkstelligt. Dazu ist LcdDec in der Konfiguration auf Eins gesetzt. Die ausugebende Zahl (rAdcH:rAdcL) wird im Registerpaar Z übergeben.

Top Funktionsweise Hardware Aufbau Software Algorithmen


Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte per Email an mich (info und die Web-URL-Adresse), ich freue mich über alle Arten von Rückmeldungen.

©2023 by http://www.avr-asm-tutorial.net