| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
| microcontrollertechnik:8_temperatur [2023/11/14 00:50] – mexleadmin | microcontrollertechnik:8_temperatur [2024/04/23 01:23] (aktuell) – mexleadmin |
|---|
| * Eine [[https://www.katharinengymnasium.de/wolf/web/analogdigital/analogdigital_inhalt.html|schnelle und seichte Einführung in AD-Wandler]] | * Eine [[https://www.katharinengymnasium.de/wolf/web/analogdigital/analogdigital_inhalt.html|schnelle und seichte Einführung in AD-Wandler]] |
| |
| </WRAP> <WRAP column 65%> | </WRAP> <WRAP> |
| ===== Video ===== | ===== Video ===== |
| | |
| | {{youtube>IkPOZXeW_CM?size=700x400}} |
| | |
| | <WRAP hide> |
| {{youtube>MaddgEBeMLE?size=700x400}} | {{youtube>MaddgEBeMLE?size=700x400}} |
| | </WRAP> |
| |
| </WRAP> </WRAP> | </WRAP> </WRAP> |
| |
| | <WRAP > |
| | <imgcaption BildNr10 | Schaltung des AD-Wandlers im 328> |
| | </imgcaption> |
| | {{drawio>AdcWandler.svg}} |
| | </WRAP> |
| ===== Messsignal-Digitalisierung und Auswertung ===== | ===== Messsignal-Digitalisierung und Auswertung ===== |
| |
| <-- | <-- |
| |
| --> III. Eingabe in Atmel Studio # | --> III. Eingabe in Microchip Studio # |
| |
| |
| - Die Konstanten entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ \\ | - Die Konstanten entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ \\ |
| - Es wird eine zusätzliches Array ''TEMP[]'' angelegt, in denen die Temperaturen in 1/10 °C abgespeichert sind. Beispielsweise entspricht der erste Eintrag''521'' einer Temperatur von $52,1°\rm C$. Der erste Eintrag wird bei einem ADC-Wert von 256 benötigt. Der zweite Eintrag entspricht $49,9° \rm C$ und wird bei einem ADC-Wert von 256+16 = 272 benötigt. Die weiteren entsprechend. Die Herleitung erfolgt wie unter [[8_temperatur#Messsignal-Digitalisierung und Auswertung]] vorgegeben. \\ \\ \\ | - Es wird eine zusätzliches Array ''TEMP[]'' angelegt, in denen die Temperaturen in 1/10 °C abgespeichert sind. Beispielsweise entspricht der erste Eintrag''521'' einer Temperatur von $52,1°\rm C$. Der erste Eintrag wird bei einem ADC-Wert von 256 benötigt. Der zweite Eintrag entspricht $49,9° \rm C$ und wird bei einem ADC-Wert von 256+16 = 272 benötigt. Die weiteren entsprechend. Die Herleitung erfolgt wie unter [[8_temperatur#Messsignal-Digitalisierung und Auswertung]] vorgegeben. \\ \\ \\ |
| - Bei den Variablen entsprechen einige denen der letzten Programme. \\ \\ \\ \\ \\ \\ | - Bei den Variablen entsprechen einige denen der letzten Programme. \\ \\ \\ \\ |
| - Die Variable ''adcValue'' wird mit dem digitalisierten ADC-Wert befüllt. | - Die Variable ''adcValue'' wird mit dem digitalisierten ADC-Wert befüllt. |
| - Die Variable ''tValue'' beinhaltet die aktuelle Temperatur in 1/10°C und mit Vorzeichen. | - Die Variable ''tValue'' beinhaltet die aktuelle Temperatur in 1/10°C und mit Vorzeichen. |
| - Die Variable ''tValueMax'' beinhaltet die höchsten seit Start gemessene Temperatur in 1/10°C und mit Vorzeichen (entspricht einem Schleppzeiger). \\ \\ \\ \\ | - Die Variable ''tValueMax'' beinhaltet die höchsten seit Start gemessene Temperatur in 1/10°C und mit Vorzeichen (entspricht einem Schleppzeiger). \\ \\ \\ \\ |
| - Bei den Funktionsprototypen sind einige bekannte Unterprogramme vorhanden. Details werden weiter unten erklärt. \\ \\ \\ \\ | - Bei den Funktionsprototypen sind einige bekannte Unterprogramme vorhanden. Details werden weiter unten erklärt. \\ \\ \\ \\ \\ |
| |
| ''Hauptprogramm ========================='' | ''Hauptprogramm ========================='' |
| - In der Endlosschleife sind auf der ersten Ebene wieder nur If-Abfragen zu den Flags ''cycle100msActive'' und ''cycle1sActive'' zu finden. \\ \\ | - In der Endlosschleife sind auf der ersten Ebene wieder nur If-Abfragen zu den Flags ''cycle100msActive'' und ''cycle1sActive'' zu finden. \\ \\ |
| - Alle $100~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''doAdc()'' sowie ''calculateTemp()'' aufgerufen \\ \\ \\ | - Alle $100~\rm ms$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''doAdc()'' sowie ''calculateTemp()'' aufgerufen \\ \\ \\ |
| - Alle $1~\rm s$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''refreshDisplay()'' aufgerufen \\ \\ \\ \\ \\ | - Alle $1~\rm s$ (bzw. wenn das entsprechende Flag gesetzt wird) wird das Flag zurückgesetzt und das Unterprogramm ''refreshDisplay()'' aufgerufen \\ \\ \\ \\ \\ \\ \\ \\ |
| ''Timer Initialisierung ============'' | ''Timer Initialisierung ============'' |
| - Die Timer Initialisierung ist dem Programm [[4_up_down_counter|Up/Down Counter]] entlehnt und wird hier nicht weiter erklärt. \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ | - Die Timer Initialisierung ist dem Programm [[4_up_down_counter|Up/Down Counter]] entlehnt und wird hier nicht weiter erklärt. \\ \\ \\ \\ \\ \\ \\ \\ |
| |
| ''ADC Initialisierung =============='' | ''ADC Initialisierung =============='' |
| \\ | \\ |
| ''Timer-Service Routine ========================='' | ''Timer-Service Routine ========================='' |
| - Die Timer-Service Routine ist dem Programm [[4_up_down_counter|Up/Down Counter]] entlehnt und wird hier nicht weiter erklärt. \\ \\ | - Die Timer-Service Routine ist dem Programm [[4_up_down_counter|Up/Down Counter]] entlehnt und wird hier nicht weiter erklärt. \\ \\ \\ \\ |
| |
| '' ADWandlung =============================================================='' \\ \\ | '' ADWandlung =============================================================='' \\ \\ |
| - Das Register ''ADCL'' enthält die untersten (8) Bits. Das Register ''ADCH'' enthält die oberen (2) Bits, welche hier um 8 Bitt nach links verschoben werden (also mit 256 multipliziert wird). \\ __Wichtig__: | - Das Register ''ADCL'' enthält die untersten (8) Bits. Das Register ''ADCH'' enthält die oberen (2) Bits, welche hier um 8 Bitt nach links verschoben werden (also mit 256 multipliziert wird). \\ __Wichtig__: |
| - immer erst ADCL auslesen, dann ADCH. | - immer erst ADCL auslesen, dann ADCH. |
| - immer auch ADCH auslesen, selbst wenn es nicht benötigt wird. \\ | - immer auch ADCH auslesen, selbst wenn es nicht benötigt wird. \\ \\ |
| |
| '' Umrechnung ==========================='' \\ \\ \\ | '' Umrechnung ==========================='' \\ \\ \\ |
| - ''tValue'' ermittelt die Lineare Interpolation zwischen zwei Schritten | - ''tValue'' ermittelt die Lineare Interpolation zwischen zwei Schritten |
| - In ''tValue'' wird der Schleppzähler gespeichert | - In ''tValue'' wird der Schleppzähler gespeichert |
| \\ \\ \\ \\ \\ | \\ \\ \\ \\ \\ \\ \\ |
| |
| ''Anzeigefunktion ==============================='' | ''Anzeigefunktion ==============================='' |