stormracer
04.02.2007, 17:28
Moin,
ich habe ein KTY81-210 Temperatursensor. Mittlerweile kann ich den auch über den ADC auswerten, also den ADC Wert in einen Widerstandswert umrechnen, nur wie kommt man nun vom Widerstandswert auf die Temperatur. Im Datenblatt stehen zwar die Werte aber gibt es eine bessere Möglichkeit, als über eine Switch Verzweigung mit ca. 25 Case Anweisungen?
Leider gehen bei der Berechnung des Widerstandes auch die Kommazahlen verloren, wodurch der Widerstand leicht ungenau wird, d.h. kann ich die Werte nur schlecht mit Excel berechnen.
Mein Hauptprogramm:
int main (void)
{
uint32_t ADC_wert=0;
uint32_t Uref=21800; //2,18V
uint32_t ADC_max=1024;
uint32_t Rv=5470;
uint32_t U_adc=0;
uint32_t Rt=0;
uint32_t U=50000;
uint32_t Uv=0;
uart_init();
DDRC = (1<<PC7)|(1<<PC0);
ADCSRA = (1<<ADEN)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADMUX = (1<<REFS1)|(1<<REFS0);
ADMUX = 0x00;
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
while(1)
{
PORTC = (0<<PC7);
PORTC = (0<<PC0);
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
ADC_wert = ADC;
PORTC = (1<<PC0);
uart_puts("ADC: ");
uart_putv(ADC_wert);
delay_ms(500);
U_adc=((Uref/ADC_max)*ADC_wert);
U_adc=U_adc+100;
Uv=U-U_adc;
Rt=(U_adc*Rv)/(Uv);
uart_putc(' ');
uart_putc(' ');
uart_putv(U_adc);
uart_putc(' ');
uart_putv(Rt);
uart_putc('\n');
uart_putc('\r');
delay_ms(1000);
}
}
ich habe ein KTY81-210 Temperatursensor. Mittlerweile kann ich den auch über den ADC auswerten, also den ADC Wert in einen Widerstandswert umrechnen, nur wie kommt man nun vom Widerstandswert auf die Temperatur. Im Datenblatt stehen zwar die Werte aber gibt es eine bessere Möglichkeit, als über eine Switch Verzweigung mit ca. 25 Case Anweisungen?
Leider gehen bei der Berechnung des Widerstandes auch die Kommazahlen verloren, wodurch der Widerstand leicht ungenau wird, d.h. kann ich die Werte nur schlecht mit Excel berechnen.
Mein Hauptprogramm:
int main (void)
{
uint32_t ADC_wert=0;
uint32_t Uref=21800; //2,18V
uint32_t ADC_max=1024;
uint32_t Rv=5470;
uint32_t U_adc=0;
uint32_t Rt=0;
uint32_t U=50000;
uint32_t Uv=0;
uart_init();
DDRC = (1<<PC7)|(1<<PC0);
ADCSRA = (1<<ADEN)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADMUX = (1<<REFS1)|(1<<REFS0);
ADMUX = 0x00;
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
while(1)
{
PORTC = (0<<PC7);
PORTC = (0<<PC0);
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
ADC_wert = ADC;
PORTC = (1<<PC0);
uart_puts("ADC: ");
uart_putv(ADC_wert);
delay_ms(500);
U_adc=((Uref/ADC_max)*ADC_wert);
U_adc=U_adc+100;
Uv=U-U_adc;
Rt=(U_adc*Rv)/(Uv);
uart_putc(' ');
uart_putc(' ');
uart_putv(U_adc);
uart_putc(' ');
uart_putv(Rt);
uart_putc('\n');
uart_putc('\r');
delay_ms(1000);
}
}