Ich möchte ein Thermometer mit einem NTC bauen. Aber die Berechnung der Temperatur funktioniert nicht. Ich möchte den ADC Wert ermitteln(klappt), Die Temperatur daraus ausrechnen (klappt nicht), und die Temperatur per RS232 an meinen Laptop schicken(klappt). Bei meinem Laptop kommt immer nur "25.01" oder "-273,15" an. Am ADC ist der NTC und ein 10k Pullup angeschlossen. Das ist der Code:
1 | #define F_CPU 1000000 |
2 | |
3 | #include <stdio.h> |
4 | |
5 | //#include <avr/interrupt.h> |
6 | |
7 | |
8 | //#include "General.h" |
9 | |
10 | #include "RS232.c" |
11 | |
12 | #include <util/delay.h> |
13 | |
14 | #include <math.h> |
15 | |
16 | //#include "RS232.h" |
17 | |
18 | //#include "Delay.h" |
19 | |
20 | uint16_t ADC_Read(uint8_t channel) |
21 | |
22 | { |
23 | |
24 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); |
25 | |
26 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
27 | |
28 | while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten |
29 | |
30 | return ADCW; // ADC auslesen und zurückgeben |
31 | |
32 | } |
33 | |
34 | int main (void) |
35 | |
36 | { |
37 | |
38 | |
39 | |
40 | RS232_Init (); |
41 | |
42 | ADMUX = (1<<REFS0); // VCC als Referenz |
43 | |
44 | ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler |
45 | |
46 | ADCSRA |= (1<<ADEN); // ADC aktivieren |
47 | |
48 | printf ("Hello world...\n"); |
49 | |
50 | char itoabuf[20]; |
51 | |
52 | char dtostrfbuf[20]; |
53 | |
54 | int raw; |
55 | |
56 | float temp; |
57 | |
58 | while (1) |
59 | |
60 | { |
61 | |
62 | _delay_ms(100); |
63 | |
64 | _delay_ms(100); |
65 | |
66 | _delay_ms(100); |
67 | |
68 | _delay_ms(100); |
69 | |
70 | _delay_ms(100); |
71 | |
72 | _delay_ms(100); |
73 | |
74 | _delay_ms(100); |
75 | |
76 | _delay_ms(100); |
77 | |
78 | _delay_ms(100); |
79 | |
80 | _delay_ms(100); |
81 | |
82 | raw=ADC_Read(0); |
83 | |
84 | temp=(1282088/(4300+ln(raw/(1023-raw))*298.16))-273.15; |
85 | //Hier wird die Temperatur berechnet |
86 | dtostrf(temp,3,1,dtostrfbuf); |
87 | //float zu char[] |
88 | printf(dtostrfbuf); |
89 | |
90 | printf("\n"); |
91 | |
92 | itoa(raw,itoabuf,10); |
93 | |
94 | printf(itoabuf); |
95 | |
96 | printf("\n"); |
97 | |
98 | } |
99 | |
100 | } |