This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
de:examples:sensor:thermistor [2011/10/04 13:30] – wittkoepper | de:examples:sensor:thermistor [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 20: | Line 20: | ||
Der Parameter B ist ein Koeffizient, | Der Parameter B ist ein Koeffizient, | ||
- | Normalerweise wird ein Spannungsteiler genutzt um den Widerstand eines Thermistors zu messen. Dabei wird ein Widerstand durch einen Thermistor ausgetauscht wird und die Inputspannung ist konstant. Es wird die Outputspannung des Spannungsteilers gemessen, welche sich in Abhängigkeit der Widerstandsänderung des Thermistors verändert. Wenn Spannung anliegt, fließt Strom durch den Thermistor, wodurch sich dieser bedingt durch den Thermistorwiderstand aufheizt und damit den Widerstand verändert. | + | Normalerweise wird ein Spannungsteiler genutzt, um den Widerstand eines Thermistors zu messen. Dabei wird ein Widerstand durch einen Thermistor ausgetauscht wird und die Inputspannung ist konstant. Es wird die Outputspannung des Spannungsteilers gemessen, welche sich in Abhängigkeit der Widerstandsänderung des Thermistors verändert. Wenn Spannung anliegt, fließt Strom durch den Thermistor, wodurch sich dieser bedingt durch den Thermistorwiderstand aufheizt und damit den Widerstand verändert. |
- | Mit begrenzten Ressourcen und weniger | + | Bei begrenzten Ressourcen und geringerem |
===== Übung ===== | ===== Übung ===== | ||
- | Das Sensormodul des HomeLab | + | Das Sensormodul des HomeLab |
- | Ein Pin des Thermistors ist an die 5+V Betriebsspannungs | + | Ein Pin des Thermistors ist an die +5 V Betriebsspannung |
- | Wenn man den AVR nutzt, | + | Während der Nutzung des AVR ist es nützlich, |
- | Die // | + | |
- | Berechnete Werte können wie folgt ins Programm eingefügt werden: | + | |
<code c> | <code c> | ||
// | // | ||
- | // Table for converting temperature values to ADC values. | + | // Tabelle zur Konvertierung von Temperaturwerten ind ADC Werte. |
- | // Every element of the array marks one Celsius | + | // Jedes Element des Arrays kennzeichnet ein Grad Celsius. |
- | // Elements begin from -20 degree and end at 100 degree. | + | // Die Elemente beginnen bei -20 Grad und enden bei 100 Grad. |
- | // There are 121 elements in the array. | + | // Ein Array enthält |
// | // | ||
const signed short min_temp = -20; | const signed short min_temp = -20; | ||
Line 59: | Line 57: | ||
</ | </ | ||
- | Following algorithm may be used to find the temperature which corresponds to the parameters of the ADC: | + | Folgender Algorithmus kann genutzt werden um die mit den ADC Parametern korrespondierende Temperatur zu finden: |
<code c> | <code c> | ||
// | // | ||
- | // Converting the ADC values to Celsius | + | // Konvertierung der ACD Werte in Grad Celsius: |
// | // | ||
signed short thermistor_calculate_celsius(unsigned short adc_value) | signed short thermistor_calculate_celsius(unsigned short adc_value) | ||
Line 69: | Line 67: | ||
signed short celsius; | signed short celsius; | ||
- | // Covering the table backwards: | + | // Tabelle von hinten beginnend durchgehen: |
for (celsius = max_temp - min_temp; celsius >= 0; celsius--) | for (celsius = max_temp - min_temp; celsius >= 0; celsius--) | ||
{ | { | ||
- | // If the value in the table is the same or higher than measured | + | // Ist der Wert aus der Tabelle gleich oder höher dem gemessenen |
- | // value, then the temperature is at least as high as the temperature | + | // Wert, ist die Temperatur mindestens so hoch wie die mit dem Element |
- | // corresponding to the element. | + | // korrespondierende Temperatur. |
if (adc_value >= conversion_table[celsius])) | if (adc_value >= conversion_table[celsius])) | ||
{ | { | ||
- | // Since the table begins with 0 but values of the elements from -20, | + | // Da die Tabelle mit 0 beginnt, die Werte der Elemente jedoch mit -20, |
- | // the value must be shifted. | + | // muss der Wert geshiftet werden. |
return celsius + min_temp; | return celsius + min_temp; | ||
} | } | ||
} | } | ||
- | // If the value was not found the minimal temperature is returned. | + | // Wurde der Wert nicht gefunden, wird die minimale Temperaur ausgegeben. |
return min_temp; | return min_temp; | ||
} | } | ||
</ | </ | ||
- | Der Algorithmus sucht den Bereich aus der Tabelle in dem der ACD Wert liegt und, und nimmt die niedrigere Nummer dieses Bereiches. Die Ranknummer markiert die Gradzahl und beim addieren der primären Temperatur wird eine Genauigkeit von 1°C erreicht. | ||
- | Diese Umrechnungstabelle und Funktion sind schon in der HomeLab | + | Der Algorithmus sucht den Bereich aus der Tabelle in dem der ACD Wert liegt und wählt die niedrigere Nummer dieses Bereiches. Die Ranknummer markiert die Gradzahl und durch das Addieren der anfänglichen Temperatur wird eine Genauigkeit von 1°C erreicht. |
- | Das Beispielprogramm dieser Übung ist ein Thermometer, | + | |
+ | Umrechnungstabelle und Funktion sind schon in der HomeLab | ||
<code c> | <code c> | ||
// | // | ||
- | // Example program of the thermistor of Sensors module. | + | // Beispielprogramm des Thermistors des Sensormoduls. |
- | // The temperature is displayed on the LCD. | + | // Die Temperatur wird auf dem LCD angezeigt. |
// | // | ||
#include < | #include < | ||
Line 104: | Line 102: | ||
// | // | ||
- | // Main program | + | // Hauptprogramm |
// | // | ||
int main(void) | int main(void) | ||
Line 112: | Line 110: | ||
char text[16]; | char text[16]; | ||
- | // Setting the LCD | + | // Einrichten des LCD |
lcd_alpha_init(LCD_ALPHA_DISP_ON); | lcd_alpha_init(LCD_ALPHA_DISP_ON); | ||
- | // Cleaning the LCD | + | // Löschen des LCD |
lcd_alpha_clear(); | lcd_alpha_clear(); | ||
- | // Name of the program | + | // Name des Programms |
lcd_alpha_write_string(" | lcd_alpha_write_string(" | ||
- | // Setting the ADC | + | // Einrichten des ADC |
adc_init(ADC_REF_AVCC, | adc_init(ADC_REF_AVCC, | ||
- | // Endless loop | + | // Endlosschleife |
while (true) | while (true) | ||
{ | { | ||
- | // Reading the 4 times rounded values of the voltage of the thermistor | + | // Auslesen der 4-fach gerundeten Spannungswerte aus dem Thermistor |
value = adc_get_average_value(2, | value = adc_get_average_value(2, | ||
- | // Converting the values of ADC into celsius scale | + | // Konvertieren der ADC Werte in Grad Celsius |
temperature = thermistor_calculate_celsius(value); | temperature = thermistor_calculate_celsius(value); | ||
- | // Converting the temperature | + | // Konvertieren der Temperatur |
// To display the degree sign, the octal variable is 337. | // To display the degree sign, the octal variable is 337. | ||
sprintf(text, | sprintf(text, | ||
- | // Displaying the text in the beginning of the second row of the LCD. | + | // Anzeige des Textes am Anfang der zweiten Zeile des LCDs. |
lcd_alpha_goto_xy(0, | lcd_alpha_goto_xy(0, | ||
lcd_alpha_write_string(text); | lcd_alpha_write_string(text); | ||
Line 146: | Line 144: | ||
===== Extra ===== | ===== Extra ===== | ||
- | * {{: | + | * {{: |