| Both sides previous revision Previous revision | |
| microcontrollertechnik:8_temperatur [2024/04/23 01:23] – mexleadmin | microcontrollertechnik:8_temperatur [2026/06/03 13:27] (current) – mexleadmin |
|---|
| <WRAP column 60%> | <WRAP column 60%> |
| |
| Eine geschicktere Option ist es, den Temperatur-Array ''TEMP[]'' bereits so vorauszuberechnen, dass diese über den ADC-Wert ''tValue'' adressiert werden kann. Dazu würde aber für alle Werte ein Array mit 1024 Werten benötigt (1kB Speicher). Eine Reduktion des Arrays ist also sinnvoll. | Eine geschicktere Option ist es, den Temperatur- ''TEMP[]'' bereits so vorauszuberechnen, dass diese über den ADC-Wert ''tValue'' adressiert werden kann. Dazu würde aber für alle Werte ein mit 1024 Werten benötigt (1kB Speicher). Eine Reduktion des s ist also sinnvoll. |
| * Betrachtet man die obige Tabelle ''ADC_VAL[]'', so ist jeder Wert größer als 256 und kleiner als 976. Diese Werte können also ignoriert werden. | * Betrachtet man die obige Tabelle ''ADC_VAL[]'', so ist jeder Wert größer als 256 und kleiner als 976. Diese Werte können also ignoriert werden. |
| * Statt die restlichen Werte in Einzelschritten abzuspeichern, könnte auch nur jeder 16. Wert gespeichert werden | * Statt die restlichen Werte in Einzelschritten abzuspeichern, könnte auch nur jeder 16. Wert gespeichert werden |
| |
| Der Index kann damit als ''index = (tValue - 256)/16; '' ermittelt werden. Der Vorteil in den verwendeten Zahlen (Vielfache von 2, hier 16) ist, dass der Microcontroller mit diesen leichter rechnen kann. Dies ist in dem untenstehenden Code umgesetzt. Die Umrechnung des Temperatur-Arrays ''TEMP[]'' ist in obigen Excel-File beschrieben. | Der Index kann damit als ''index = (tValue - 256)/16; '' ermittelt werden. Der Vorteil in den verwendeten Zahlen (Vielfache von 2, hier 16) ist, dass der Microcontroller mit diesen leichter rechnen kann. Dies ist in dem untenstehenden Code umgesetzt. Die Umrechnung des Temperatur-s ''TEMP[]'' ist in obigen Excel-File beschrieben. |
| |
| |
| **Beachten Sie, folgendes** | **Beachten Sie, folgendes** |
| * Es wird nun ein ATmega328 genutzt, d.h. das Programm ist nicht mehr kompatibel mit dem MiniMEXLE! | * Es wird nun ein ATmega328 genutzt, d.h. das Programm ist nicht mehr kompatibel mit dem MiniMEXLE! |
| * Das Display ist nunan einem anderen Port um den Analog-Digial-Wandler am Port C zu nutzen. \\ Deshalb muss der Treiber ''lcd_lib_de.h'' wiefolgt angepasst werden: | * Das Display ist nun an einem anderen Port um den Analog-Digial-Wandler am Port C zu nutzen. \\ Deshalb muss der Treiber ''lcd_lib_de.h'' wiefolgt angepasst werden: |
| * Zeile 26: ''#define F_CPU **12288000UL**'' | * Zeile 26: ''#define F_CPU **12288000UL**'' |
| * Zeile 39: ''#define PIN_EN PD**4**'' | * Zeile 39: ''#define PIN_EN PD**4**'' |
| - Die Header-Dateien entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ | - Die Header-Dateien entsprechen denen der letzten Programme. \\ \\ \\ \\ \\ |
| - 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 ''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. |
| |
| '' Umrechnung ==========================='' \\ \\ \\ | '' Umrechnung ==========================='' \\ \\ \\ |
| - Die Variable ''index'' gibt die Position in dem Array ''TEMP[]'' an. In ''TEMP[]'' sind nur Stützpunkte für jeden 16. Wert angegeben. | - Die Variable ''index'' gibt die Position in dem ''TEMP[]'' an. In ''TEMP[]'' sind nur Stützpunkte für jeden 16. Wert angegeben. |
| - Die Variable ''steps'' gibt den Zwischenschritt zwischen zwei Stützpunkte in Sechzehntel an | - Die Variable ''steps'' gibt den Zwischenschritt zwischen zwei Stützpunkte in Sechzehntel an |
| - ''tValue'' ermittelt die Lineare Interpolation zwischen zwei Schritten | - ''tValue'' ermittelt die Lineare Interpolation zwischen zwei Schritten |