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 ==============================='' |